@ukwhatn/wikidot 4.0.5 → 4.0.6
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/README.md +83 -83
- package/dist/errors.cjs +1 -1
- package/dist/errors.d.cts +34 -34
- package/dist/errors.d.ts +34 -34
- package/dist/errors.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +644 -644
- package/dist/index.d.ts +644 -644
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4638,4 +4638,4 @@ export {
|
|
|
4638
4638
|
};
|
|
4639
4639
|
|
|
4640
4640
|
//# debugId=E485D5010CDADA3C64756E2164756E21
|
|
4641
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2NvbW1vbi9lcnJvcnMvYmFzZS50cyIsICJzcmMvY29tbW9uL2Vycm9ycy9hbWMudHMiLCAic3JjL2NvbW1vbi9lcnJvcnMvc2Vzc2lvbi50cyIsICJzcmMvY29tbW9uL2Vycm9ycy90YXJnZXQudHMiLCAic3JjL2NvbW1vbi9lcnJvcnMvaW5kZXgudHMiLCAic3JjL2NvbW1vbi9sb2dnZXIudHMiLCAic3JjL2NvbW1vbi90eXBlcy9yZXN1bHQudHMiLCAic3JjL2NvbW1vbi90eXBlcy9pbmRleC50cyIsICJzcmMvY29ubmVjdG9yL2FtYy1jb25maWcudHMiLCAic3JjL21vZHVsZS91c2VyL2Fub255bW91cy11c2VyLnRzIiwgInNyYy9tb2R1bGUvdXNlci9kZWxldGVkLXVzZXIudHMiLCAic3JjL21vZHVsZS91c2VyL2d1ZXN0LXVzZXIudHMiLCAic3JjL3V0aWwvdGFibGUvY2hhci10YWJsZS50cyIsICJzcmMvdXRpbC9zdHJpbmctdXRpbC50cyIsICJzcmMvbW9kdWxlL3VzZXIvdXNlci1jb2xsZWN0aW9uLnRzIiwgInNyYy9tb2R1bGUvdXNlci91c2VyLnRzIiwgInNyYy9tb2R1bGUvdXNlci93aWtpZG90LXVzZXIudHMiLCAic3JjL21vZHVsZS91c2VyL2luZGV4LnRzIiwgInNyYy91dGlsL3BhcnNlci91c2VyLnRzIiwgInNyYy91dGlsL3BhcnNlci9pbmRleC50cyIsICJzcmMvY29tbW9uL2RlY29yYXRvcnMudHMiLCAic3JjL21vZHVsZS9mb3J1bS9mb3J1bS1wb3N0LnRzIiwgInNyYy9tb2R1bGUvZm9ydW0vZm9ydW0tdGhyZWFkLnRzIiwgInNyYy9tb2R1bGUvZm9ydW0vZm9ydW0tY2F0ZWdvcnkudHMiLCAic3JjL21vZHVsZS9mb3J1bS9pbmRleC50cyIsICJzcmMvaW5kZXgudHMiLCAic3JjL2Nvbm5lY3Rvci9hbWMtY2xpZW50LnRzIiwgInNyYy9jb25uZWN0b3IvYW1jLWhlYWRlci50cyIsICJzcmMvY29ubmVjdG9yL2FtYy10eXBlcy50cyIsICJzcmMvY29ubmVjdG9yL2luZGV4LnRzIiwgInNyYy9jb25uZWN0b3IvYXV0aC50cyIsICJzcmMvbW9kdWxlL3ByaXZhdGUtbWVzc2FnZS9wcml2YXRlLW1lc3NhZ2UudHMiLCAic3JjL21vZHVsZS9jbGllbnQvYWNjZXNzb3JzL3BtLWFjY2Vzc29yLnRzIiwgInNyYy9tb2R1bGUvc2l0ZS9hY2Nlc3NvcnMvZm9ydW0tYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9zaXRlL2FjY2Vzc29ycy9tZW1iZXItYWNjZXNzb3IudHMiLCAic3JjL3V0aWwvcXVpY2stbW9kdWxlLnRzIiwgInNyYy9tb2R1bGUvc2l0ZS9zaXRlLWFwcGxpY2F0aW9uLnRzIiwgInNyYy9tb2R1bGUvc2l0ZS9zaXRlLW1lbWJlci50cyIsICJzcmMvbW9kdWxlL3NpdGUvYWNjZXNzb3JzL3BhZ2UtYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9wYWdlL3BhZ2UudHMiLCAic3JjL21vZHVsZS9wYWdlL3BhZ2UtZmlsZS50cyIsICJzcmMvbW9kdWxlL3BhZ2UvcGFnZS1tZXRhLnRzIiwgInNyYy9tb2R1bGUvcGFnZS9wYWdlLXJldmlzaW9uLnRzIiwgInNyYy9tb2R1bGUvcGFnZS9wYWdlLXNvdXJjZS50cyIsICJzcmMvbW9kdWxlL3BhZ2UvcGFnZS12b3RlLnRzIiwgInNyYy9tb2R1bGUvcGFnZS9zZWFyY2gtcXVlcnkudHMiLCAic3JjL21vZHVsZS9wYWdlL3NpdGUtY2hhbmdlLnRzIiwgInNyYy9tb2R1bGUvc2l0ZS9hY2Nlc3NvcnMvcGFnZXMtYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9zaXRlL3NpdGUudHMiLCAic3JjL21vZHVsZS9jbGllbnQvYWNjZXNzb3JzL3NpdGUtYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9jbGllbnQvYWNjZXNzb3JzL3VzZXItYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9jbGllbnQvY2xpZW50LnRzIiwgInNyYy9tb2R1bGUvaW5kZXgudHMiLCAic3JjL3V0aWwvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLyoqXG4gKiBXaWtpZG9044Op44Kk44OW44Op44Oq44Gu5Z+65bqV44Ko44Op44O844Kv44Op44K5XG4gKiDlhajjgabjga7jgqvjgrnjgr/jg6Djgqjjg6njg7zjga/jgZPjga7jgq/jg6njgrnjgpLntpnmib/jgZnjgotcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFdpa2lkb3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqIOOCqOODqeODvOWQjSAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIOOCqOODqeODvOODoeODg+OCu+ODvOOCuFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7XG4gIH1cbn1cblxuLyoqXG4gKiDkuojmnJ/jgZvjgazjgqjjg6njg7xcbiAqIOWGhemDqOeahOOBquS4jeaVtOWQiOOChOODkOOCsOOCkuihqOOBmVxuICovXG5leHBvcnQgY2xhc3MgVW5leHBlY3RlZEVycm9yIGV4dGVuZHMgV2lraWRvdEVycm9yIHt9XG4iLAogICAgImltcG9ydCB7IFdpa2lkb3RFcnJvciB9IGZyb20gJy4vYmFzZSc7XG5cbi8qKlxuICogQWpheCBNb2R1bGUgQ29ubmVjdG9y6Zai6YCj44Gu5Z+65bqV44Ko44Op44O8XG4gKi9cbmV4cG9ydCBjbGFzcyBBTUNFcnJvciBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuXG4vKipcbiAqIEhUVFDjgrnjg4bjg7zjgr/jgrnjgrPjg7zjg4njgqjjg6njg7xcbiAqIEFNQ+OBuOOBruODquOCr+OCqOOCueODiOOBjEhUVFDjgqjjg6njg7zjgaflpLHmlZfjgZfjgZ/loLTlkIhcbiAqL1xuZXhwb3J0IGNsYXNzIEFNQ0h0dHBFcnJvciBleHRlbmRzIEFNQ0Vycm9yIHtcbiAgLyoqIEhUVFDjgrnjg4bjg7zjgr/jgrnjgrPjg7zjg4kgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcblxuICAvKipcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSDjgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhcbiAgICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQ44K544OG44O844K/44K544Kz44O844OJXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBXaWtpZG9044K544OG44O844K/44K544Kz44O844OJ44Ko44Op44O8XG4gKiBBTUPjg6zjgrnjg53jg7Pjgrnjga5zdGF0dXPjgYxva+OBp+OBquOBhOWgtOWQiFxuICovXG5leHBvcnQgY2xhc3MgV2lraWRvdFN0YXR1c0Vycm9yIGV4dGVuZHMgQU1DRXJyb3Ige1xuICAvKiogV2lraWRvdOOCueODhuODvOOCv+OCueOCs+ODvOODieaWh+Wtl+WIlyAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIOOCqOODqeODvOODoeODg+OCu+ODvOOCuFxuICAgKiBAcGFyYW0gc3RhdHVzQ29kZSAtIOOCueODhuODvOOCv+OCueOCs+ODvOODie+8iOS+izogJ25vdF9vaycsICd0cnlfYWdhaW4n77yJXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gIH1cbn1cblxuLyoqXG4gKiDjg6zjgrnjg53jg7Pjgrnjg4fjg7zjgr/jgqjjg6njg7xcbiAqIOODrOOCueODneODs+OCueOBruODkeODvOOCueOBq+WkseaVl+OBl+OBn+WgtOWQiFxuICovXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VEYXRhRXJyb3IgZXh0ZW5kcyBBTUNFcnJvciB7fVxuIiwKICAgICJpbXBvcnQgeyBXaWtpZG90RXJyb3IgfSBmcm9tICcuL2Jhc2UnO1xuXG4vKipcbiAqIOOCu+ODg+OCt+ODp+ODs+mWoumAo+OBruWfuuW6leOCqOODqeODvFxuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkVycm9yIGV4dGVuZHMgV2lraWRvdEVycm9yIHt9XG5cbi8qKlxuICog44K744OD44K344On44Oz5L2c5oiQ5aSx5pWX44Ko44Op44O8XG4gKiDjg63jgrDjgqTjg7PoqabooYzjgYzlpLHmlZfjgZfjgZ/loLTlkIjjgavjgrnjg63jg7xcbiAqL1xuZXhwb3J0IGNsYXNzIFNlc3Npb25DcmVhdGVFcnJvciBleHRlbmRzIFNlc3Npb25FcnJvciB7fVxuXG4vKipcbiAqIOODreOCsOOCpOODs+W/hemgiOOCqOODqeODvFxuICog6KqN6Ki844GM5b+F6KaB44Gq5pON5L2c44KS5pyq44Ot44Kw44Kk44Oz54q25oWL44Gn5a6f6KGM44GX44Gf5aC05ZCI44Gr44K544Ot44O8XG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dpblJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTZXNzaW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0xvZ2luIGlzIHJlcXVpcmVkIGZvciB0aGlzIG9wZXJhdGlvbicpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyBXaWtpZG90RXJyb3IgfSBmcm9tICcuL2Jhc2UnO1xuXG4vKipcbiAqIOODquOCveODvOOCueacqueZuuimi+OCqOODqeODvFxuICog6KaB5rGC44GV44KM44Gf44Oq44K944O844K544GM5a2Y5Zyo44GX44Gq44GE5aC05ZCIXG4gKi9cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEV4Y2VwdGlvbiBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuXG4vKipcbiAqIOODquOCveODvOOCueaXouWtmOOCqOODqeODvFxuICog5L2c5oiQ44GX44KI44GG44Go44GX44Gf44Oq44K944O844K544GM5pei44Gr5a2Y5Zyo44GZ44KL5aC05ZCIXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXJnZXRFeGlzdHNFcnJvciBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuXG4vKipcbiAqIOOCv+ODvOOCsuODg+ODiOeKtuaFi+OCqOODqeODvFxuICog44Oq44K944O844K544GM5pON5L2c5LiN5Y+v6IO944Gq54q25oWL44Gu5aC05ZCI77yI44Ot44OD44Kv5Lit44Gq44Gp77yJXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXJnZXRFcnJvciBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuXG4vKipcbiAqIOOCouOCr+OCu+OCueaLkuWQpuOCqOODqeODvFxuICog5qip6ZmQ5LiN6Laz44Gn5pON5L2c44GM5ouS5ZCm44GV44KM44Gf5aC05ZCIXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3JiaWRkZW5FcnJvciBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuXG4vKipcbiAqIEhUTUzopoHntKDmnKrnmbropovjgqjjg6njg7xcbiAqIOODkeODvOOCueS4reOBq+W/heimgeOBquimgee0oOOBjOimi+OBpOOBi+OCieOBquOBhOWgtOWQiFxuICovXG5leHBvcnQgY2xhc3MgTm9FbGVtZW50RXJyb3IgZXh0ZW5kcyBXaWtpZG90RXJyb3Ige31cbiIsCiAgICAiLy8gQmFzZSBlcnJvcnNcblxuLy8gQU1DIGVycm9yc1xuZXhwb3J0IHsgQU1DRXJyb3IsIEFNQ0h0dHBFcnJvciwgUmVzcG9uc2VEYXRhRXJyb3IsIFdpa2lkb3RTdGF0dXNFcnJvciB9IGZyb20gJy4vYW1jJztcbmV4cG9ydCB7IFVuZXhwZWN0ZWRFcnJvciwgV2lraWRvdEVycm9yIH0gZnJvbSAnLi9iYXNlJztcbi8vIFNlc3Npb24gZXJyb3JzXG5leHBvcnQgeyBMb2dpblJlcXVpcmVkRXJyb3IsIFNlc3Npb25DcmVhdGVFcnJvciwgU2Vzc2lvbkVycm9yIH0gZnJvbSAnLi9zZXNzaW9uJztcblxuLy8gVGFyZ2V0IGVycm9yc1xuZXhwb3J0IHtcbiAgRm9yYmlkZGVuRXJyb3IsXG4gIE5vRWxlbWVudEVycm9yLFxuICBOb3RGb3VuZEV4Y2VwdGlvbixcbiAgVGFyZ2V0RXJyb3IsXG4gIFRhcmdldEV4aXN0c0Vycm9yLFxufSBmcm9tICcuL3RhcmdldCc7XG4iLAogICAgIi8qKlxuICog44Ot44Ku44Oz44Kw5qmf6IO944KS5o+Q5L6b44GZ44KL44Oi44K444Ol44O844OrXG4gKlxuICog44GT44Gu44Oi44K444Ol44O844Or44Gv44CB44Op44Kk44OW44Op44Oq5YWo5L2T44Gn5L2/55So44GV44KM44KL44Ot44Ks44O844KS6Kit5a6a44GX44CB5o+Q5L6b44GZ44KL44CCXG4gKiDjg4fjg5Xjgqnjg6vjg4jjgafjga/lh7rlipvjgpLooYzjgo/jgZrjgIHjgqLjg5fjg6rjgrHjg7zjgrfjg6fjg7PlgbTjgafjga7jg63jgrDliLblvqHjgpLlj6/og73jgavjgZnjgovjgIJcbiAqL1xuXG4vKipcbiAqIOODreOCsOODrOODmeODq1xuICovXG5leHBvcnQgdHlwZSBMb2dMZXZlbCA9ICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InO1xuXG4vKipcbiAqIOODreOCsOODrOODmeODq+OBruWEquWFiOW6pu+8iOaVsOWApOOBjOWkp+OBjeOBhOOBu+OBqemHjeimge+8iVxuICovXG5jb25zdCBMT0dfTEVWRUxfUFJJT1JJVFk6IFJlY29yZDxMb2dMZXZlbCwgbnVtYmVyPiA9IHtcbiAgZGVidWc6IDAsXG4gIGluZm86IDEsXG4gIHdhcm46IDIsXG4gIGVycm9yOiAzLFxufTtcblxuLyoqXG4gKiDjg63jgqzjg7zjg4/jg7Pjg4njg6njg7xcbiAqL1xuZXhwb3J0IHR5cGUgTG9nSGFuZGxlciA9IChcbiAgbGV2ZWw6IExvZ0xldmVsLFxuICBuYW1lOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgLi4uYXJnczogdW5rbm93bltdXG4pID0+IHZvaWQ7XG5cbi8qKlxuICogTnVsbEhhbmRsZXI6IOS9leOCguWHuuWKm+OBl+OBquOBhO+8iOODh+ODleOCqeODq+ODiO+8iVxuICovXG5leHBvcnQgY29uc3QgbnVsbEhhbmRsZXI6IExvZ0hhbmRsZXIgPSAoKSA9PiB7XG4gIC8vIOS9leOCguOBl+OBquOBhFxufTtcblxuLyoqXG4gKiBDb25zb2xlSGFuZGxlcjog44Kz44Oz44K944O844Or44Gr5Ye65Yqb44GZ44KLXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zb2xlSGFuZGxlcjogTG9nSGFuZGxlciA9IChcbiAgbGV2ZWw6IExvZ0xldmVsLFxuICBuYW1lOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgLi4uYXJnczogdW5rbm93bltdXG4pID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gYCR7dGltZXN0YW1wfSBbJHtuYW1lfS8ke2xldmVsLnRvVXBwZXJDYXNlKCl9XSAke21lc3NhZ2V9YDtcblxuICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgY2FzZSAnZGVidWcnOlxuICAgICAgY29uc29sZS5kZWJ1Zyhmb3JtYXR0ZWRNZXNzYWdlLCAuLi5hcmdzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2luZm8nOlxuICAgICAgY29uc29sZS5pbmZvKGZvcm1hdHRlZE1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnd2Fybic6XG4gICAgICBjb25zb2xlLndhcm4oZm9ybWF0dGVkTWVzc2FnZSwgLi4uYXJncyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdHRlZE1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbi8qKlxuICog44Ot44Ks44O844Kv44Op44K5XG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBoYW5kbGVyOiBMb2dIYW5kbGVyO1xuICBwcml2YXRlIGxldmVsOiBMb2dMZXZlbDtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IExvZ0hhbmRsZXIgPSBudWxsSGFuZGxlciwgbGV2ZWw6IExvZ0xldmVsID0gJ3dhcm4nKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg4/jg7Pjg4njg6njg7zjgpLoqK3lrppcbiAgICovXG4gIHNldEhhbmRsZXIoaGFuZGxlcjogTG9nSGFuZGxlcik6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICAvKipcbiAgICog44Ot44Kw44Os44OZ44Or44KS6Kit5a6aXG4gICAqL1xuICBzZXRMZXZlbChsZXZlbDogTG9nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICog5oyH5a6a44Os44OZ44Or44GM44Ot44Kw5Ye65Yqb5a++6LGh44GL44Gp44GG44GLXG4gICAqL1xuICBwcml2YXRlIHNob3VsZExvZyhsZXZlbDogTG9nTGV2ZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTE9HX0xFVkVMX1BSSU9SSVRZW2xldmVsXSA+PSBMT0dfTEVWRUxfUFJJT1JJVFlbdGhpcy5sZXZlbF07XG4gIH1cblxuICAvKipcbiAgICog44Ot44Kw5Ye65YqbXG4gICAqL1xuICBwcml2YXRlIGxvZyhsZXZlbDogTG9nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvdWxkTG9nKGxldmVsKSkge1xuICAgICAgdGhpcy5oYW5kbGVyKGxldmVsLCB0aGlzLm5hbWUsIG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5sb2coJ2RlYnVnJywgbWVzc2FnZSwgLi4uYXJncyk7XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5sb2coJ2luZm8nLCBtZXNzYWdlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnd2FybicsIG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICB9XG5cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICB0aGlzLmxvZygnZXJyb3InLCBtZXNzYWdlLCAuLi5hcmdzKTtcbiAgfVxufVxuXG4vKipcbiAqIOODreOCrOODvOOCkuWPluW+l1xuICogQHBhcmFtIG5hbWUgLSDjg63jgqzjg7zlkI3vvIjjg4fjg5Xjgqnjg6vjg4g6IFwid2lraWRvdFwi77yJXG4gKiBAcmV0dXJucyDjg63jgqzjg7zjgqTjg7Pjgrnjgr/jg7PjgrlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcihuYW1lID0gJ3dpa2lkb3QnKTogTG9nZ2VyIHtcbiAgcmV0dXJuIG5ldyBMb2dnZXIobmFtZSk7XG59XG5cbi8qKlxuICog44Kz44Oz44K944O844Or5Ye65Yqb55So44OP44Oz44OJ44Op44KS6Kit5a6aXG4gKiBAcGFyYW0gbG9nZ2VyIC0g6Kit5a6a44GZ44KL44Ot44Ks44O8XG4gKiBAcGFyYW0gbGV2ZWwgLSDjg63jgrDjg6zjg5njg6vvvIjjg4fjg5Xjgqnjg6vjg4g6IFwid2Fyblwi77yJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENvbnNvbGVIYW5kbGVyKGxvZ2dlcjogTG9nZ2VyLCBsZXZlbDogTG9nTGV2ZWwgPSAnd2FybicpOiB2b2lkIHtcbiAgbG9nZ2VyLnNldEhhbmRsZXIoY29uc29sZUhhbmRsZXIpO1xuICBsb2dnZXIuc2V0TGV2ZWwobGV2ZWwpO1xufVxuXG4vKipcbiAqIOODkeODg+OCseODvOOCuOWFqOS9k+OBp+S9v+eUqOOBleOCjOOCi+ODh+ODleOCqeODq+ODiOODreOCrOODvFxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyOiBMb2dnZXIgPSBnZXRMb2dnZXIoKTtcbiIsCiAgICAiaW1wb3J0IHsgZXJyLCBlcnJBc3luYywgb2ssIG9rQXN5bmMsIHR5cGUgUmVzdWx0LCBSZXN1bHRBc3luYyB9IGZyb20gJ25ldmVydGhyb3cnO1xuaW1wb3J0IHR5cGUgeyBXaWtpZG90RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG4vKiog5ZCM5pyfUmVzdWx05Z6L44Ko44Kk44Oq44Ki44K5ICovXG5leHBvcnQgdHlwZSBXaWtpZG90UmVzdWx0PFQ+ID0gUmVzdWx0PFQsIFdpa2lkb3RFcnJvcj47XG5cbi8qKiDpnZ7lkIzmnJ9SZXN1bHTlnovjgqjjgqTjg6rjgqLjgrkgKi9cbmV4cG9ydCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYzxUPiA9IFJlc3VsdEFzeW5jPFQsIFdpa2lkb3RFcnJvcj47XG5cbi8qKiDmiJDlip9SZXN1bHTjgpLnlJ/miJAgKi9cbmV4cG9ydCBjb25zdCB3ZE9rID0gPFQ+KHZhbHVlOiBUKTogV2lraWRvdFJlc3VsdDxUPiA9PiBvayh2YWx1ZSk7XG5cbi8qKiDjgqjjg6njg7xSZXN1bHTjgpLnlJ/miJAgKi9cbmV4cG9ydCBjb25zdCB3ZEVyciA9IDxFIGV4dGVuZHMgV2lraWRvdEVycm9yPihlcnJvcjogRSk6IFdpa2lkb3RSZXN1bHQ8bmV2ZXI+ID0+IGVycihlcnJvcik7XG5cbi8qKiDmiJDlip9SZXN1bHRBc3luY+OCkueUn+aIkCAqL1xuZXhwb3J0IGNvbnN0IHdkT2tBc3luYyA9IDxUPih2YWx1ZTogVCk6IFdpa2lkb3RSZXN1bHRBc3luYzxUPiA9PiBva0FzeW5jKHZhbHVlKTtcblxuLyoqIOOCqOODqeODvFJlc3VsdEFzeW5j44KS55Sf5oiQICovXG5leHBvcnQgY29uc3Qgd2RFcnJBc3luYyA9IDxFIGV4dGVuZHMgV2lraWRvdEVycm9yPihlcnJvcjogRSk6IFdpa2lkb3RSZXN1bHRBc3luYzxuZXZlcj4gPT5cbiAgZXJyQXN5bmMoZXJyb3IpO1xuXG4vKiogUHJvbWlzZeOBi+OCieOBruWkieaPmyAqL1xuZXhwb3J0IGNvbnN0IGZyb21Qcm9taXNlID0gPFQ+KFxuICBwcm9taXNlOiBQcm9taXNlPFQ+LFxuICBlcnJvck1hcHBlcjogKGVycm9yOiB1bmtub3duKSA9PiBXaWtpZG90RXJyb3Jcbik6IFdpa2lkb3RSZXN1bHRBc3luYzxUPiA9PiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShwcm9taXNlLCBlcnJvck1hcHBlcik7XG5cbi8qKiDopIfmlbBSZXN1bHRBc3luY+OBrue1kOWQiCAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVSZXN1bHRzID0gPFQ+KHJlc3VsdHM6IFdpa2lkb3RSZXN1bHRBc3luYzxUPltdKTogV2lraWRvdFJlc3VsdEFzeW5jPFRbXT4gPT5cbiAgUmVzdWx0QXN5bmMuY29tYmluZShyZXN1bHRzKTtcbiIsCiAgICAiZXhwb3J0ICogZnJvbSAnLi9jb21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9yZXN1bHQnO1xuIiwKICAgICIvKipcbiAqIEFqYXggTW9kdWxlIENvbm5lY3RvcuioreWumlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFNQ0NvbmZpZyB7XG4gIC8qKiDjg6rjgq/jgqjjgrnjg4jjgr/jgqTjg6DjgqLjgqbjg4jvvIjjg5/jg6rnp5LvvIkgKi9cbiAgdGltZW91dDogbnVtYmVyO1xuXG4gIC8qKiDjg6rjg4jjg6njgqTkuIrpmZDlm57mlbAgKi9cbiAgcmV0cnlMaW1pdDogbnVtYmVyO1xuXG4gIC8qKiDjg6rjg4jjg6njgqTln7rmnKzplpPpmpTvvIjjg5/jg6rnp5LvvIkgKi9cbiAgcmV0cnlJbnRlcnZhbDogbnVtYmVyO1xuXG4gIC8qKiDmnIDlpKfjg5Djg4Pjgq/jgqrjg5XvvIjjg5/jg6rnp5LvvIkgKi9cbiAgbWF4QmFja29mZjogbnVtYmVyO1xuXG4gIC8qKiDjg5Djg4Pjgq/jgqrjg5Xkv4LmlbAgKi9cbiAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuXG4gIC8qKiDmnIDlpKfkuKbliJfjg6rjgq/jgqjjgrnjg4jmlbAgKi9cbiAgc2VtYXBob3JlTGltaXQ6IG51bWJlcjtcbn1cblxuLyoqIOODh+ODleOCqeODq+ODiEFNQ+ioreWumiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU1DX0NPTkZJRzogQU1DQ29uZmlnID0ge1xuICB0aW1lb3V0OiAyMDAwMCxcbiAgcmV0cnlMaW1pdDogNSxcbiAgcmV0cnlJbnRlcnZhbDogMTAwMCxcbiAgbWF4QmFja29mZjogNjAwMDAsXG4gIGJhY2tvZmZGYWN0b3I6IDIuMCxcbiAgc2VtYXBob3JlTGltaXQ6IDEwLFxufTtcblxuLyoqXG4gKiBXaWtpZG9044GM6KaB5rGC44GZ44KL5Zu65a6a44OI44O844Kv44Oz5YCkXG4gKiDjgZPjgozjga9XaWtpZG9044Gu44OV44Ot44Oz44OI44Ko44Oz44OJ44GL44KJ5Y+W5b6X44GV44KM44KL5Zu65a6a5YCk44Gn44CBXG4gKiDjgrvjgq3jg6Xjg6rjg4bjgqPjg4jjg7zjgq/jg7Pjgafjga/jgarjgY/ljZjjgarjgovorZjliKXlrZDjgajjgZfjgabkvb/nlKjjgZXjgozjgotcbiAqL1xuZXhwb3J0IGNvbnN0IFdJS0lET1RfVE9LRU43ID0gJzEyMzQ1Nic7XG5cbi8qKlxuICogSFRUUOOCqOODqeODvOaZguOBruODleOCqeODvOODq+ODkOODg+OCr+OCueODhuODvOOCv+OCueOCs+ODvOODiVxuICog44Os44K544Od44Oz44K544GL44KJ44K544OG44O844K/44K544Kz44O844OJ44KS5Y+W5b6X44Gn44GN44Gq44GE5aC05ZCI44Gr5L2/55SoXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hUVFBfU1RBVFVTX0NPREUgPSA5OTk7XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2xpZW50UmVmIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIsIFVzZXJUeXBlIH0gZnJvbSAnLi9hYnN0cmFjdC11c2VyJztcblxuLyoqXG4gKiDljL/lkI3jg6bjg7zjgrbjg7xcbiAqL1xuZXhwb3J0IGNsYXNzIEFub255bW91c1VzZXIgaW1wbGVtZW50cyBBYnN0cmFjdFVzZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnRSZWY7XG5cbiAgLyoqIOODpuODvOOCtuODvElE77yI5Yy/5ZCN44GvMO+8iSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IG51bWJlciA9IDA7XG5cbiAgLyoqIOODpuODvOOCtuODvOWQje+8iOWMv+WQjeOBr1wiQW5vbnltb3VzXCLvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyA9ICdBbm9ueW1vdXMnO1xuXG4gIC8qKiBVTklY5b2i5byP44Gu44Om44O844K244O85ZCNICovXG4gIHB1YmxpYyByZWFkb25seSB1bml4TmFtZTogc3RyaW5nID0gJ2Fub255bW91cyc7XG5cbiAgLyoqIOOCouODkOOCv+ODvFVSTO+8iOWMv+WQjeOBr251bGzvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF2YXRhclVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIElQ44Ki44OJ44Os44K5ICovXG4gIHB1YmxpYyByZWFkb25seSBpcDogc3RyaW5nO1xuXG4gIC8qKiDjg6bjg7zjgrbjg7znqK7liKUgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJUeXBlOiBVc2VyVHlwZSA9ICdhbm9ueW1vdXMnO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogQ2xpZW50UmVmLCBpcDogc3RyaW5nKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5pcCA9IGlwO1xuICB9XG5cbiAgLy8gQWJzdHJhY3RVc2Vy5a6f6KOFXG4gIGlzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNEZWxldGVkVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNBbm9ueW1vdXNVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlzR3Vlc3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc1dpa2lkb3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBBbm9ueW1vdXNVc2VyKG5hbWU9JHt0aGlzLm5hbWV9LCB1bml4TmFtZT0ke3RoaXMudW5peE5hbWV9LCBpcD0ke3RoaXMuaXB9KWA7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGllbnRSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciwgVXNlclR5cGUgfSBmcm9tICcuL2Fic3RyYWN0LXVzZXInO1xuXG4vKipcbiAqIOWJiumZpOa4iOOBv+ODpuODvOOCtuODvFxuICovXG5leHBvcnQgY2xhc3MgRGVsZXRlZFVzZXIgaW1wbGVtZW50cyBBYnN0cmFjdFVzZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnRSZWY7XG5cbiAgLyoqIOWJiumZpOa4iOOBv+ODpuODvOOCtuODvElEICovXG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKiDjg6bjg7zjgrbjg7zlkI3vvIjliYrpmaTmuIjjgb/jga9cImFjY291bnQgZGVsZXRlZFwi77yJICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcgPSAnYWNjb3VudCBkZWxldGVkJztcblxuICAvKiogVU5JWOW9ouW8j+OBruODpuODvOOCtuODvOWQjSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdW5peE5hbWU6IHN0cmluZyA9ICdhY2NvdW50X2RlbGV0ZWQnO1xuXG4gIC8qKiDjgqLjg5Djgr/jg7xVUkzvvIjliYrpmaTmuIjjgb/jga9udWxs77yJICovXG4gIHB1YmxpYyByZWFkb25seSBhdmF0YXJVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBJUOOCouODieODrOOCue+8iOWJiumZpOa4iOOBv+OBr251bGzvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiog44Om44O844K244O856iu5YilICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyVHlwZTogVXNlclR5cGUgPSAnZGVsZXRlZCc7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnRSZWYsIGlkOiBudW1iZXIpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gIH1cblxuICAvLyBBYnN0cmFjdFVzZXLlrp/oo4VcbiAgaXNVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc0RlbGV0ZWRVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlzQW5vbnltb3VzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNHdWVzdFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzV2lraWRvdFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERlbGV0ZWRVc2VyKGlkPSR7dGhpcy5pZH0sIG5hbWU9JHt0aGlzLm5hbWV9LCB1bml4TmFtZT0ke3RoaXMudW5peE5hbWV9KWA7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGllbnRSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciwgVXNlclR5cGUgfSBmcm9tICcuL2Fic3RyYWN0LXVzZXInO1xuXG4vKipcbiAqIOOCsuOCueODiOODpuODvOOCtuODvFxuICovXG5leHBvcnQgY2xhc3MgR3Vlc3RVc2VyIGltcGxlbWVudHMgQWJzdHJhY3RVc2VyIHtcbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50UmVmO1xuXG4gIC8qKiDjg6bjg7zjgrbjg7xJRO+8iOOCsuOCueODiOOBrzDvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkOiBudW1iZXIgPSAwO1xuXG4gIC8qKiDjgrLjgrnjg4jlkI0gKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogVU5JWOW9ouW8j+OBruODpuODvOOCtuODvOWQje+8iOOCsuOCueODiOOBr251bGzvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVuaXhOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiog44Ki44OQ44K/44O8VVJM77yIR3JhdmF0YXLjga7loLTlkIjjgYLjgorvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF2YXRhclVybDogc3RyaW5nIHwgbnVsbDtcblxuICAvKiogSVDjgqLjg4njg6zjgrnvvIjjgrLjgrnjg4jjga9udWxs77yJICovXG4gIHB1YmxpYyByZWFkb25seSBpcDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIOODpuODvOOCtuODvOeoruWIpSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclR5cGU6IFVzZXJUeXBlID0gJ2d1ZXN0JztcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudFJlZiwgbmFtZTogc3RyaW5nLCBhdmF0YXJVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmF2YXRhclVybCA9IGF2YXRhclVybDtcbiAgfVxuXG4gIC8vIEFic3RyYWN0VXNlcuWun+ijhVxuICBpc1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzRGVsZXRlZFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzQW5vbnltb3VzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNHdWVzdFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaXNXaWtpZG90VXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgR3Vlc3RVc2VyKG5hbWU9JHt0aGlzLm5hbWV9KWA7XG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiDnibnmroroqJjlj7fjg7vpnZ7oi7Hoqp7jgqLjg6vjg5XjgqHjg5njg4Pjg4jjgpLoi7Hoqp7jgqLjg6vjg5XjgqHjg5njg4Pjg4jjgavlpInmj5vjgZnjgovjgZ/jgoHjga7jg57jg4Pjg5Tjg7PjgrDjg4bjg7zjg5bjg6tcbiAqXG4gKiDpnZ5BU0NJSeaWh+Wtl+OCkuWvvuW/nOOBmeOCi0FTQ0lJ5paH5a2X44Gr5aSJ5o+b44GZ44KL44Gf44KB44Gu44Oe44OD44OU44Oz44Kw44KS5o+Q5L6b44GZ44KL44CCXG4gKiDkuLvjgatVUkznlJ/miJDjgoTjg5rjg7zjgrjlkI3jga51bml45b2i5byP44G444Gu5aSJ5o+b5pmC44Gr5L2/55So44GV44KM44KL44CCXG4gKi9cblxuZXhwb3J0IGNvbnN0IHNwZWNpYWxDaGFyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnXFx1MDBDMCc6ICdhJyxcbiAgJ1xcdTAwQzEnOiAnYScsXG4gICdcXHUwMEMyJzogJ2EnLFxuICAnXFx1MDBDMyc6ICdhJyxcbiAgJ1xcdTAwQzQnOiAnYWUnLFxuICAnXFx1MDBDNSc6ICdhJyxcbiAgJ1xcdTAwQzYnOiAnYWUnLFxuICAnXFx1MDBDNyc6ICdjJyxcbiAgJ1xcdTAwQzgnOiAnZScsXG4gICdcXHUwMEM5JzogJ2UnLFxuICAnXFx1MDBDQSc6ICdlJyxcbiAgJ1xcdTAwQ0InOiAnZScsXG4gICdcXHUwMENDJzogJ2knLFxuICAnXFx1MDBDRCc6ICdpJyxcbiAgJ1xcdTAwQ0UnOiAnaScsXG4gICdcXHUwMENGJzogJ2knLFxuICAnXFx1MDBEMCc6ICdkJyxcbiAgJ1xcdTAwRDEnOiAnbicsXG4gICdcXHUwMEQyJzogJ28nLFxuICAnXFx1MDBEMyc6ICdvJyxcbiAgJ1xcdTAwRDQnOiAnbycsXG4gICdcXHUwMEQ1JzogJ28nLFxuICAnXFx1MDBENic6ICdvZScsXG4gICdcXHUwMEQ4JzogJ28nLFxuICAnXFx1MDBEOSc6ICd1JyxcbiAgJ1xcdTAwREEnOiAndScsXG4gICdcXHUwMERCJzogJ3UnLFxuICAnXFx1MDBEQyc6ICd1ZScsXG4gICdcXHUwMEREJzogJ3knLFxuICAnXFx1MDBERSc6ICd0JyxcbiAgJ1xcdTAwREYnOiAnc3MnLFxuICAnXFx1MDBFMCc6ICdhJyxcbiAgJ1xcdTAwRTEnOiAnYScsXG4gICdcXHUwMEUyJzogJ2EnLFxuICAnXFx1MDBFMyc6ICdhJyxcbiAgJ1xcdTAwRTQnOiAnYWUnLFxuICAnXFx1MDBFNSc6ICdhJyxcbiAgJ1xcdTAwRTYnOiAnYWUnLFxuICAnXFx1MDBFNyc6ICdjJyxcbiAgJ1xcdTAwRTgnOiAnZScsXG4gICdcXHUwMEU5JzogJ2UnLFxuICAnXFx1MDBFQSc6ICdlJyxcbiAgJ1xcdTAwRUInOiAnZScsXG4gICdcXHUwMEVDJzogJ2knLFxuICAnXFx1MDBFRCc6ICdpJyxcbiAgJ1xcdTAwRUUnOiAnaScsXG4gICdcXHUwMEVGJzogJ2knLFxuICAnXFx1MDBGMCc6ICdkJyxcbiAgJ1xcdTAwRjEnOiAnbicsXG4gICdcXHUwMEYyJzogJ28nLFxuICAnXFx1MDBGMyc6ICdvJyxcbiAgJ1xcdTAwRjQnOiAnbycsXG4gICdcXHUwMEY1JzogJ28nLFxuICAnXFx1MDBGNic6ICdvZScsXG4gICdcXHUwMEY4JzogJ28nLFxuICAnXFx1MDBGOSc6ICd1JyxcbiAgJ1xcdTAwRkEnOiAndScsXG4gICdcXHUwMEZCJzogJ3UnLFxuICAnXFx1MDBGQyc6ICd1ZScsXG4gICdcXHUwMEZEJzogJ3knLFxuICAnXFx1MDBGRSc6ICd0JyxcbiAgJ1xcdTAwRkYnOiAneScsXG4gICdcXHUwMTAwJzogJ2EnLFxuICAnXFx1MDEwMSc6ICdhJyxcbiAgJ1xcdTAxMDInOiAnYScsXG4gICdcXHUwMTAzJzogJ2EnLFxuICAnXFx1MDEwNCc6ICdhJyxcbiAgJ1xcdTAxMDUnOiAnYScsXG4gICdcXHUwMTA2JzogJ2MnLFxuICAnXFx1MDEwNyc6ICdjJyxcbiAgJ1xcdTAxMDgnOiAnYycsXG4gICdcXHUwMTA5JzogJ2MnLFxuICAnXFx1MDEwQSc6ICdjJyxcbiAgJ1xcdTAxMEInOiAnYycsXG4gICdcXHUwMTBDJzogJ2MnLFxuICAnXFx1MDEwRCc6ICdjJyxcbiAgJ1xcdTAxMEUnOiAnZCcsXG4gICdcXHUwMTBGJzogJ2QnLFxuICAnXFx1MDExMCc6ICdkJyxcbiAgJ1xcdTAxMTEnOiAnZCcsXG4gICdcXHUwMTEyJzogJ2UnLFxuICAnXFx1MDExMyc6ICdlJyxcbiAgJ1xcdTAxMTQnOiAnZScsXG4gICdcXHUwMTE1JzogJ2UnLFxuICAnXFx1MDExNic6ICdlJyxcbiAgJ1xcdTAxMTcnOiAnZScsXG4gICdcXHUwMTE4JzogJ2UnLFxuICAnXFx1MDExOSc6ICdlJyxcbiAgJ1xcdTAxMUEnOiAnZScsXG4gICdcXHUwMTFCJzogJ2UnLFxuICAnXFx1MDExQyc6ICdnJyxcbiAgJ1xcdTAxMUQnOiAnZycsXG4gICdcXHUwMTFFJzogJ2cnLFxuICAnXFx1MDExRic6ICdnJyxcbiAgJ1xcdTAxMjAnOiAnZycsXG4gICdcXHUwMTIxJzogJ2cnLFxuICAnXFx1MDEyMic6ICdnJyxcbiAgJ1xcdTAxMjMnOiAnZycsXG4gICdcXHUwMTI0JzogJ2gnLFxuICAnXFx1MDEyNSc6ICdoJyxcbiAgJ1xcdTAxMjYnOiAnaCcsXG4gICdcXHUwMTI3JzogJ2gnLFxuICAnXFx1MDEyOCc6ICdpJyxcbiAgJ1xcdTAxMjknOiAnaScsXG4gICdcXHUwMTJBJzogJ2knLFxuICAnXFx1MDEyQic6ICdpJyxcbiAgJ1xcdTAxMkMnOiAnaScsXG4gICdcXHUwMTJEJzogJ2knLFxuICAnXFx1MDEyRSc6ICdpJyxcbiAgJ1xcdTAxMkYnOiAnaScsXG4gICdcXHUwMTMwJzogJ2knLFxuICAnXFx1MDEzMSc6ICdpJyxcbiAgJ1xcdTAxMzInOiAnaWonLFxuICAnXFx1MDEzMyc6ICdpaicsXG4gICdcXHUwMTM0JzogJ2onLFxuICAnXFx1MDEzNSc6ICdqJyxcbiAgJ1xcdTAxMzYnOiAnaycsXG4gICdcXHUwMTM3JzogJ2snLFxuICAnXFx1MDEzOCc6ICdrJyxcbiAgJ1xcdTAxMzknOiAnbCcsXG4gICdcXHUwMTNBJzogJ2wnLFxuICAnXFx1MDEzQic6ICdsJyxcbiAgJ1xcdTAxM0MnOiAnbCcsXG4gICdcXHUwMTNEJzogJ2wnLFxuICAnXFx1MDEzRSc6ICdsJyxcbiAgJ1xcdTAxM0YnOiAnbCcsXG4gICdcXHUwMTQwJzogJ2wnLFxuICAnXFx1MDE0MSc6ICdsJyxcbiAgJ1xcdTAxNDInOiAnbCcsXG4gICdcXHUwMTQzJzogJ24nLFxuICAnXFx1MDE0NCc6ICduJyxcbiAgJ1xcdTAxNDUnOiAnbicsXG4gICdcXHUwMTQ2JzogJ24nLFxuICAnXFx1MDE0Nyc6ICduJyxcbiAgJ1xcdTAxNDgnOiAnbicsXG4gICdcXHUwMTQ5JzogJ24nLFxuICAnXFx1MDE0QSc6ICduJyxcbiAgJ1xcdTAxNEInOiAnbicsXG4gICdcXHUwMTRDJzogJ28nLFxuICAnXFx1MDE0RCc6ICdvJyxcbiAgJ1xcdTAxNEUnOiAnbycsXG4gICdcXHUwMTRGJzogJ28nLFxuICAnXFx1MDE1MCc6ICdvJyxcbiAgJ1xcdTAxNTEnOiAnbycsXG4gICdcXHUwMTUyJzogJ29lJyxcbiAgJ1xcdTAxNTMnOiAnb2UnLFxuICAnXFx1MDE1NCc6ICdyJyxcbiAgJ1xcdTAxNTUnOiAncicsXG4gICdcXHUwMTU2JzogJ3InLFxuICAnXFx1MDE1Nyc6ICdyJyxcbiAgJ1xcdTAxNTgnOiAncicsXG4gICdcXHUwMTU5JzogJ3InLFxuICAnXFx1MDE1QSc6ICdzJyxcbiAgJ1xcdTAxNUInOiAncycsXG4gICdcXHUwMTVDJzogJ3MnLFxuICAnXFx1MDE1RCc6ICdzJyxcbiAgJ1xcdTAxNUUnOiAncycsXG4gICdcXHUwMTVGJzogJ3MnLFxuICAnXFx1MDE2MCc6ICdzJyxcbiAgJ1xcdTAxNjEnOiAncycsXG4gICdcXHUwMTYyJzogJ3QnLFxuICAnXFx1MDE2Myc6ICd0JyxcbiAgJ1xcdTAxNjQnOiAndCcsXG4gICdcXHUwMTY1JzogJ3QnLFxuICAnXFx1MDE2Nic6ICd0JyxcbiAgJ1xcdTAxNjcnOiAndCcsXG4gICdcXHUwMTY4JzogJ3UnLFxuICAnXFx1MDE2OSc6ICd1JyxcbiAgJ1xcdTAxNkEnOiAndScsXG4gICdcXHUwMTZCJzogJ3UnLFxuICAnXFx1MDE2Qyc6ICd1JyxcbiAgJ1xcdTAxNkQnOiAndScsXG4gICdcXHUwMTZFJzogJ3UnLFxuICAnXFx1MDE2Ric6ICd1JyxcbiAgJ1xcdTAxNzAnOiAndScsXG4gICdcXHUwMTcxJzogJ3UnLFxuICAnXFx1MDE3Mic6ICd1JyxcbiAgJ1xcdTAxNzMnOiAndScsXG4gICdcXHUwMTc0JzogJ3cnLFxuICAnXFx1MDE3NSc6ICd3JyxcbiAgJ1xcdTAxNzYnOiAneScsXG4gICdcXHUwMTc3JzogJ3knLFxuICAnXFx1MDE3OCc6ICd5JyxcbiAgJ1xcdTAxNzknOiAneicsXG4gICdcXHUwMTdBJzogJ3onLFxuICAnXFx1MDE3Qic6ICd6JyxcbiAgJ1xcdTAxN0MnOiAneicsXG4gICdcXHUwMTdEJzogJ3onLFxuICAnXFx1MDE3RSc6ICd6JyxcbiAgJ1xcdTAxN0YnOiAnc3MnLFxuICAnXFx1MDE5MSc6ICdmJyxcbiAgJ1xcdTAxOTInOiAnZicsXG4gICdcXHUwMjE4JzogJ3MnLFxuICAnXFx1MDIxOSc6ICdzJyxcbiAgJ1xcdTAyMUEnOiAndCcsXG4gICdcXHUwMjFCJzogJ3QnLFxuICAnXFx1MDM4Nic6ICdhJyxcbiAgJ1xcdTAzODgnOiAnZScsXG4gICdcXHUwMzg5JzogJ2knLFxuICAnXFx1MDM4QSc6ICdpJyxcbiAgJ1xcdTAzOEMnOiAnbycsXG4gICdcXHUwMzhFJzogJ3knLFxuICAnXFx1MDM4Ric6ICdvJyxcbiAgJ1xcdTAzOTAnOiAnaScsXG4gICdcXHUwMzkxJzogJ2EnLFxuICAnXFx1MDM5Mic6ICd2JyxcbiAgJ1xcdTAzOTMnOiAnZycsXG4gICdcXHUwMzk0JzogJ2QnLFxuICAnXFx1MDM5NSc6ICdlJyxcbiAgJ1xcdTAzOTYnOiAneicsXG4gICdcXHUwMzk3JzogJ2knLFxuICAnXFx1MDM5OCc6ICd0aCcsXG4gICdcXHUwMzk5JzogJ2knLFxuICAnXFx1MDM5QSc6ICdrJyxcbiAgJ1xcdTAzOUInOiAnbCcsXG4gICdcXHUwMzlDJzogJ20nLFxuICAnXFx1MDM5RCc6ICduJyxcbiAgJ1xcdTAzOUUnOiAneCcsXG4gICdcXHUwMzlGJzogJ28nLFxuICAnXFx1MDNBMCc6ICdwJyxcbiAgJ1xcdTAzQTEnOiAncicsXG4gICdcXHUwM0EzJzogJ3MnLFxuICAnXFx1MDNBNCc6ICd0JyxcbiAgJ1xcdTAzQTUnOiAneScsXG4gICdcXHUwM0E2JzogJ2YnLFxuICAnXFx1MDNBNyc6ICdjaCcsXG4gICdcXHUwM0E4JzogJ3BzJyxcbiAgJ1xcdTAzQTknOiAnbycsXG4gICdcXHUwM0FBJzogJ2knLFxuICAnXFx1MDNBQic6ICd5JyxcbiAgJ1xcdTAzQUMnOiAnYScsXG4gICdcXHUwM0FEJzogJ2UnLFxuICAnXFx1MDNBRSc6ICdpJyxcbiAgJ1xcdTAzQUYnOiAnaScsXG4gICdcXHUwM0IwJzogJ3knLFxuICAnXFx1MDNCMSc6ICdhJyxcbiAgJ1xcdTAzQjInOiAndicsXG4gICdcXHUwM0IzJzogJ2cnLFxuICAnXFx1MDNCNCc6ICdkJyxcbiAgJ1xcdTAzQjUnOiAnZScsXG4gICdcXHUwM0I2JzogJ3onLFxuICAnXFx1MDNCNyc6ICdpJyxcbiAgJ1xcdTAzQjgnOiAndGgnLFxuICAnXFx1MDNCOSc6ICdpJyxcbiAgJ1xcdTAzQkEnOiAnaycsXG4gICdcXHUwM0JCJzogJ2wnLFxuICAnXFx1MDNCQyc6ICdtJyxcbiAgJ1xcdTAzQkQnOiAnbicsXG4gICdcXHUwM0JFJzogJ3gnLFxuICAnXFx1MDNCRic6ICdvJyxcbiAgJ1xcdTAzQzAnOiAncCcsXG4gICdcXHUwM0MxJzogJ3InLFxuICAnXFx1MDNDMic6ICdzJyxcbiAgJ1xcdTAzQzMnOiAncycsXG4gICdcXHUwM0M0JzogJ3QnLFxuICAnXFx1MDNDNSc6ICd5JyxcbiAgJ1xcdTAzQzYnOiAnZicsXG4gICdcXHUwM0M3JzogJ2NoJyxcbiAgJ1xcdTAzQzgnOiAncHMnLFxuICAnXFx1MDNDOSc6ICdvJyxcbiAgJ1xcdTAzQ0EnOiAnaScsXG4gICdcXHUwM0NCJzogJ3knLFxuICAnXFx1MDNDQyc6ICdvJyxcbiAgJ1xcdTAzQ0QnOiAneScsXG4gICdcXHUwM0NFJzogJ28nLFxuICAnXFx1MDNEMSc6ICd0aCcsXG4gICdcXHUwNDAxJzogJ2UnLFxuICAnXFx1MDQwMic6ICdkJyxcbiAgJ1xcdTA0MDMnOiAnZycsXG4gICdcXHUwNDA0JzogJ2UnLFxuICAnXFx1MDQwNSc6ICd6JyxcbiAgJ1xcdTA0MDYnOiAnaScsXG4gICdcXHUwNDA3JzogJ2knLFxuICAnXFx1MDQwOCc6ICdqJyxcbiAgJ1xcdTA0MDknOiAnbCcsXG4gICdcXHUwNDBBJzogJ24nLFxuICAnXFx1MDQwQic6ICdjJyxcbiAgJ1xcdTA0MEMnOiAnaycsXG4gICdcXHUwNDBFJzogJ3UnLFxuICAnXFx1MDQwRic6ICdkJyxcbiAgJ1xcdTA0MTAnOiAnYScsXG4gICdcXHUwNDExJzogJ2InLFxuICAnXFx1MDQxMic6ICd2JyxcbiAgJ1xcdTA0MTMnOiAnZycsXG4gICdcXHUwNDE0JzogJ2QnLFxuICAnXFx1MDQxNSc6ICdlJyxcbiAgJ1xcdTA0MTYnOiAneicsXG4gICdcXHUwNDE3JzogJ3onLFxuICAnXFx1MDQxOCc6ICdpJyxcbiAgJ1xcdTA0MTknOiAnaicsXG4gICdcXHUwNDFBJzogJ2snLFxuICAnXFx1MDQxQic6ICdsJyxcbiAgJ1xcdTA0MUMnOiAnbScsXG4gICdcXHUwNDFEJzogJ24nLFxuICAnXFx1MDQxRSc6ICdvJyxcbiAgJ1xcdTA0MUYnOiAncCcsXG4gICdcXHUwNDIwJzogJ3InLFxuICAnXFx1MDQyMSc6ICdzJyxcbiAgJ1xcdTA0MjInOiAndCcsXG4gICdcXHUwNDIzJzogJ3UnLFxuICAnXFx1MDQyNCc6ICdmJyxcbiAgJ1xcdTA0MjUnOiAnaCcsXG4gICdcXHUwNDI2JzogJ2MnLFxuICAnXFx1MDQyNyc6ICdjJyxcbiAgJ1xcdTA0MjgnOiAncycsXG4gICdcXHUwNDI5JzogJ3MnLFxuICAnXFx1MDQyQic6ICd5JyxcbiAgJ1xcdTA0MkQnOiAnZScsXG4gICdcXHUwNDJFJzogJ3UnLFxuICAnXFx1MDQyRic6ICdhJyxcbiAgJ1xcdTA0MzAnOiAnYScsXG4gICdcXHUwNDMxJzogJ2InLFxuICAnXFx1MDQzMic6ICd2JyxcbiAgJ1xcdTA0MzMnOiAnZycsXG4gICdcXHUwNDM0JzogJ2QnLFxuICAnXFx1MDQzNSc6ICdlJyxcbiAgJ1xcdTA0MzYnOiAneicsXG4gICdcXHUwNDM3JzogJ3onLFxuICAnXFx1MDQzOCc6ICdpJyxcbiAgJ1xcdTA0MzknOiAnaicsXG4gICdcXHUwNDNBJzogJ2snLFxuICAnXFx1MDQzQic6ICdsJyxcbiAgJ1xcdTA0M0MnOiAnbScsXG4gICdcXHUwNDNEJzogJ24nLFxuICAnXFx1MDQzRSc6ICdvJyxcbiAgJ1xcdTA0M0YnOiAncCcsXG4gICdcXHUwNDQwJzogJ3InLFxuICAnXFx1MDQ0MSc6ICdzJyxcbiAgJ1xcdTA0NDInOiAndCcsXG4gICdcXHUwNDQzJzogJ3UnLFxuICAnXFx1MDQ0NCc6ICdmJyxcbiAgJ1xcdTA0NDUnOiAnaCcsXG4gICdcXHUwNDQ2JzogJ2MnLFxuICAnXFx1MDQ0Nyc6ICdjJyxcbiAgJ1xcdTA0NDgnOiAncycsXG4gICdcXHUwNDQ5JzogJ3MnLFxuICAnXFx1MDQ0Qic6ICd5JyxcbiAgJ1xcdTA0NEQnOiAnZScsXG4gICdcXHUwNDRFJzogJ3UnLFxuICAnXFx1MDQ0Ric6ICdhJyxcbiAgJ1xcdTA0NTEnOiAnZScsXG4gICdcXHUwNDUyJzogJ2QnLFxuICAnXFx1MDQ1Myc6ICdnJyxcbiAgJ1xcdTA0NTQnOiAnZScsXG4gICdcXHUwNDU1JzogJ3onLFxuICAnXFx1MDQ1Nic6ICdpJyxcbiAgJ1xcdTA0NTcnOiAnaScsXG4gICdcXHUwNDU4JzogJ2onLFxuICAnXFx1MDQ1OSc6ICdsJyxcbiAgJ1xcdTA0NUEnOiAnbicsXG4gICdcXHUwNDVCJzogJ2MnLFxuICAnXFx1MDQ1Qyc6ICdrJyxcbiAgJ1xcdTA0NUUnOiAndScsXG4gICdcXHUwNDVGJzogJ2QnLFxuICAnXFx1MDQ2Mic6ICdlJyxcbiAgJ1xcdTA0NjMnOiAnZScsXG4gICdcXHUwNDZBJzogJ2EnLFxuICAnXFx1MDQ2Qic6ICdhJyxcbiAgJ1xcdTA0NzInOiAnZicsXG4gICdcXHUwNDczJzogJ2YnLFxuICAnXFx1MDQ3NCc6ICd5JyxcbiAgJ1xcdTA0NzUnOiAneScsXG4gICdcXHUwNDkwJzogJ2cnLFxuICAnXFx1MDQ5MSc6ICdnJyxcbiAgJ1xcdTA0OTInOiAnZycsXG4gICdcXHUwNDkzJzogJ2cnLFxuICAnXFx1MDQ5NCc6ICdnJyxcbiAgJ1xcdTA0OTUnOiAnZycsXG4gICdcXHUwNDk2JzogJ3onLFxuICAnXFx1MDQ5Nyc6ICd6JyxcbiAgJ1xcdTA0OUEnOiAnaycsXG4gICdcXHUwNDlCJzogJ2snLFxuICAnXFx1MDQ5Qyc6ICdrJyxcbiAgJ1xcdTA0OUQnOiAnaycsXG4gICdcXHUwNDlFJzogJ2snLFxuICAnXFx1MDQ5Ric6ICdrJyxcbiAgJ1xcdTA0QTAnOiAnaycsXG4gICdcXHUwNEExJzogJ2snLFxuICAnXFx1MDRBMic6ICduJyxcbiAgJ1xcdTA0QTMnOiAnbicsXG4gICdcXHUwNEE0JzogJ24nLFxuICAnXFx1MDRBNSc6ICduJyxcbiAgJ1xcdTA0QTYnOiAncCcsXG4gICdcXHUwNEE3JzogJ3AnLFxuICAnXFx1MDRBOCc6ICdvJyxcbiAgJ1xcdTA0QTknOiAnbycsXG4gICdcXHUwNEFBJzogJ3MnLFxuICAnXFx1MDRBQic6ICdzJyxcbiAgJ1xcdTA0QUMnOiAndCcsXG4gICdcXHUwNEFEJzogJ3QnLFxuICAnXFx1MDRBRSc6ICd1JyxcbiAgJ1xcdTA0QUYnOiAndScsXG4gICdcXHUwNEIwJzogJ3UnLFxuICAnXFx1MDRCMSc6ICd1JyxcbiAgJ1xcdTA0QjInOiAnaCcsXG4gICdcXHUwNEIzJzogJ2gnLFxuICAnXFx1MDRCNCc6ICdjJyxcbiAgJ1xcdTA0QjUnOiAnYycsXG4gICdcXHUwNEI2JzogJ2MnLFxuICAnXFx1MDRCNyc6ICdjJyxcbiAgJ1xcdTA0QjgnOiAnYycsXG4gICdcXHUwNEI5JzogJ2MnLFxuICAnXFx1MDRCQSc6ICdoJyxcbiAgJ1xcdTA0QkInOiAnaCcsXG4gICdcXHUwNEJDJzogJ2MnLFxuICAnXFx1MDRCRCc6ICdjJyxcbiAgJ1xcdTA0QkUnOiAnYycsXG4gICdcXHUwNEJGJzogJ2MnLFxuICAnXFx1MDRDMSc6ICd6JyxcbiAgJ1xcdTA0QzInOiAneicsXG4gICdcXHUwNEMzJzogJ2snLFxuICAnXFx1MDRDNCc6ICdrJyxcbiAgJ1xcdTA0QzUnOiAnbCcsXG4gICdcXHUwNEM2JzogJ2wnLFxuICAnXFx1MDRDNyc6ICduJyxcbiAgJ1xcdTA0QzgnOiAnbicsXG4gICdcXHUwNEM5JzogJ24nLFxuICAnXFx1MDRDQSc6ICduJyxcbiAgJ1xcdTA0Q0InOiAnYycsXG4gICdcXHUwNENDJzogJ2MnLFxuICAnXFx1MDREMCc6ICdhJyxcbiAgJ1xcdTA0RDEnOiAnYScsXG4gICdcXHUwNEQyJzogJ2EnLFxuICAnXFx1MDREMyc6ICdhJyxcbiAgJ1xcdTA0RDQnOiAnYWUnLFxuICAnXFx1MDRENSc6ICdhZScsXG4gICdcXHUwNEQ2JzogJ2UnLFxuICAnXFx1MDRENyc6ICdlJyxcbiAgJ1xcdTA0RDgnOiAnYScsXG4gICdcXHUwNEQ5JzogJ2EnLFxuICAnXFx1MDREQSc6ICdhJyxcbiAgJ1xcdTA0REInOiAnYScsXG4gICdcXHUwNERDJzogJ3onLFxuICAnXFx1MDRERCc6ICd6JyxcbiAgJ1xcdTA0REUnOiAneicsXG4gICdcXHUwNERGJzogJ3onLFxuICAnXFx1MDRFMCc6ICd6JyxcbiAgJ1xcdTA0RTEnOiAneicsXG4gICdcXHUwNEUyJzogJ2knLFxuICAnXFx1MDRFMyc6ICdpJyxcbiAgJ1xcdTA0RTQnOiAnaScsXG4gICdcXHUwNEU1JzogJ2knLFxuICAnXFx1MDRFNic6ICdvJyxcbiAgJ1xcdTA0RTcnOiAnbycsXG4gICdcXHUwNEU4JzogJ28nLFxuICAnXFx1MDRFOSc6ICdvJyxcbiAgJ1xcdTA0RUEnOiAnbycsXG4gICdcXHUwNEVCJzogJ28nLFxuICAnXFx1MDRFRSc6ICd1JyxcbiAgJ1xcdTA0RUYnOiAndScsXG4gICdcXHUwNEYwJzogJ3UnLFxuICAnXFx1MDRGMSc6ICd1JyxcbiAgJ1xcdTA0RjInOiAndScsXG4gICdcXHUwNEYzJzogJ3UnLFxuICAnXFx1MDRGNCc6ICdjJyxcbiAgJ1xcdTA0RjUnOiAnYycsXG4gICdcXHUwNEY4JzogJ3knLFxuICAnXFx1MDRGOSc6ICd5JyxcbiAgJ1xcdTA1MEEnOiAnbicsXG4gICdcXHUwNTBCJzogJ24nLFxuICAnXFx1MDUwRSc6ICd0JyxcbiAgJ1xcdTA1MEYnOiAndCcsXG4gICdcXHUwNTFBJzogJ3EnLFxuICAnXFx1MDUxQic6ICdxJyxcbiAgJ1xcdTA1MUMnOiAndycsXG4gICdcXHUwNTFEJzogJ3cnLFxufTtcbiIsCiAgICAiLyoqXG4gKiDmloflrZfliJfjg6bjg7zjg4bjgqPjg6rjg4bjgqNcbiAqL1xuXG5pbXBvcnQgeyBzcGVjaWFsQ2hhck1hcCB9IGZyb20gJy4vdGFibGUvY2hhci10YWJsZSc7XG5cbi8qKlxuICog5paH5a2X5YiX44KSVW5peOW9ouW8j+OBq+WkieaPm+OBmeOCi1xuICpcbiAqIGxlZ2FjeSB3aWtpZG9044Gu5a6f6KOF44Gr5ZCI44KP44Gb44Gf5aSJ5o+b44KS6KGM44GG44CCXG4gKiAtIOeJueauiuaWh+Wtl+OCkkFTQ0lJ5paH5a2X44Gr5aSJ5o+bXG4gKiAtIOWwj+aWh+Wtl+OBq+WkieaPm1xuICogLSBBU0NJSeS7peWkluOBruaWh+Wtl+OCkuODj+OCpOODleODs+OBq+WkieaPm1xuICogLSDpgKPntprjgZnjgovjg4/jgqTjg5Xjg7Mv44Kz44Ot44Oz44KS5Y2Y5LiA44GrXG4gKiAtIOWFiOmgrS/mnKvlsL7jga7jg4/jgqTjg5Xjg7Mv44Kz44Ot44Oz44KS5YmK6ZmkXG4gKlxuICogQHBhcmFtIHRhcmdldFN0ciAtIOWkieaPm+WvvuixoeOBruaWh+Wtl+WIl1xuICogQHJldHVybnMg5aSJ5o+b44GV44KM44Gf5paH5a2X5YiXXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VuaXgodGFyZ2V0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyDnibnmrormloflrZfjga7lpInmj5tcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgdGFyZ2V0U3RyKSB7XG4gICAgY29uc3QgbWFwcGVkID0gc3BlY2lhbENoYXJNYXBbY2hhcl07XG4gICAgcmVzdWx0ICs9IG1hcHBlZCAhPT0gdW5kZWZpbmVkID8gbWFwcGVkIDogY2hhcjtcbiAgfVxuXG4gIC8vIGxvd2VyY2FzZeOBuOOBruWkieaPm1xuICByZXN1bHQgPSByZXN1bHQudG9Mb3dlckNhc2UoKTtcblxuICAvLyBhc2NpaeS7peWkluOBruaWh+Wtl+OCkuWJiumZpFxuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvW15hLXowLTlcXC06X10vZywgJy0nKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15fLywgJzpfJyk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8oPzwhOilfL2csICctJyk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9eLSovLCAnJyk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8tKiQvLCAnJyk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8tezIsfS9nLCAnLScpO1xuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvOnsyLH0vZywgJzonKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLzotL2csICc6Jyk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8tOi9nLCAnOicpO1xuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXy0vZywgJ18nKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLy1fL2csICdfJyk7XG5cbiAgLy8g5YWI6aCt44Go5pyr5bC+44GuOuOCkuWJiumZpFxuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXjovLCAnJyk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC86JC8sICcnKTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFN0cmluZ1V0aWzjgq/jg6njgrnvvIhQeXRob27kupLmj5vvvIlcbiAqL1xuZXhwb3J0IGNvbnN0IFN0cmluZ1V0aWwgPSB7XG4gIHRvVW5peCxcbn07XG4iLAogICAgImltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gJy4vdXNlcic7XG5cbi8qKlxuICog44Om44O844K244O844Kz44Os44Kv44K344On44OzXG4gKi9cbmV4cG9ydCBjbGFzcyBVc2VyQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PFVzZXIgfCBudWxsPiB7XG4gIGNvbnN0cnVjdG9yKHVzZXJzPzogKFVzZXIgfCBudWxsKVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAodXNlcnMpIHtcbiAgICAgIHRoaXMucHVzaCguLi51c2Vycyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOODpuODvOOCtuODvOWQjeOBp+aknOe0olxuICAgKiBAcGFyYW0gbmFtZSAtIOODpuODvOOCtuODvOWQjVxuICAgKiBAcmV0dXJucyDjg6bjg7zjgrbjg7zjgb7jgZ/jga91bmRlZmluZWRcbiAgICovXG4gIGZpbmRCeU5hbWUobmFtZTogc3RyaW5nKTogVXNlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG93ZXJOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAoY29uc3QgdXNlciBvZiB0aGlzKSB7XG4gICAgICBpZiAodXNlciAmJiB1c2VyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbG93ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIOODpuODvOOCtuODvElE44Gn5qSc57SiXG4gICAqIEBwYXJhbSBpZCAtIOODpuODvOOCtuODvElEXG4gICAqIEByZXR1cm5zIOODpuODvOOCtuODvOOBvuOBn+OBr3VuZGVmaW5lZFxuICAgKi9cbiAgZmluZEJ5SWQoaWQ6IG51bWJlcik6IFVzZXIgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgdXNlciBvZiB0aGlzKSB7XG4gICAgICBpZiAodXNlciAmJiB1c2VyLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBudWxs44KS6Zmk44GE44Gf44Om44O844K244O844Gu44G/44KS6L+U44GZXG4gICAqIEByZXR1cm5zIG51bGzku6XlpJbjga7jg6bjg7zjgrbjg7zphY3liJdcbiAgICovXG4gIGZpbHRlck5vbk51bGwoKTogVXNlcltdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXIoKHVzZXIpOiB1c2VyIGlzIFVzZXIgPT4gdXNlciAhPT0gbnVsbCk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbmltcG9ydCBwTGltaXQgZnJvbSAncC1saW1pdCc7XG5pbXBvcnQgeyBOb0VsZW1lbnRFcnJvciwgTm90Rm91bmRFeGNlcHRpb24sIFVuZXhwZWN0ZWRFcnJvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IERFRkFVTFRfQU1DX0NPTkZJRyB9IGZyb20gJy4uLy4uL2Nvbm5lY3Rvci9hbWMtY29uZmlnJztcbmltcG9ydCB7IHRvVW5peCB9IGZyb20gJy4uLy4uL3V0aWwvc3RyaW5nLXV0aWwnO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciwgVXNlclR5cGUgfSBmcm9tICcuL2Fic3RyYWN0LXVzZXInO1xuaW1wb3J0IHsgVXNlckNvbGxlY3Rpb24gfSBmcm9tICcuL3VzZXItY29sbGVjdGlvbic7XG5cbi8qKlxuICog44Om44O844K244O844OH44O844K/XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRhdGEge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgYXZhdGFyVXJsPzogc3RyaW5nIHwgbnVsbDtcbiAgdW5peE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICog6YCa5bi444Om44O844K244O8XG4gKi9cbmV4cG9ydCBjbGFzcyBVc2VyIGltcGxlbWVudHMgQWJzdHJhY3RVc2VyIHtcbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50UmVmO1xuXG4gIC8qKiDjg6bjg7zjgrbjg7xJRCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IG51bWJlcjtcblxuICAvKiog44Om44O844K244O85ZCNICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIOihqOekuuWQjSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheU5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqIOOCouODkOOCv+ODvFVSTCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhdGFyVXJsOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKiBVTklY5b2i5byP44Gu44Om44O844K244O85ZCNICovXG4gIHB1YmxpYyByZWFkb25seSB1bml4TmFtZTogc3RyaW5nO1xuXG4gIC8qKiBJUOOCouODieODrOOCue+8iOmAmuW4uOODpuODvOOCtuODvOOBp+OBr251bGzvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiog44Om44O844K244O856iu5YilICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyVHlwZTogVXNlclR5cGUgPSAndXNlcic7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnRSZWYsIGRhdGE6IFVzZXJEYXRhKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkYXRhLmRpc3BsYXlOYW1lID8/IG51bGw7XG4gICAgdGhpcy5hdmF0YXJVcmwgPSBkYXRhLmF2YXRhclVybCA/PyBgaHR0cHM6Ly93d3cud2lraWRvdC5jb20vYXZhdGFyLnBocD91c2VyaWQ9JHtkYXRhLmlkfWA7XG4gICAgdGhpcy51bml4TmFtZSA9IGRhdGEudW5peE5hbWUgPz8gdG9Vbml4KGRhdGEubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICog44Om44O844K244O85ZCN44GL44KJ44Om44O844K244O844KS5Y+W5b6X44GZ44KLXG4gICAqIEBwYXJhbSBjbGllbnQgLSDjgq/jg6njgqTjgqLjg7Pjg4hcbiAgICogQHBhcmFtIG5hbWUgLSDjg6bjg7zjgrbjg7zlkI1cbiAgICogQHJldHVybnMg44Om44O844K244O877yI5a2Y5Zyo44GX44Gq44GE5aC05ZCI44GvbnVsbO+8iVxuICAgKi9cbiAgc3RhdGljIGZyb21OYW1lKGNsaWVudDogQ2xpZW50UmVmLCBuYW1lOiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8VXNlciB8IG51bGw+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB1bml4TmFtZSA9IHRvVW5peChuYW1lKTtcbiAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vd3d3Lndpa2lkb3QuY29tL3VzZXI6aW5mby8ke3VuaXhOYW1lfWA7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGZldGNoIHVzZXIgaW5mbzogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpO1xuXG4gICAgICAgIC8vIOWtmOWcqOODgeOCp+ODg+OCr1xuICAgICAgICBpZiAoJCgnZGl2LmVycm9yLWJsb2NrJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWTlj5blvpdcbiAgICAgICAgY29uc3QgdXNlcklkRWxlbSA9ICQoJ2EuYnRuLmJ0bi1kZWZhdWx0LmJ0bi14cycpO1xuICAgICAgICBpZiAodXNlcklkRWxlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ1VzZXIgSUQgZWxlbWVudCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBocmVmID0gdXNlcklkRWxlbS5hdHRyKCdocmVmJyk7XG4gICAgICAgIGlmICghaHJlZikge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignVXNlciBJRCBocmVmIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVzZXJJZCA9IE51bWJlci5wYXJzZUludChocmVmLnNwbGl0KCcvJykucG9wKCkgPz8gJzAnLCAxMCk7XG5cbiAgICAgICAgLy8gbmFtZeWPluW+l1xuICAgICAgICBjb25zdCBuYW1lRWxlbSA9ICQoJ2gxLnByb2ZpbGUtdGl0bGUnKTtcbiAgICAgICAgaWYgKG5hbWVFbGVtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignVXNlciBuYW1lIGVsZW1lbnQgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNlck5hbWUgPSBuYW1lRWxlbS50ZXh0KCkudHJpbSgpO1xuXG4gICAgICAgIHJldHVybiBuZXcgVXNlcihjbGllbnQsIHtcbiAgICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICAgIG5hbWU6IHVzZXJOYW1lLFxuICAgICAgICAgIHVuaXhOYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24gfHwgZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCB1c2VyOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDopIfmlbDjg6bjg7zjgrbjg7zlkI3jgYvjgonjg6bjg7zjgrbjg7zjgpLlj5blvpfjgZnjgotcbiAgICogQHBhcmFtIGNsaWVudCAtIOOCr+ODqeOCpOOCouODs+ODiFxuICAgKiBAcGFyYW0gbmFtZXMgLSDjg6bjg7zjgrbjg7zlkI3phY3liJdcbiAgICogQHJldHVybnMg44Om44O844K244O844Kz44Os44Kv44K344On44OzXG4gICAqL1xuICBzdGF0aWMgZnJvbU5hbWVzKGNsaWVudDogQ2xpZW50UmVmLCBuYW1lczogc3RyaW5nW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8VXNlckNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyDlkIzmmYLmjqXntprmlbDjgpLliLbpmZBcbiAgICAgICAgY29uc3QgbGltaXQgPSBwTGltaXQoREVGQVVMVF9BTUNfQ09ORklHLnNlbWFwaG9yZUxpbWl0KTtcblxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgbmFtZXMubWFwKChuYW1lKSA9PlxuICAgICAgICAgICAgbGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBVc2VyLmZyb21OYW1lKGNsaWVudCwgbmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXNPaygpID8gcmVzdWx0LnZhbHVlIDogbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbmV3IFVzZXJDb2xsZWN0aW9uKHJlc3VsdHMpO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCB1c2VyczogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIC8vIEFic3RyYWN0VXNlcuWun+ijhVxuICBpc1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaXNEZWxldGVkVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNBbm9ueW1vdXNVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc0d1ZXN0VXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNXaWtpZG90VXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgVXNlcihpZD0ke3RoaXMuaWR9LCBuYW1lPSR7dGhpcy5uYW1lfSwgdW5peE5hbWU9JHt0aGlzLnVuaXhOYW1lfSlgO1xuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2xpZW50UmVmIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIsIFVzZXJUeXBlIH0gZnJvbSAnLi9hYnN0cmFjdC11c2VyJztcblxuLyoqXG4gKiBXaWtpZG9044K344K544OG44Og44Om44O844K244O8XG4gKi9cbmV4cG9ydCBjbGFzcyBXaWtpZG90VXNlciBpbXBsZW1lbnRzIEFic3RyYWN0VXNlciB7XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IENsaWVudFJlZjtcblxuICAvKiog44Om44O844K244O8SUTvvIhXaWtpZG9044K344K544OG44Og44GvMO+8iSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IG51bWJlciA9IDA7XG5cbiAgLyoqIOODpuODvOOCtuODvOWQjSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nID0gJ1dpa2lkb3QnO1xuXG4gIC8qKiBVTklY5b2i5byP44Gu44Om44O844K244O85ZCNICovXG4gIHB1YmxpYyByZWFkb25seSB1bml4TmFtZTogc3RyaW5nID0gJ3dpa2lkb3QnO1xuXG4gIC8qKiDjgqLjg5Djgr/jg7xVUkzvvIjjgrfjgrnjg4bjg6Djg6bjg7zjgrbjg7zjga9udWxs77yJICovXG4gIHB1YmxpYyByZWFkb25seSBhdmF0YXJVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBJUOOCouODieODrOOCue+8iOOCt+OCueODhuODoOODpuODvOOCtuODvOOBr251bGzvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiog44Om44O844K244O856iu5YilICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyVHlwZTogVXNlclR5cGUgPSAnd2lraWRvdCc7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnRSZWYpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgfVxuXG4gIC8vIEFic3RyYWN0VXNlcuWun+ijhVxuICBpc1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzRGVsZXRlZFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzQW5vbnltb3VzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNHdWVzdFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzV2lraWRvdFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgV2lraWRvdFVzZXIobmFtZT0ke3RoaXMubmFtZX0sIHVuaXhOYW1lPSR7dGhpcy51bml4TmFtZX0pYDtcbiAgfVxufVxuIiwKICAgICJleHBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciwgVXNlclR5cGUgfSBmcm9tICcuL2Fic3RyYWN0LXVzZXInO1xuZXhwb3J0IHsgQW5vbnltb3VzVXNlciB9IGZyb20gJy4vYW5vbnltb3VzLXVzZXInO1xuZXhwb3J0IHsgRGVsZXRlZFVzZXIgfSBmcm9tICcuL2RlbGV0ZWQtdXNlcic7XG5leHBvcnQgeyBHdWVzdFVzZXIgfSBmcm9tICcuL2d1ZXN0LXVzZXInO1xuZXhwb3J0IHsgVXNlciwgdHlwZSBVc2VyRGF0YSB9IGZyb20gJy4vdXNlcic7XG5leHBvcnQgeyBVc2VyQ29sbGVjdGlvbiB9IGZyb20gJy4vdXNlci1jb2xsZWN0aW9uJztcbmV4cG9ydCB7IFdpa2lkb3RVc2VyIH0gZnJvbSAnLi93aWtpZG90LXVzZXInO1xuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgdHlwZSB7IEFueU5vZGUgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL2NvbW1vbi9sb2dnZXInO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRSZWYgfSBmcm9tICcuLi8uLi9tb2R1bGUvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIgfSBmcm9tICcuLi8uLi9tb2R1bGUvdXNlcic7XG5pbXBvcnQgeyBBbm9ueW1vdXNVc2VyLCBEZWxldGVkVXNlciwgR3Vlc3RVc2VyLCBVc2VyLCBXaWtpZG90VXNlciB9IGZyb20gJy4uLy4uL21vZHVsZS91c2VyJztcblxuLyoqXG4gKiBwcmludHVzZXLopoHntKDjgpLjg5Hjg7zjgrnjgZfjgIHjg6bjg7zjgrbjg7zjgqrjg5bjgrjjgqfjgq/jg4jjgpLov5TjgZlcbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gV2lraWRvdOOCr+ODqeOCpOOCouODs+ODiFxuICogQHBhcmFtIGVsZW0gLSDjg5Hjg7zjgrnlr77osaHjga7opoHntKDvvIhwcmludHVzZXLjgq/jg6njgrnjgYzjgaTjgYTjgZ/opoHntKDvvIlcbiAqIEByZXR1cm5zIOODkeODvOOCueOBleOCjOOBpuW+l+OCieOCjOOBn+ODpuODvOOCtuODvOOCquODluOCuOOCp+OCr+ODiFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVc2VyKGNsaWVudDogQ2xpZW50UmVmLCBlbGVtOiBjaGVlcmlvLkNoZWVyaW88QW55Tm9kZT4pOiBBYnN0cmFjdFVzZXIge1xuICBjb25zdCBjbGFzc0F0dHIgPSBlbGVtLmF0dHIoJ2NsYXNzJykgPz8gJyc7XG4gIGNvbnN0IGNsYXNzZXMgPSBjbGFzc0F0dHIuc3BsaXQoL1xccysvKTtcblxuICAvLyDliYrpmaTmuIjjgb/jg6bjg7zjgrbjg7zliKTlrppcbiAgaWYgKGNsYXNzZXMuaW5jbHVkZXMoJ2RlbGV0ZWQnKSkge1xuICAgIGNvbnN0IGRhdGFJZCA9IGVsZW0uYXR0cignZGF0YS1pZCcpO1xuICAgIGNvbnN0IHVzZXJJZCA9IGRhdGFJZCA/IE51bWJlci5wYXJzZUludChkYXRhSWQsIDEwKSA6IDA7XG4gICAgcmV0dXJuIG5ldyBEZWxldGVkVXNlcihjbGllbnQsIHVzZXJJZCk7XG4gIH1cblxuICAvLyDjg4bjgq3jgrnjg4jjgYwgXCIodXNlciBkZWxldGVkKVwiIOOBruWgtOWQiFxuICBjb25zdCB0ZXh0ID0gZWxlbS50ZXh0KCkudHJpbSgpO1xuICBpZiAodGV4dCA9PT0gJyh1c2VyIGRlbGV0ZWQpJykge1xuICAgIHJldHVybiBuZXcgRGVsZXRlZFVzZXIoY2xpZW50LCAwKTtcbiAgfVxuXG4gIC8vIOWMv+WQjeODpuODvOOCtuODvOWIpOWumlxuICBpZiAoY2xhc3Nlcy5pbmNsdWRlcygnYW5vbnltb3VzJykpIHtcbiAgICBjb25zdCBpcEVsZW0gPSBlbGVtLmZpbmQoJ3NwYW4uaXAnKTtcbiAgICBpZiAoaXBFbGVtLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGlwID0gaXBFbGVtLnRleHQoKS5yZXBsYWNlKC9bKCldL2csICcnKS50cmltKCk7XG4gICAgICByZXR1cm4gbmV3IEFub255bW91c1VzZXIoY2xpZW50LCBpcCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQW5vbnltb3VzVXNlcihjbGllbnQsICcnKTtcbiAgfVxuXG4gIC8vIOOCsuOCueODiOODpuODvOOCtuODvOWIpOWumu+8iEdyYXZhdGFy44Ki44OQ44K/44O844KS5oyB44Gk77yJXG4gIGNvbnN0IGltZ0VsZW0gPSBlbGVtLmZpbmQoJ2ltZycpO1xuICBpZiAoaW1nRWxlbS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc3JjID0gaW1nRWxlbS5hdHRyKCdzcmMnKSA/PyAnJztcbiAgICBpZiAoc3JjLmluY2x1ZGVzKCdncmF2YXRhci5jb20nKSkge1xuICAgICAgY29uc3QgZ3Vlc3ROYW1lID0gdGV4dC5zcGxpdCgnICcpWzBdID8/ICdHdWVzdCc7XG4gICAgICByZXR1cm4gbmV3IEd1ZXN0VXNlcihjbGllbnQsIGd1ZXN0TmFtZSwgc3JjKTtcbiAgICB9XG4gIH1cblxuICAvLyBXaWtpZG9044K344K544OG44Og44Om44O844K244O85Yik5a6aXG4gIGlmICh0ZXh0ID09PSAnV2lraWRvdCcpIHtcbiAgICByZXR1cm4gbmV3IFdpa2lkb3RVc2VyKGNsaWVudCk7XG4gIH1cblxuICAvLyDpgJrluLjjg6bjg7zjgrbjg7xcbiAgY29uc3QgbGlua3MgPSBlbGVtLmZpbmQoJ2EnKTtcbiAgaWYgKGxpbmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIOODquODs+OCr+OBjOOBquOBhOWgtOWQiOOBr0RlbGV0ZWRVc2Vy44Go44GX44Gm5omx44GGXG4gICAgcmV0dXJuIG5ldyBEZWxldGVkVXNlcihjbGllbnQsIDApO1xuICB9XG5cbiAgLy8g5pyA5b6M44Gu44Oq44Oz44Kv44GM44Om44O844K244O844Oq44Oz44KvXG4gIGNvbnN0IHVzZXJMaW5rID0gbGlua3MubGFzdCgpO1xuICBjb25zdCB1c2VyTmFtZSA9IHVzZXJMaW5rLnRleHQoKS50cmltKCk7XG4gIGNvbnN0IGhyZWYgPSB1c2VyTGluay5hdHRyKCdocmVmJykgPz8gJyc7XG4gIGNvbnN0IG9uY2xpY2sgPSB1c2VyTGluay5hdHRyKCdvbmNsaWNrJykgPz8gJyc7XG5cbiAgLy8gdW5peF9uYW1l44KSaHJlZuOBi+OCieaKveWHulxuICBjb25zdCB1bml4TmFtZSA9IGhyZWYucmVwbGFjZSgvXi4qXFwvdXNlcjppbmZvXFwvLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgLy8gdXNlcl9pZOOCkm9uY2xpY2vjgYvjgonmir3lh7pcbiAgLy8g44OR44K/44O844OzOiBcIldJS0lET1QucGFnZS5saXN0ZW5lcnMudXNlckluZm8oMTIzNDU2KTsgcmV0dXJuIGZhbHNlO1wiXG4gIGNvbnN0IHVzZXJJZE1hdGNoID0gb25jbGljay5tYXRjaCgvdXNlckluZm9cXCgoXFxkKylcXCkvKTtcbiAgY29uc3QgdXNlcklkID0gdXNlcklkTWF0Y2g/LlsxXSA/IE51bWJlci5wYXJzZUludCh1c2VySWRNYXRjaFsxXSwgMTApIDogMDtcblxuICAvLyDjgqLjg5Djgr/jg7xVUkzjgpLnlJ/miJBcbiAgY29uc3QgYXZhdGFyVXJsID0gdXNlcklkID4gMCA/IGBodHRwOi8vd3d3Lndpa2lkb3QuY29tL2F2YXRhci5waHA/dXNlcmlkPSR7dXNlcklkfWAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIG5ldyBVc2VyKGNsaWVudCwge1xuICAgIGlkOiB1c2VySWQsXG4gICAgbmFtZTogdXNlck5hbWUsXG4gICAgdW5peE5hbWUsXG4gICAgYXZhdGFyVXJsLFxuICB9KTtcbn1cblxuLyoqXG4gKiBvZGF0Zeimgee0oOOBi+OCieaXpeaZguOCkuODkeODvOOCueOBmeOCi1xuICpcbiAqIEBwYXJhbSBlbGVtIC0g44OR44O844K55a++6LGh44Gu6KaB57Sg77yIb2RhdGXopoHntKDvvIlcbiAqIEByZXR1cm5zIOODkeODvOOCueOBleOCjOOBn0RhdGXjgIHjg5Hjg7zjgrnlpLHmlZfmmYLjga9udWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9kYXRlKGVsZW06IGNoZWVyaW8uQ2hlZXJpbzxBbnlOb2RlPik6IERhdGUgfCBudWxsIHtcbiAgY29uc3QgY2xhc3NBdHRyID0gZWxlbS5hdHRyKCdjbGFzcycpID8/ICcnO1xuXG4gIC8vIOOCr+ODqeOCueOBi+OCiSBVbml4IOOCv+OCpOODoOOCueOCv+ODs+ODl+OCkuaKveWHulxuICAvLyDjg5Hjgr/jg7zjg7M6IFwib2RhdGUgdGltZV8xMjM0NTY3ODkwIGZvcm1hdF8uLi5cIiDjga7jgojjgYbjgarlvaLlvI9cbiAgY29uc3QgdGltZU1hdGNoID0gY2xhc3NBdHRyLm1hdGNoKC90aW1lXyhcXGQrKS8pO1xuICBpZiAodGltZU1hdGNoPy5bMV0pIHtcbiAgICBjb25zdCB1bml4VGltZSA9IE51bWJlci5wYXJzZUludCh0aW1lTWF0Y2hbMV0sIDEwKTtcbiAgICByZXR1cm4gbmV3IERhdGUodW5peFRpbWUgKiAxMDAwKTtcbiAgfVxuXG4gIC8vIOODleOCqeODvOODq+ODkOODg+OCrzog44OG44Kt44K544OI44GL44KJ44OR44O844K5XG4gIGNvbnN0IHRleHQgPSBlbGVtLnRleHQoKS50cmltKCk7XG4gIGNvbnN0IHBhcnNlZCA9IERhdGUucGFyc2UodGV4dCk7XG4gIGlmICghTnVtYmVyLmlzTmFOKHBhcnNlZCkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUocGFyc2VkKTtcbiAgfVxuXG4gIC8vIOODkeODvOOCueOBp+OBjeOBquOBhOWgtOWQiOOBr251bGzjgpLov5TljbTjgZfjgIHorablkYrjgpLjg63jgrDlh7rliptcbiAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBvZGF0ZSBlbGVtZW50OiBjbGFzcz1cIiR7Y2xhc3NBdHRyfVwiLCB0ZXh0PVwiJHt0ZXh0fVwiYCk7XG4gIHJldHVybiBudWxsO1xufVxuIiwKICAgICJleHBvcnQgeyBwYXJzZU9kYXRlLCBwYXJzZVVzZXIgfSBmcm9tICcuL3VzZXInO1xuIiwKICAgICIvKipcbiAqIOODh+OCs+ODrOODvOOCv+ODpuODvOODhuOCo+ODquODhuOCo1xuICovXG5cbmltcG9ydCB7IExvZ2luUmVxdWlyZWRFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYywgd2RFcnJBc3luYyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIOOCr+ODqeOCpOOCouODs+ODiOWPgueFp+OCkuaMgeOBpOOCquODluOCuOOCp+OCr+ODiOOBruWei1xuICovXG5pbnRlcmZhY2UgSGFzQ2xpZW50IHtcbiAgY2xpZW50PzogeyByZXF1aXJlTG9naW4oKTogeyBpc0VycigpOiBib29sZWFuOyBlcnJvcj86IEVycm9yIH0gfTtcbiAgc2l0ZT86IHsgY2xpZW50OiB7IHJlcXVpcmVMb2dpbigpOiB7IGlzRXJyKCk6IGJvb2xlYW47IGVycm9yPzogRXJyb3IgfSB9IH07XG4gIHRocmVhZD86IHsgc2l0ZTogeyBjbGllbnQ6IHsgcmVxdWlyZUxvZ2luKCk6IHsgaXNFcnIoKTogYm9vbGVhbjsgZXJyb3I/OiBFcnJvciB9IH0gfSB9O1xufVxuXG4vKipcbiAqIOOCquODluOCuOOCp+OCr+ODiOOBi+OCieOCr+ODqeOCpOOCouODs+ODiOWPgueFp+OCkuWPluW+l+OBmeOCi1xuICovXG5mdW5jdGlvbiBnZXRDbGllbnRSZWYoXG4gIG9iajogSGFzQ2xpZW50XG4pOiB7IHJlcXVpcmVMb2dpbigpOiB7IGlzRXJyKCk6IGJvb2xlYW47IGVycm9yPzogRXJyb3IgfSB9IHwgbnVsbCB7XG4gIGlmIChvYmouY2xpZW50KSByZXR1cm4gb2JqLmNsaWVudDtcbiAgaWYgKG9iai5zaXRlPy5jbGllbnQpIHJldHVybiBvYmouc2l0ZS5jbGllbnQ7XG4gIGlmIChvYmoudGhyZWFkPy5zaXRlPy5jbGllbnQpIHJldHVybiBvYmoudGhyZWFkLnNpdGUuY2xpZW50O1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiDjg63jgrDjgqTjg7Plv4XpoIjjg6Hjgr3jg4Pjg4njg4fjgrPjg6zjg7zjgr9cbiAqXG4gKiDjgZPjga7jg4fjgrPjg6zjg7zjgr/jgpLpgannlKjjgZfjgZ/jg6Hjgr3jg4Pjg4njga/jgIHlrp/ooYzliY3jgavjg63jgrDjgqTjg7PnirbmhYvjgpLjg4Hjgqfjg4Pjgq/jgZnjgovjgIJcbiAqIOODreOCsOOCpOODs+OBl+OBpuOBhOOBquOBhOWgtOWQiOOBryBMb2dpblJlcXVpcmVkRXJyb3Ig44KS6L+U44GZ44CCXG4gKlxuICogQGV4YW1wbGVcbiAqIGNsYXNzIFBhZ2Uge1xuICogICBAUmVxdWlyZUxvZ2luXG4gKiAgIGRlc3Ryb3koKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAqICAgICByZXR1cm4gZnJvbVByb21pc2UoYXN5bmMgKCkgPT4geyAuLi4gfSwgKGUpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoLi4uKSk7XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlcXVpcmVMb2dpbjxcbiAgVGhpcyBleHRlbmRzIEhhc0NsaWVudCxcbiAgQXJncyBleHRlbmRzIHVua25vd25bXSxcbiAgUmV0dXJuIGV4dGVuZHMgV2lraWRvdFJlc3VsdEFzeW5jPHVua25vd24+LFxuPihcbiAgdGFyZ2V0OiAodGhpczogVGhpcywgLi4uYXJnczogQXJncykgPT4gUmV0dXJuLFxuICBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0PFRoaXMsICh0aGlzOiBUaGlzLCAuLi5hcmdzOiBBcmdzKSA9PiBSZXR1cm4+XG4pOiAodGhpczogVGhpcywgLi4uYXJnczogQXJncykgPT4gUmV0dXJuIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBUaGlzLCAuLi5hcmdzOiBBcmdzKTogUmV0dXJuIHtcbiAgICBjb25zdCBjbGllbnRSZWYgPSBnZXRDbGllbnRSZWYodGhpcyk7XG4gICAgaWYgKCFjbGllbnRSZWYpIHtcbiAgICAgIHJldHVybiB3ZEVyckFzeW5jKG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0NsaWVudCByZWZlcmVuY2Ugbm90IGZvdW5kJykpIGFzIHVua25vd24gYXMgUmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gY2xpZW50UmVmLnJlcXVpcmVMb2dpbigpO1xuICAgIGlmIChsb2dpblJlc3VsdC5pc0VycigpKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAgIFByb21pc2UucmVqZWN0KGxvZ2luUmVzdWx0LmVycm9yKSxcbiAgICAgICAgKCkgPT4gbmV3IExvZ2luUmVxdWlyZWRFcnJvcignTG9naW4gcmVxdWlyZWQnKVxuICAgICAgKSBhcyB1bmtub3duIGFzIFJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4uYXJncyk7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2hlZXJpbywgQ2hlZXJpb0FQSSB9IGZyb20gJ2NoZWVyaW8nO1xuaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbmltcG9ydCB0eXBlIHsgQW55Tm9kZSwgRWxlbWVudCB9IGZyb20gJ2RvbWhhbmRsZXInO1xuaW1wb3J0IHsgUmVxdWlyZUxvZ2luIH0gZnJvbSAnLi4vLi4vY29tbW9uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgTG9naW5SZXF1aXJlZEVycm9yLCBOb0VsZW1lbnRFcnJvciwgVW5leHBlY3RlZEVycm9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VPZGF0ZSwgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHR5cGUgeyBDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBGb3J1bVRocmVhZFJlZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5cbi8qKlxuICog44OV44Kp44O844Op44Og5oqV56i/44OH44O844K/XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ydW1Qb3N0RGF0YSB7XG4gIHRocmVhZDogRm9ydW1UaHJlYWRSZWY7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgZWxlbWVudDogRWxlbWVudDtcbiAgY3JlYXRlZEJ5OiBBYnN0cmFjdFVzZXI7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgZWRpdGVkQnk/OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBlZGl0ZWRBdD86IERhdGUgfCBudWxsO1xuICBwYXJlbnRJZD86IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICog44OV44Kp44O844Op44Og5oqV56i/XG4gKi9cbmV4cG9ydCBjbGFzcyBGb3J1bVBvc3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgdGhyZWFkOiBGb3J1bVRocmVhZFJlZjtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBudW1iZXI7XG4gIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudDtcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRCeTogQWJzdHJhY3RVc2VyO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0OiBEYXRlO1xuICBwdWJsaWMgcmVhZG9ubHkgZWRpdGVkQnk6IEFic3RyYWN0VXNlciB8IG51bGw7XG4gIHB1YmxpYyByZWFkb25seSBlZGl0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIHByaXZhdGUgX3BhcmVudElkOiBudW1iZXIgfCBudWxsO1xuICBwcml2YXRlIF9zb3VyY2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IEZvcnVtUG9zdERhdGEpIHtcbiAgICB0aGlzLnRocmVhZCA9IGRhdGEudGhyZWFkO1xuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgIHRoaXMudGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgIHRoaXMudGV4dCA9IGRhdGEudGV4dDtcbiAgICB0aGlzLmVsZW1lbnQgPSBkYXRhLmVsZW1lbnQ7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkYXRhLmNyZWF0ZWRCeTtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IGRhdGEuY3JlYXRlZEF0O1xuICAgIHRoaXMuZWRpdGVkQnkgPSBkYXRhLmVkaXRlZEJ5ID8/IG51bGw7XG4gICAgdGhpcy5lZGl0ZWRBdCA9IGRhdGEuZWRpdGVkQXQgPz8gbnVsbDtcbiAgICB0aGlzLl9wYXJlbnRJZCA9IGRhdGEucGFyZW50SWQgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDopqrmipXnqL9JRFxuICAgKi9cbiAgZ2V0IHBhcmVudElkKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgr3jg7zjgrnjgrPjg7zjg4nvvIhXaWtpZG906KiY5rOV77yJ44KS5Y+W5b6XXG4gICAqL1xuICBnZXRTb3VyY2UoKTogV2lraWRvdFJlc3VsdEFzeW5jPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLl9zb3VyY2UgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShQcm9taXNlLnJlc29sdmUodGhpcy5fc291cmNlKSwgKGUpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoU3RyaW5nKGUpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50aHJlYWQuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnZm9ydW0vc3ViL0ZvcnVtRWRpdFBvc3RGb3JtTW9kdWxlJyxcbiAgICAgICAgICAgIHRocmVhZElkOiB0aGlzLnRocmVhZC5pZCxcbiAgICAgICAgICAgIHBvc3RJZDogdGhpcy5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignRW1wdHkgcmVzcG9uc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoU3RyaW5nKHJlc3BvbnNlLmJvZHkgPz8gJycpKTtcbiAgICAgICAgY29uc3Qgc291cmNlRWxlbSA9ICQoXCJ0ZXh0YXJlYVtuYW1lPSdzb3VyY2UnXVwiKTtcbiAgICAgICAgaWYgKHNvdXJjZUVsZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdTb3VyY2UgdGV4dGFyZWEgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlRWxlbS50ZXh0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IHBvc3Qgc291cmNlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmipXnqL/jgpLnt6jpm4bjgZnjgotcbiAgICogQHBhcmFtIHNvdXJjZSAtIOaWsOOBl+OBhOOCveODvOOCue+8iFdpa2lkb3ToqJjms5XvvIlcbiAgICogQHBhcmFtIHRpdGxlIC0g5paw44GX44GE44K/44Kk44OI44Or77yI55yB55Wl5pmC44Gv54++5Zyo44Gu44K/44Kk44OI44Or44KS57at5oyB77yJXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGVkaXQoc291cmNlOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyDnj77lnKjjga7jg6rjg5Pjgrjjg6fjg7NJROOCkuWPluW+l1xuICAgICAgICBjb25zdCBmb3JtUmVzdWx0ID0gYXdhaXQgdGhpcy50aHJlYWQuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnZm9ydW0vc3ViL0ZvcnVtRWRpdFBvc3RGb3JtTW9kdWxlJyxcbiAgICAgICAgICAgIHRocmVhZElkOiB0aGlzLnRocmVhZC5pZCxcbiAgICAgICAgICAgIHBvc3RJZDogdGhpcy5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoZm9ybVJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgZm9ybVJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1SZXNwb25zZSA9IGZvcm1SZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghZm9ybVJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSBmb3JtIHJlc3BvbnNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKFN0cmluZyhmb3JtUmVzcG9uc2UuYm9keSA/PyAnJykpO1xuICAgICAgICBjb25zdCByZXZpc2lvbklucHV0ID0gJChcImlucHV0W25hbWU9J2N1cnJlbnRSZXZpc2lvbklkJ11cIik7XG4gICAgICAgIGlmIChyZXZpc2lvbklucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignQ3VycmVudCByZXZpc2lvbiBJRCBpbnB1dCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldmlzaW9uVmFsdWUgPSByZXZpc2lvbklucHV0LnZhbCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50UmV2aXNpb25JZCA9IE51bWJlci5wYXJzZUludChTdHJpbmcocmV2aXNpb25WYWx1ZSA/PyAnJyksIDEwKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihjdXJyZW50UmV2aXNpb25JZCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0ludmFsaWQgcmV2aXNpb24gSUQgdmFsdWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOe3qOmbhuOCkuS/neWtmFxuICAgICAgICBjb25zdCBlZGl0UmVzdWx0ID0gYXdhaXQgdGhpcy50aHJlYWQuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdGb3J1bUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ3NhdmVFZGl0UG9zdCcsXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgICAgcG9zdElkOiB0aGlzLmlkLFxuICAgICAgICAgICAgY3VycmVudFJldmlzaW9uSWQsXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUgPz8gdGhpcy50aXRsZSxcbiAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoZWRpdFJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgZWRpdFJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOODreODvOOCq+ODq+eKtuaFi+OCkuabtOaWsFxuICAgICAgICBpZiAodGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZWRpdCBwb3N0OiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBGb3J1bVBvc3QoaWQ9JHt0aGlzLmlkfSwgdGl0bGU9JHt0aGlzLnRpdGxlfSlgO1xuICB9XG59XG5cbi8qKlxuICog44OV44Kp44O844Op44Og5oqV56i/44Kz44Os44Kv44K344On44OzXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3J1bVBvc3RDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8Rm9ydW1Qb3N0PiB7XG4gIHB1YmxpYyByZWFkb25seSB0aHJlYWQ6IEZvcnVtVGhyZWFkUmVmO1xuXG4gIGNvbnN0cnVjdG9yKHRocmVhZDogRm9ydW1UaHJlYWRSZWYsIHBvc3RzPzogRm9ydW1Qb3N0W10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudGhyZWFkID0gdGhyZWFkO1xuICAgIGlmIChwb3N0cykge1xuICAgICAgdGhpcy5wdXNoKC4uLnBvc3RzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSUTjgafmpJzntKJcbiAgICogQHBhcmFtIGlkIC0g5oqV56i/SURcbiAgICogQHJldHVybnMg5oqV56i/77yI5a2Y5Zyo44GX44Gq44GE5aC05ZCI44GvdW5kZWZpbmVk77yJXG4gICAqL1xuICBmaW5kQnlJZChpZDogbnVtYmVyKTogRm9ydW1Qb3N0IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5maW5kKChwb3N0KSA9PiBwb3N0LmlkID09PSBpZCk7XG4gIH1cblxuICAvKipcbiAgICogSFRNTOOBi+OCieaKleeov+OCkuODkeODvOOCueOBmeOCi++8iOWGhemDqOODoeOCveODg+ODie+8iVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX3BhcnNlKHRocmVhZDogRm9ydW1UaHJlYWRSZWYsICQ6IENoZWVyaW9BUEkpOiBGb3J1bVBvc3RbXSB7XG4gICAgY29uc3QgcG9zdHM6IEZvcnVtUG9zdFtdID0gW107XG5cbiAgICAkKCdkaXYucG9zdCcpLmVhY2goKF9pLCBwb3N0RWxlbSkgPT4ge1xuICAgICAgY29uc3QgJHBvc3QgPSAkKHBvc3RFbGVtKTtcbiAgICAgIGNvbnN0IHBvc3RJZEF0dHIgPSAkcG9zdC5hdHRyKCdpZCcpO1xuICAgICAgaWYgKCFwb3N0SWRBdHRyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBvc3RJZCA9IE51bWJlci5wYXJzZUludChwb3N0SWRBdHRyLnJlcGxhY2UoJ3Bvc3QtJywgJycpLCAxMCk7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHBvc3RJZCkpIHJldHVybjtcblxuICAgICAgLy8g6Kaq5oqV56i/SUTjga7lj5blvpdcbiAgICAgIGxldCBwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICBjb25zdCAkcGFyZW50Q29udGFpbmVyID0gJHBvc3QucGFyZW50KCk7XG4gICAgICBpZiAoJHBhcmVudENvbnRhaW5lci5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0ICRncmFuZHBhcmVudCA9ICRwYXJlbnRDb250YWluZXIucGFyZW50KCk7XG4gICAgICAgIGlmICgkZ3JhbmRwYXJlbnQubGVuZ3RoID4gMCAmJiAkZ3JhbmRwYXJlbnRbMF0/Lm5hbWUgIT09ICdib2R5Jykge1xuICAgICAgICAgIGNvbnN0IGdyYW5kcGFyZW50Q2xhc3NlcyA9ICRncmFuZHBhcmVudC5hdHRyKCdjbGFzcycpID8/ICcnO1xuICAgICAgICAgIGlmIChncmFuZHBhcmVudENsYXNzZXMuaW5jbHVkZXMoJ3Bvc3QtY29udGFpbmVyJykpIHtcbiAgICAgICAgICAgIGNvbnN0ICRwYXJlbnRQb3N0ID0gJGdyYW5kcGFyZW50LmZpbmQoJz4gZGl2LnBvc3QnKTtcbiAgICAgICAgICAgIGlmICgkcGFyZW50UG9zdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBvc3RJZEF0dHIgPSAkcGFyZW50UG9zdC5hdHRyKCdpZCcpO1xuICAgICAgICAgICAgICBpZiAocGFyZW50UG9zdElkQXR0cikge1xuICAgICAgICAgICAgICAgIHBhcmVudElkID0gTnVtYmVyLnBhcnNlSW50KHBhcmVudFBvc3RJZEF0dHIucmVwbGFjZSgncG9zdC0nLCAnJyksIDEwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDjgr/jgqTjg4jjg6vjgajmnKzmlofjga7lj5blvpdcbiAgICAgIGNvbnN0ICR3cmFwcGVyID0gJHBvc3QuZmluZCgnZGl2LmxvbmcnKTtcbiAgICAgIGlmICgkd3JhcHBlci5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgY29uc3QgJGhlYWQgPSAkd3JhcHBlci5maW5kKCdkaXYuaGVhZCcpO1xuICAgICAgaWYgKCRoZWFkLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCAkdGl0bGUgPSAkaGVhZC5maW5kKCdkaXYudGl0bGUnKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gJHRpdGxlLnRleHQoKS50cmltKCk7XG5cbiAgICAgIGNvbnN0ICRjb250ZW50ID0gJHdyYXBwZXIuZmluZCgnZGl2LmNvbnRlbnQnKTtcbiAgICAgIGNvbnN0IHRleHQgPSAkY29udGVudC5odG1sKCkgPz8gJyc7XG5cbiAgICAgIC8vIOaKleeov+iAheOBqOaXpeaZglxuICAgICAgY29uc3QgJGluZm8gPSAkaGVhZC5maW5kKCdkaXYuaW5mbycpO1xuICAgICAgaWYgKCRpbmZvLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCAkdXNlckVsZW0gPSAkaW5mby5maW5kKCdzcGFuLnByaW50dXNlcicpO1xuICAgICAgaWYgKCR1c2VyRWxlbS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgY29uc3QgY3JlYXRlZEJ5ID0gcGFyc2VVc2VyKHRocmVhZC5zaXRlLmNsaWVudCBhcyBDbGllbnQsICR1c2VyRWxlbSBhcyBDaGVlcmlvPEFueU5vZGU+KTtcblxuICAgICAgY29uc3QgJG9kYXRlRWxlbSA9ICRpbmZvLmZpbmQoJ3NwYW4ub2RhdGUnKTtcbiAgICAgIGlmICgkb2RhdGVFbGVtLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBjcmVhdGVkQXQgPSBwYXJzZU9kYXRlKCRvZGF0ZUVsZW0gYXMgQ2hlZXJpbzxBbnlOb2RlPikgPz8gbmV3IERhdGUoKTtcblxuICAgICAgLy8g57eo6ZuG5oOF5aCx77yI5a2Y5Zyo44GZ44KL5aC05ZCI77yJXG4gICAgICBsZXQgZWRpdGVkQnk6IEFic3RyYWN0VXNlciB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IGVkaXRlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgICBjb25zdCAkY2hhbmdlcyA9ICR3cmFwcGVyLmZpbmQoJ2Rpdi5jaGFuZ2VzJyk7XG4gICAgICBpZiAoJGNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCAkZWRpdFVzZXJFbGVtID0gJGNoYW5nZXMuZmluZCgnc3Bhbi5wcmludHVzZXInKTtcbiAgICAgICAgY29uc3QgJGVkaXRPZGF0ZUVsZW0gPSAkY2hhbmdlcy5maW5kKCdzcGFuLm9kYXRlJyk7XG4gICAgICAgIGlmICgkZWRpdFVzZXJFbGVtLmxlbmd0aCA+IDAgJiYgJGVkaXRPZGF0ZUVsZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVkaXRlZEJ5ID0gcGFyc2VVc2VyKHRocmVhZC5zaXRlLmNsaWVudCBhcyBDbGllbnQsICRlZGl0VXNlckVsZW0gYXMgQ2hlZXJpbzxBbnlOb2RlPik7XG4gICAgICAgICAgZWRpdGVkQXQgPSBwYXJzZU9kYXRlKCRlZGl0T2RhdGVFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBvc3RzLnB1c2goXG4gICAgICAgIG5ldyBGb3J1bVBvc3Qoe1xuICAgICAgICAgIHRocmVhZCxcbiAgICAgICAgICBpZDogcG9zdElkLFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZWxlbWVudDogcG9zdEVsZW0gYXMgRWxlbWVudCxcbiAgICAgICAgICBjcmVhdGVkQnksXG4gICAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICAgIGVkaXRlZEJ5LFxuICAgICAgICAgIGVkaXRlZEF0LFxuICAgICAgICAgIHBhcmVudElkLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwb3N0cztcbiAgfVxuXG4gIC8qKlxuICAgKiDjgrnjg6zjg4Pjg4nlhoXjga7lhajmipXnqL/jgpLlj5blvpdcbiAgICovXG4gIHN0YXRpYyBhY3F1aXJlQWxsSW5UaHJlYWQodGhyZWFkOiBGb3J1bVRocmVhZFJlZik6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bVBvc3RDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcG9zdHM6IEZvcnVtUG9zdFtdID0gW107XG5cbiAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSBhd2FpdCB0aHJlYWQuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnZm9ydW0vRm9ydW1WaWV3VGhyZWFkUG9zdHNNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZU5vOiAnMScsXG4gICAgICAgICAgICB0OiBTdHJpbmcodGhyZWFkLmlkKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoZmlyc3RSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGZpcnN0UmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RSZXNwb25zZSA9IGZpcnN0UmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIWZpcnN0UmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0VtcHR5IHJlc3BvbnNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEJvZHkgPSBTdHJpbmcoZmlyc3RSZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgJGZpcnN0ID0gY2hlZXJpby5sb2FkKGZpcnN0Qm9keSk7XG5cbiAgICAgICAgcG9zdHMucHVzaCguLi5Gb3J1bVBvc3RDb2xsZWN0aW9uLl9wYXJzZSh0aHJlYWQsICRmaXJzdCkpO1xuXG4gICAgICAgIC8vIOODmuODvOOCuOODjeODvOOCt+ODp+ODs+eiuuiqjVxuICAgICAgICBjb25zdCAkcGFnZXIgPSAkZmlyc3QoJ2Rpdi5wYWdlcicpO1xuICAgICAgICBpZiAoJHBhZ2VyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgRm9ydW1Qb3N0Q29sbGVjdGlvbih0aHJlYWQsIHBvc3RzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0ICRwYWdlclRhcmdldHMgPSAkcGFnZXIuZmluZCgnc3Bhbi50YXJnZXQnKTtcbiAgICAgICAgaWYgKCRwYWdlclRhcmdldHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHJldHVybiBuZXcgRm9ydW1Qb3N0Q29sbGVjdGlvbih0aHJlYWQsIHBvc3RzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOacgOW+jOOBi+OCiTLnlarnm67jga7jg5rjg7zjgrjjg6rjg7Pjgq/jgYvjgonmnIDntYLjg5rjg7zjgrjnlarlj7fjgpLlj5blvpdcbiAgICAgICAgY29uc3QgbGFzdFBhZ2VUZXh0ID0gJHBhZ2VyVGFyZ2V0c1xuICAgICAgICAgIC5lcSgkcGFnZXJUYXJnZXRzLmxlbmd0aCAtIDIpXG4gICAgICAgICAgLnRleHQoKVxuICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTnVtYmVyLnBhcnNlSW50KGxhc3RQYWdlVGV4dCwgMTApO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGxhc3RQYWdlKSB8fCBsYXN0UGFnZSA8PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVBvc3RDb2xsZWN0aW9uKHRocmVhZCwgcG9zdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g5q6L44KK44Gu44Oa44O844K444KS5Y+W5b6XXG4gICAgICAgIGNvbnN0IGJvZGllczogeyBtb2R1bGVOYW1lOiBzdHJpbmc7IHBhZ2VObzogc3RyaW5nOyB0OiBzdHJpbmcgfVtdID0gW107XG4gICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IGxhc3RQYWdlOyBwYWdlKyspIHtcbiAgICAgICAgICBib2RpZXMucHVzaCh7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnZm9ydW0vRm9ydW1WaWV3VGhyZWFkUG9zdHNNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZU5vOiBTdHJpbmcocGFnZSksXG4gICAgICAgICAgICB0OiBTdHJpbmcodGhyZWFkLmlkKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxSZXN1bHRzID0gYXdhaXQgdGhyZWFkLnNpdGUuYW1jUmVxdWVzdChib2RpZXMpO1xuICAgICAgICBpZiAoYWRkaXRpb25hbFJlc3VsdHMuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGFkZGl0aW9uYWxSZXN1bHRzLmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBhZGRpdGlvbmFsUmVzdWx0cy52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2U/LmJvZHkgPz8gJycpO1xuICAgICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoYm9keSk7XG4gICAgICAgICAgcG9zdHMucHVzaCguLi5Gb3J1bVBvc3RDb2xsZWN0aW9uLl9wYXJzZSh0aHJlYWQsICQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRm9ydW1Qb3N0Q29sbGVjdGlvbih0aHJlYWQsIHBvc3RzKTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHJldHVybiBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBhY3F1aXJlIHBvc3RzOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENoZWVyaW8gfSBmcm9tICdjaGVlcmlvJztcbmltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgdHlwZSB7IEFueU5vZGUgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB7IFJlcXVpcmVMb2dpbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9kZWNvcmF0b3JzJztcbmltcG9ydCB7IE5vRWxlbWVudEVycm9yLCBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZU9kYXRlLCBwYXJzZVVzZXIgfSBmcm9tICcuLi8uLi91dGlsL3BhcnNlcic7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5pbXBvcnQgdHlwZSB7IEZvcnVtQ2F0ZWdvcnkgfSBmcm9tICcuL2ZvcnVtLWNhdGVnb3J5JztcbmltcG9ydCB7IEZvcnVtUG9zdENvbGxlY3Rpb24gfSBmcm9tICcuL2ZvcnVtLXBvc3QnO1xuXG4vKipcbiAqIOODleOCqeODvOODqeODoOOCueODrOODg+ODieODh+ODvOOCv1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcnVtVGhyZWFkRGF0YSB7XG4gIHNpdGU6IFNpdGU7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRCeTogQWJzdHJhY3RVc2VyIHwgbnVsbDtcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICBwb3N0Q291bnQ6IG51bWJlcjtcbiAgY2F0ZWdvcnk/OiBGb3J1bUNhdGVnb3J5IHwgbnVsbDtcbn1cblxuLyoqXG4gKiDjg5Xjgqnjg7zjg6njg6Djgrnjg6zjg4Pjg4lcbiAqL1xuZXhwb3J0IGNsYXNzIEZvcnVtVGhyZWFkIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQnk6IEFic3RyYWN0VXNlciB8IG51bGw7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ6IERhdGU7XG4gIHB1YmxpYyBwb3N0Q291bnQ6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGNhdGVnb3J5OiBGb3J1bUNhdGVnb3J5IHwgbnVsbDtcbiAgcHJpdmF0ZSBfcG9zdHM6IEZvcnVtUG9zdENvbGxlY3Rpb24gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBGb3J1bVRocmVhZERhdGEpIHtcbiAgICB0aGlzLnNpdGUgPSBkYXRhLnNpdGU7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy50aXRsZSA9IGRhdGEudGl0bGU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkYXRhLmNyZWF0ZWRCeTtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IGRhdGEuY3JlYXRlZEF0O1xuICAgIHRoaXMucG9zdENvdW50ID0gZGF0YS5wb3N0Q291bnQ7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGRhdGEuY2F0ZWdvcnkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgrnjg6zjg4Pjg4lVUkxcbiAgICovXG4gIGdldFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLnNpdGUuZ2V0QmFzZVVybCgpfS9mb3J1bS90LSR7dGhpcy5pZH0vYDtcbiAgfVxuXG4gIC8qKlxuICAgKiDmipXnqL/kuIDopqfjgpLlj5blvpdcbiAgICovXG4gIGdldFBvc3RzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bVBvc3RDb2xsZWN0aW9uPiB7XG4gICAgaWYgKHRoaXMuX3Bvc3RzICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3Bvc3RzKSwgKGUpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoU3RyaW5nKGUpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEZvcnVtUG9zdENvbGxlY3Rpb24uYWNxdWlyZUFsbEluVGhyZWFkKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIOOCueODrOODg+ODieOBq+i/lOS/oVxuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICByZXBseShcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICB0aXRsZSA9ICcnLFxuICAgIHBhcmVudFBvc3RJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPEZvcnVtVGhyZWFkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocmVhZElkOiBTdHJpbmcodGhpcy5pZCksXG4gICAgICAgICAgICBwYXJlbnRJZDogcGFyZW50UG9zdElkICE9PSBudWxsID8gU3RyaW5nKHBhcmVudFBvc3RJZCkgOiAnJyxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgYWN0aW9uOiAnRm9ydW1BY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdzYXZlUG9zdCcsXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcG9zdHMgPSBudWxsO1xuICAgICAgICB0aGlzLnBvc3RDb3VudCArPSAxO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byByZXBseTogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBGb3J1bVRocmVhZChpZD0ke3RoaXMuaWR9LCB0aXRsZT0ke3RoaXMudGl0bGV9KWA7XG4gIH1cblxuICAvKipcbiAgICogSUTjgYvjgonjgrnjg6zjg4Pjg4njgpLlj5blvpdcbiAgICovXG4gIHN0YXRpYyBnZXRGcm9tSWQoXG4gICAgc2l0ZTogU2l0ZSxcbiAgICB0aHJlYWRJZDogbnVtYmVyLFxuICAgIGNhdGVnb3J5OiBGb3J1bUNhdGVnb3J5IHwgbnVsbCA9IG51bGxcbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPEZvcnVtVGhyZWFkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRm9ydW1UaHJlYWRDb2xsZWN0aW9uLmFjcXVpcmVGcm9tVGhyZWFkSWRzKHNpdGUsIFt0aHJlYWRJZF0sIGNhdGVnb3J5KTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRocmVhZCA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCF0aHJlYWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoYFRocmVhZCBub3QgZm91bmQ6ICR7dGhyZWFkSWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRocmVhZDtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHJldHVybiBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgdGhyZWFkOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOODleOCqeODvOODqeODoOOCueODrOODg+ODieOCs+ODrOOCr+OCt+ODp+ODs1xuICovXG5leHBvcnQgY2xhc3MgRm9ydW1UaHJlYWRDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8Rm9ydW1UaHJlYWQ+IHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG5cbiAgY29uc3RydWN0b3Ioc2l0ZTogU2l0ZSwgdGhyZWFkcz86IEZvcnVtVGhyZWFkW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2l0ZSA9IHNpdGU7XG4gICAgaWYgKHRocmVhZHMpIHtcbiAgICAgIHRoaXMucHVzaCguLi50aHJlYWRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSUTjgafmpJzntKJcbiAgICovXG4gIGZpbmRCeUlkKGlkOiBudW1iZXIpOiBGb3J1bVRocmVhZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgodGhyZWFkKSA9PiB0aHJlYWQuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgqvjg4bjgrTjg6rlhoXjga7lhajjgrnjg6zjg4Pjg4njgpLlj5blvpdcbiAgICovXG4gIHN0YXRpYyBhY3F1aXJlQWxsSW5DYXRlZ29yeShjYXRlZ29yeTogRm9ydW1DYXRlZ29yeSk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bVRocmVhZENvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0aHJlYWRzOiBGb3J1bVRocmVhZFtdID0gW107XG5cbiAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSBhd2FpdCBjYXRlZ29yeS5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHA6IDEsXG4gICAgICAgICAgICBjOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdmb3J1bS9Gb3J1bVZpZXdDYXRlZ29yeU1vZHVsZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKGZpcnN0UmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyBmaXJzdFJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0UmVzcG9uc2UgPSBmaXJzdFJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFmaXJzdFJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RCb2R5ID0gU3RyaW5nKGZpcnN0UmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgIGNvbnN0ICRmaXJzdCA9IGNoZWVyaW8ubG9hZChmaXJzdEJvZHkpO1xuXG4gICAgICAgICRmaXJzdCgndGFibGUudGFibGUgdHIuaGVhZH50cicpLmVhY2goKF9pLCBlbGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgJHJvdyA9ICRmaXJzdChlbGVtKTtcbiAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSAkcm93LmZpbmQoJ2Rpdi50aXRsZSBhJyk7XG4gICAgICAgICAgY29uc3QgaHJlZiA9IHRpdGxlRWxlbS5hdHRyKCdocmVmJykgPz8gJyc7XG4gICAgICAgICAgY29uc3QgdGhyZWFkSWRNYXRjaCA9IGhyZWYubWF0Y2goL3QtKFxcZCspLyk7XG4gICAgICAgICAgaWYgKCF0aHJlYWRJZE1hdGNoPy5bMV0pIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IHRocmVhZElkID0gTnVtYmVyLnBhcnNlSW50KHRocmVhZElkTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IHRpdGxlRWxlbS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gJHJvdy5maW5kKCdkaXYuZGVzY3JpcHRpb24nKS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHBvc3RDb3VudCA9IE51bWJlci5wYXJzZUludCgkcm93LmZpbmQoJ3RkLnBvc3RzJykudGV4dCgpLnRyaW0oKSwgMTApIHx8IDA7XG5cbiAgICAgICAgICAvLyDjg6bjg7zjgrbjg7zjgajml6XmmYLjga7jg5Hjg7zjgrlcbiAgICAgICAgICBjb25zdCAkdXNlckVsZW0gPSAkcm93LmZpbmQoJ3RkLnN0YXJ0ZWQgc3Bhbi5wcmludHVzZXInKTtcbiAgICAgICAgICBjb25zdCAkb2RhdGVFbGVtID0gJHJvdy5maW5kKCd0ZC5zdGFydGVkIHNwYW4ub2RhdGUnKTtcblxuICAgICAgICAgIGNvbnN0IGNyZWF0ZWRCeSA9XG4gICAgICAgICAgICAkdXNlckVsZW0ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IHBhcnNlVXNlcihjYXRlZ29yeS5zaXRlLmNsaWVudCwgJHVzZXJFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBjb25zdCBjcmVhdGVkQXQgPVxuICAgICAgICAgICAgJG9kYXRlRWxlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gKHBhcnNlT2RhdGUoJG9kYXRlRWxlbSBhcyBDaGVlcmlvPEFueU5vZGU+KSA/PyBuZXcgRGF0ZSgpKVxuICAgICAgICAgICAgICA6IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgICB0aHJlYWRzLnB1c2goXG4gICAgICAgICAgICBuZXcgRm9ydW1UaHJlYWQoe1xuICAgICAgICAgICAgICBzaXRlOiBjYXRlZ29yeS5zaXRlLFxuICAgICAgICAgICAgICBpZDogdGhyZWFkSWQsXG4gICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgY3JlYXRlZEJ5LFxuICAgICAgICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgIHBvc3RDb3VudCxcbiAgICAgICAgICAgICAgY2F0ZWdvcnksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIHBhZ2luYXRpb25cbiAgICAgICAgY29uc3QgcGFnZXIgPSAkZmlyc3QoJ2Rpdi5wYWdlcicpO1xuICAgICAgICBpZiAocGFnZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVRocmVhZENvbGxlY3Rpb24oY2F0ZWdvcnkuc2l0ZSwgdGhyZWFkcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYWdlckxpbmtzID0gcGFnZXIuZmluZCgnYScpO1xuICAgICAgICBpZiAocGFnZXJMaW5rcy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVRocmVhZENvbGxlY3Rpb24oY2F0ZWdvcnkuc2l0ZSwgdGhyZWFkcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UGFnZUxpbmsgPSBwYWdlckxpbmtzW3BhZ2VyTGlua3MubGVuZ3RoIC0gMl07XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlVGV4dCA9IGxhc3RQYWdlTGluayA/ICRmaXJzdChsYXN0UGFnZUxpbmspLnRleHQoKS50cmltKCkgOiAnMSc7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTnVtYmVyLnBhcnNlSW50KGxhc3RQYWdlVGV4dCwgMTApIHx8IDE7XG5cbiAgICAgICAgaWYgKGxhc3RQYWdlIDw9IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEZvcnVtVGhyZWFkQ29sbGVjdGlvbihjYXRlZ29yeS5zaXRlLCB0aHJlYWRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuICAgICAgICBjb25zdCBib2RpZXM6IHsgcDogbnVtYmVyOyBjOiBudW1iZXI7IG1vZHVsZU5hbWU6IHN0cmluZyB9W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gbGFzdFBhZ2U7IHBhZ2UrKykge1xuICAgICAgICAgIGJvZGllcy5wdXNoKHtcbiAgICAgICAgICAgIHA6IHBhZ2UsXG4gICAgICAgICAgICBjOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdmb3J1bS9Gb3J1bVZpZXdDYXRlZ29yeU1vZHVsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUmVzdWx0cyA9IGF3YWl0IGNhdGVnb3J5LnNpdGUuYW1jUmVxdWVzdChib2RpZXMpO1xuICAgICAgICBpZiAoYWRkaXRpb25hbFJlc3VsdHMuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGFkZGl0aW9uYWxSZXN1bHRzLmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBhZGRpdGlvbmFsUmVzdWx0cy52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2U/LmJvZHkgPz8gJycpO1xuICAgICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoYm9keSk7XG5cbiAgICAgICAgICAkKCd0YWJsZS50YWJsZSB0ci5oZWFkfnRyJykuZWFjaCgoX2ksIGVsZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRyb3cgPSAkKGVsZW0pO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gJHJvdy5maW5kKCdkaXYudGl0bGUgYScpO1xuICAgICAgICAgICAgY29uc3QgaHJlZiA9IHRpdGxlRWxlbS5hdHRyKCdocmVmJykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCB0aHJlYWRJZE1hdGNoID0gaHJlZi5tYXRjaCgvdC0oXFxkKykvKTtcbiAgICAgICAgICAgIGlmICghdGhyZWFkSWRNYXRjaD8uWzFdKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHRocmVhZElkID0gTnVtYmVyLnBhcnNlSW50KHRocmVhZElkTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGl0bGVFbGVtLnRleHQoKS50cmltKCk7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9ICRyb3cuZmluZCgnZGl2LmRlc2NyaXB0aW9uJykudGV4dCgpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3RDb3VudCA9IE51bWJlci5wYXJzZUludCgkcm93LmZpbmQoJ3RkLnBvc3RzJykudGV4dCgpLnRyaW0oKSwgMTApIHx8IDA7XG5cbiAgICAgICAgICAgIC8vIOODpuODvOOCtuODvOOBqOaXpeaZguOBruODkeODvOOCuVxuICAgICAgICAgICAgY29uc3QgJHVzZXJFbGVtID0gJHJvdy5maW5kKCd0ZC5zdGFydGVkIHNwYW4ucHJpbnR1c2VyJyk7XG4gICAgICAgICAgICBjb25zdCAkb2RhdGVFbGVtID0gJHJvdy5maW5kKCd0ZC5zdGFydGVkIHNwYW4ub2RhdGUnKTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEJ5ID1cbiAgICAgICAgICAgICAgJHVzZXJFbGVtLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHBhcnNlVXNlcihjYXRlZ29yeS5zaXRlLmNsaWVudCwgJHVzZXJFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0ID1cbiAgICAgICAgICAgICAgJG9kYXRlRWxlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyAocGFyc2VPZGF0ZSgkb2RhdGVFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pID8/IG5ldyBEYXRlKCkpXG4gICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSgpO1xuXG4gICAgICAgICAgICB0aHJlYWRzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBGb3J1bVRocmVhZCh7XG4gICAgICAgICAgICAgICAgc2l0ZTogY2F0ZWdvcnkuc2l0ZSxcbiAgICAgICAgICAgICAgICBpZDogdGhyZWFkSWQsXG4gICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgY3JlYXRlZEJ5LFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICBwb3N0Q291bnQsXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVRocmVhZENvbGxlY3Rpb24oY2F0ZWdvcnkuc2l0ZSwgdGhyZWFkcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSB0aHJlYWRzOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgrnjg6zjg4Pjg4lJROOBi+OCieWNmOS4gOOBruOCueODrOODg+ODieOCkuWPluW+l1xuICAgKiBAcGFyYW0gc2l0ZSAtIOOCteOCpOODiFxuICAgKiBAcGFyYW0gdGhyZWFkSWQgLSDjgrnjg6zjg4Pjg4lJRFxuICAgKi9cbiAgc3RhdGljIGZyb21JZChzaXRlOiBTaXRlLCB0aHJlYWRJZDogbnVtYmVyKTogV2lraWRvdFJlc3VsdEFzeW5jPEZvcnVtVGhyZWFkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRm9ydW1UaHJlYWRDb2xsZWN0aW9uLmFjcXVpcmVGcm9tVGhyZWFkSWRzKHNpdGUsIFt0aHJlYWRJZF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGhyZWFkID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXRocmVhZCkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcihgVGhyZWFkIG5vdCBmb3VuZDogJHt0aHJlYWRJZH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyZWFkO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCB0aHJlYWQ6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOOCueODrOODg+ODiUlE44GL44KJ44K544Os44OD44OJ44KS5Y+W5b6XXG4gICAqL1xuICBzdGF0aWMgYWNxdWlyZUZyb21UaHJlYWRJZHMoXG4gICAgc2l0ZTogU2l0ZSxcbiAgICB0aHJlYWRJZHM6IG51bWJlcltdLFxuICAgIGNhdGVnb3J5OiBGb3J1bUNhdGVnb3J5IHwgbnVsbCA9IG51bGxcbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPEZvcnVtVGhyZWFkQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNpdGUuYW1jUmVxdWVzdChcbiAgICAgICAgICB0aHJlYWRJZHMubWFwKCh0aHJlYWRJZCkgPT4gKHtcbiAgICAgICAgICAgIHQ6IHRocmVhZElkLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2ZvcnVtL0ZvcnVtVmlld1RocmVhZE1vZHVsZScsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGhyZWFkczogRm9ydW1UaHJlYWRbXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhyZWFkSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbaV07XG4gICAgICAgICAgY29uc3QgdGhyZWFkSWQgPSB0aHJlYWRJZHNbaV07XG4gICAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhdGhyZWFkSWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGJvZHkpO1xuXG4gICAgICAgICAgLy8gUGFyc2UgdGhyZWFkIGluZm8gZnJvbSBwYWdlXG4gICAgICAgICAgY29uc3QgYmNFbGVtID0gJCgnZGl2LmZvcnVtLWJyZWFkY3J1bWJzJyk7XG4gICAgICAgICAgaWYgKGJjRWxlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignQnJlYWRjcnVtYnMgbm90IGZvdW5kJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJjUGFydHMgPSBiY0VsZW0udGV4dCgpLnNwbGl0KCfCuycpO1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gYmNQYXJ0cy5sZW5ndGggPiAwID8gKGJjUGFydHNbYmNQYXJ0cy5sZW5ndGggLSAxXT8udHJpbSgpID8/ICcnKSA6ICcnO1xuXG4gICAgICAgICAgY29uc3QgZGVzY0Jsb2NrRWxlbSA9ICQoJ2Rpdi5kZXNjcmlwdGlvbi1ibG9jaycpO1xuICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZGVzY0Jsb2NrRWxlbS50ZXh0KCkudHJpbSgpO1xuXG4gICAgICAgICAgY29uc3QgcG9zdENvdW50TWF0Y2ggPSAkKCdkaXYuc3RhdGlzdGljcycpLnRleHQoKS5tYXRjaCgvKFxcZCspLyk7XG4gICAgICAgICAgY29uc3QgcG9zdENvdW50ID0gcG9zdENvdW50TWF0Y2g/LlsxXSA/IE51bWJlci5wYXJzZUludChwb3N0Q291bnRNYXRjaFsxXSwgMTApIDogMDtcblxuICAgICAgICAgIHRocmVhZHMucHVzaChcbiAgICAgICAgICAgIG5ldyBGb3J1bVRocmVhZCh7XG4gICAgICAgICAgICAgIHNpdGUsXG4gICAgICAgICAgICAgIGlkOiB0aHJlYWRJZCxcbiAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICBjcmVhdGVkQnk6IG51bGwsXG4gICAgICAgICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgcG9zdENvdW50LFxuICAgICAgICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgRm9ydW1UaHJlYWRDb2xsZWN0aW9uKHNpdGUsIHRocmVhZHMpO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGFjcXVpcmUgdGhyZWFkczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbmltcG9ydCB7IFJlcXVpcmVMb2dpbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9kZWNvcmF0b3JzJztcbmltcG9ydCB7IExvZ2luUmVxdWlyZWRFcnJvciwgTm9FbGVtZW50RXJyb3IsIFVuZXhwZWN0ZWRFcnJvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgU2l0ZSB9IGZyb20gJy4uL3NpdGUnO1xuaW1wb3J0IHsgRm9ydW1UaHJlYWQsIEZvcnVtVGhyZWFkQ29sbGVjdGlvbiB9IGZyb20gJy4vZm9ydW0tdGhyZWFkJztcblxuLyoqXG4gKiDjg5Xjgqnjg7zjg6njg6Djgqvjg4bjgrTjg6rjg4fjg7zjgr9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3J1bUNhdGVnb3J5RGF0YSB7XG4gIHNpdGU6IFNpdGU7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHRocmVhZHNDb3VudDogbnVtYmVyO1xuICBwb3N0c0NvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICog44OV44Kp44O844Op44Og44Kr44OG44K044OqXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3J1bUNhdGVnb3J5IHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB0aHJlYWRzQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IHBvc3RzQ291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdGhyZWFkczogRm9ydW1UaHJlYWRDb2xsZWN0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogRm9ydW1DYXRlZ29yeURhdGEpIHtcbiAgICB0aGlzLnNpdGUgPSBkYXRhLnNpdGU7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy50aXRsZSA9IGRhdGEudGl0bGU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XG4gICAgdGhpcy50aHJlYWRzQ291bnQgPSBkYXRhLnRocmVhZHNDb3VudDtcbiAgICB0aGlzLnBvc3RzQ291bnQgPSBkYXRhLnBvc3RzQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICog44K544Os44OD44OJ5LiA6Kan44KS5Y+W5b6XXG4gICAqL1xuICBnZXRUaHJlYWRzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bVRocmVhZENvbGxlY3Rpb24+IHtcbiAgICBpZiAodGhpcy5fdGhyZWFkcyAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFByb21pc2UucmVzb2x2ZSh0aGlzLl90aHJlYWRzKSwgKGUpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoU3RyaW5nKGUpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRm9ydW1UaHJlYWRDb2xsZWN0aW9uLmFjcXVpcmVBbGxJbkNhdGVnb3J5KHRoaXMpO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGhyZWFkcyA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RocmVhZHM7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IHRocmVhZHM6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44K544Os44OD44OJ5LiA6Kan44KS5YaN5Y+W5b6XXG4gICAqL1xuICByZWxvYWRUaHJlYWRzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bVRocmVhZENvbGxlY3Rpb24+IHtcbiAgICB0aGlzLl90aHJlYWRzID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5nZXRUaHJlYWRzKCk7XG4gIH1cblxuICAvKipcbiAgICog44K544Os44OD44OJ44KS5L2c5oiQXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGNyZWF0ZVRocmVhZChcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgc291cmNlOiBzdHJpbmdcbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPEZvcnVtVGhyZWFkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdFbXB0eScsXG4gICAgICAgICAgICBhY3Rpb246ICdGb3J1bUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ25ld1RocmVhZCcsXG4gICAgICAgICAgICBjYXRlZ29yeV9pZDogdGhpcy5pZCxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgdHlwZW9mIHJlc3BvbnNlLnRocmVhZElkICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignVGhyZWFkIElEIG5vdCBmb3VuZCBpbiByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGhyZWFkSWQgPSByZXNwb25zZS50aHJlYWRJZCBhcyBudW1iZXI7XG4gICAgICAgIGNvbnN0IHRocmVhZFJlc3VsdCA9IGF3YWl0IEZvcnVtVGhyZWFkLmdldEZyb21JZCh0aGlzLnNpdGUsIHRocmVhZElkLCB0aGlzKTtcbiAgICAgICAgaWYgKHRocmVhZFJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgdGhyZWFkUmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJlYWRSZXN1bHQudmFsdWU7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRm9ydW1DYXRlZ29yeShpZD0ke3RoaXMuaWR9LCB0aXRsZT0ke3RoaXMudGl0bGV9KWA7XG4gIH1cbn1cblxuLyoqXG4gKiDjg5Xjgqnjg7zjg6njg6Djgqvjg4bjgrTjg6rjgrPjg6zjgq/jgrfjg6fjg7NcbiAqL1xuZXhwb3J0IGNsYXNzIEZvcnVtQ2F0ZWdvcnlDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8Rm9ydW1DYXRlZ29yeT4ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcblxuICBjb25zdHJ1Y3RvcihzaXRlOiBTaXRlLCBjYXRlZ29yaWVzPzogRm9ydW1DYXRlZ29yeVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNpdGUgPSBzaXRlO1xuICAgIGlmIChjYXRlZ29yaWVzKSB7XG4gICAgICB0aGlzLnB1c2goLi4uY2F0ZWdvcmllcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElE44Gn5qSc57SiXG4gICAqL1xuICBmaW5kQnlJZChpZDogbnVtYmVyKTogRm9ydW1DYXRlZ29yeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgoY2F0ZWdvcnkpID0+IGNhdGVnb3J5LmlkID09PSBpZCk7XG4gIH1cblxuICAvKipcbiAgICog44K144Kk44OI44Gu5YWo44Kr44OG44K044Oq44KS5Y+W5b6XXG4gICAqL1xuICBzdGF0aWMgYWNxdWlyZUFsbChzaXRlOiBTaXRlKTogV2lraWRvdFJlc3VsdEFzeW5jPEZvcnVtQ2F0ZWdvcnlDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnZm9ydW0vRm9ydW1TdGFydE1vZHVsZScsXG4gICAgICAgICAgICBoaWRkZW46ICd0cnVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignRW1wdHkgcmVzcG9uc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoYm9keSk7XG5cbiAgICAgICAgY29uc3QgY2F0ZWdvcmllczogRm9ydW1DYXRlZ29yeVtdID0gW107XG5cbiAgICAgICAgJCgndGFibGUgdHIuaGVhZH50cicpLmVhY2goKF9pLCByb3cpID0+IHtcbiAgICAgICAgICBjb25zdCAkcm93ID0gJChyb3cpO1xuICAgICAgICAgIGNvbnN0IG5hbWVFbGVtID0gJHJvdy5maW5kKCd0ZC5uYW1lJyk7XG4gICAgICAgICAgY29uc3QgbmFtZUxpbmtFbGVtID0gbmFtZUVsZW0uZmluZCgnYScpO1xuICAgICAgICAgIGNvbnN0IGhyZWYgPSBuYW1lTGlua0VsZW0uYXR0cignaHJlZicpID8/ICcnO1xuXG4gICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZE1hdGNoID0gaHJlZi5tYXRjaCgvYy0oXFxkKykvKTtcbiAgICAgICAgICBpZiAoIWNhdGVnb3J5SWRNYXRjaD8uWzFdKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBjYXRlZ29yeUlkID0gTnVtYmVyLnBhcnNlSW50KGNhdGVnb3J5SWRNYXRjaFsxXSwgMTApO1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gbmFtZUxpbmtFbGVtLnRleHQoKS50cmltKCk7XG4gICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBuYW1lRWxlbS5maW5kKCdkaXYuZGVzY3JpcHRpb24nKS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHRocmVhZHNDb3VudCA9IE51bWJlci5wYXJzZUludCgkcm93LmZpbmQoJ3RkLnRocmVhZHMnKS50ZXh0KCkudHJpbSgpLCAxMCkgfHwgMDtcbiAgICAgICAgICBjb25zdCBwb3N0c0NvdW50ID0gTnVtYmVyLnBhcnNlSW50KCRyb3cuZmluZCgndGQucG9zdHMnKS50ZXh0KCkudHJpbSgpLCAxMCkgfHwgMDtcblxuICAgICAgICAgIGNhdGVnb3JpZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBGb3J1bUNhdGVnb3J5KHtcbiAgICAgICAgICAgICAgc2l0ZSxcbiAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgdGhyZWFkc0NvdW50LFxuICAgICAgICAgICAgICBwb3N0c0NvdW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IEZvcnVtQ2F0ZWdvcnlDb2xsZWN0aW9uKHNpdGUsIGNhdGVnb3JpZXMpO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGFjcXVpcmUgY2F0ZWdvcmllczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsCiAgICAiZXhwb3J0IHsgRm9ydW1DYXRlZ29yeSwgRm9ydW1DYXRlZ29yeUNvbGxlY3Rpb24sIHR5cGUgRm9ydW1DYXRlZ29yeURhdGEgfSBmcm9tICcuL2ZvcnVtLWNhdGVnb3J5JztcbmV4cG9ydCB7IEZvcnVtUG9zdCwgRm9ydW1Qb3N0Q29sbGVjdGlvbiwgdHlwZSBGb3J1bVBvc3REYXRhIH0gZnJvbSAnLi9mb3J1bS1wb3N0JztcbmV4cG9ydCB7IEZvcnVtVGhyZWFkLCBGb3J1bVRocmVhZENvbGxlY3Rpb24sIHR5cGUgRm9ydW1UaHJlYWREYXRhIH0gZnJvbSAnLi9mb3J1bS10aHJlYWQnO1xuIiwKICAgICIvLyBDb21tb25cbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1vbi9sb2dnZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tb24vdHlwZXMnO1xuXG4vLyBDb25uZWN0b3JcbmV4cG9ydCAqIGZyb20gJy4vY29ubmVjdG9yJztcblxuLy8gTW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL21vZHVsZSc7XG5cbi8vIFV0aWxcbmV4cG9ydCAqIGZyb20gJy4vdXRpbCc7XG4iLAogICAgImltcG9ydCBreSwgeyB0eXBlIEt5SW5zdGFuY2UgfSBmcm9tICdreSc7XG5pbXBvcnQgcExpbWl0LCB7IHR5cGUgTGltaXRGdW5jdGlvbiB9IGZyb20gJ3AtbGltaXQnO1xuaW1wb3J0IHtcbiAgQU1DSHR0cEVycm9yLFxuICBGb3JiaWRkZW5FcnJvcixcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFJlc3BvbnNlRGF0YUVycm9yLFxuICBVbmV4cGVjdGVkRXJyb3IsXG4gIFdpa2lkb3RFcnJvcixcbiAgV2lraWRvdFN0YXR1c0Vycm9yLFxufSBmcm9tICcuLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYywgd2RFcnJBc3luYywgd2RPa0FzeW5jIH0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7XG4gIHR5cGUgQU1DQ29uZmlnLFxuICBERUZBVUxUX0FNQ19DT05GSUcsXG4gIERFRkFVTFRfSFRUUF9TVEFUVVNfQ09ERSxcbiAgV0lLSURPVF9UT0tFTjcsXG59IGZyb20gJy4vYW1jLWNvbmZpZyc7XG5pbXBvcnQgeyBBTUNIZWFkZXIgfSBmcm9tICcuL2FtYy1oZWFkZXInO1xuaW1wb3J0IHsgdHlwZSBBTUNSZXF1ZXN0Qm9keSwgdHlwZSBBTUNSZXNwb25zZSwgYW1jUmVzcG9uc2VTY2hlbWEgfSBmcm9tICcuL2FtYy10eXBlcyc7XG5cbi8qKlxuICog5qmf5a+G5oOF5aCx44KS44Oe44K544Kv44GZ44KL77yI44Ot44Kw5Ye65Yqb55So77yJXG4gKiBAcGFyYW0gYm9keSAtIOODnuOCueOCr+WvvuixoeOBruODquOCr+OCqOOCueODiOODnOODh+OCo1xuICogQHJldHVybnMg44Oe44K544Kv44GV44KM44Gf44Oc44OH44KjXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXNrU2Vuc2l0aXZlRGF0YShib2R5OiBBTUNSZXF1ZXN0Qm9keSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgbWFza2VkID0geyAuLi5ib2R5IH07XG4gIGNvbnN0IHNlbnNpdGl2ZUtleXMgPSBbJ3Bhc3N3b3JkJywgJ2xvZ2luJywgJ1dJS0lET1RfU0VTU0lPTl9JRCcsICd3aWtpZG90X3Rva2VuNyddO1xuICBmb3IgKGNvbnN0IGtleSBvZiBzZW5zaXRpdmVLZXlzKSB7XG4gICAgaWYgKGtleSBpbiBtYXNrZWQpIHtcbiAgICAgIG1hc2tlZFtrZXldID0gJyoqKk1BU0tFRCoqKic7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXNrZWQ7XG59XG5cbi8qKlxuICog5oyH5pWw44OQ44OD44Kv44Kq44OV6ZaT6ZqU44KS6KiI566X44GZ44KL77yI44K444OD44K/44O85LuY44GN77yJXG4gKiBAcGFyYW0gcmV0cnlDb3VudCAtIOePvuWcqOOBruODquODiOODqeOCpOWbnuaVsO+8iDHjgYvjgonplovlp4vvvIlcbiAqIEBwYXJhbSBiYXNlSW50ZXJ2YWwgLSDln7rmnKzplpPpmpTvvIjjg5/jg6rnp5LvvIlcbiAqIEBwYXJhbSBiYWNrb2ZmRmFjdG9yIC0g44OQ44OD44Kv44Kq44OV5L+C5pWwXG4gKiBAcGFyYW0gbWF4QmFja29mZiAtIOacgOWkp+ODkOODg+OCr+OCquODlemWk+malO+8iOODn+ODquenku+8iVxuICogQHJldHVybnMg6KiI566X44GV44KM44Gf44OQ44OD44Kv44Kq44OV6ZaT6ZqU77yI44Of44Oq56eS77yJXG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZUJhY2tvZmYoXG4gIHJldHJ5Q291bnQ6IG51bWJlcixcbiAgYmFzZUludGVydmFsOiBudW1iZXIsXG4gIGJhY2tvZmZGYWN0b3I6IG51bWJlcixcbiAgbWF4QmFja29mZjogbnVtYmVyXG4pOiBudW1iZXIge1xuICBjb25zdCBiYWNrb2ZmID0gYmFzZUludGVydmFsICogYmFja29mZkZhY3RvciAqKiAocmV0cnlDb3VudCAtIDEpO1xuICBjb25zdCBqaXR0ZXIgPSBNYXRoLnJhbmRvbSgpICogYmFja29mZiAqIDAuMTtcbiAgcmV0dXJuIE1hdGgubWluKGJhY2tvZmYgKyBqaXR0ZXIsIG1heEJhY2tvZmYpO1xufVxuXG4vKipcbiAqIOaMh+WumuaZgumWk+W+heapn+OBmeOCi1xuICogQHBhcmFtIG1zIC0g5b6F5qmf5pmC6ZaT77yI44Of44Oq56eS77yJXG4gKi9cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICogQU1D44Oq44Kv44Ko44K544OI44Kq44OX44K344On44OzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQU1DUmVxdWVzdE9wdGlvbnMge1xuICAvKiog44K144Kk44OI5ZCN77yI44OH44OV44Kp44Or44OIOiB3d3fvvIkgKi9cbiAgc2l0ZU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBTU0zlr77lv5zvvIjnnIHnlaXmmYLjga/oh6rli5XmpJzlh7rvvIkgKi9cbiAgc3NsU3VwcG9ydGVkPzogYm9vbGVhbjtcbiAgLyoqIOOCqOODqeODvOOCkuS+i+WkluOBqOOBl+OBpuaKleOBkuOBmuOBq+e1kOaenOOBq+WQq+OCgeOCi++8iOODh+ODleOCqeODq+ODiDogZmFsc2XvvIkgKi9cbiAgcmV0dXJuRXhjZXB0aW9ucz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQWpheCBNb2R1bGUgQ29ubmVjdG9y44Kv44Op44Kk44Ki44Oz44OIXG4gKiBXaWtpZG90IEFNQ+OCqOODs+ODieODneOCpOODs+ODiOOBuOOBruODquOCr+OCqOOCueODiOOCkueuoeeQhuOBmeOCi1xuICovXG5leHBvcnQgY2xhc3MgQU1DQ2xpZW50IHtcbiAgLyoqIGt544Kk44Oz44K544K/44Oz44K5ICovXG4gIHByaXZhdGUgcmVhZG9ubHkga3k6IEt5SW5zdGFuY2U7XG5cbiAgLyoqIOS4puWIl+ODquOCr+OCqOOCueODiOWItumZkCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxpbWl0OiBMaW1pdEZ1bmN0aW9uO1xuXG4gIC8qKiDjg5jjg4Pjg4Djg7znrqHnkIYgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhlYWRlcjogQU1DSGVhZGVyO1xuXG4gIC8qKiDoqK3lrpogKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogQU1DQ29uZmlnO1xuXG4gIC8qKiDjg5njg7zjgrnjg4njg6HjgqTjg7MgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbjogc3RyaW5nO1xuXG4gIC8qKiBTU0zlr77lv5znirbms4Hjga7jgq3jg6Pjg4Pjgrfjg6UgKi9cbiAgcHJpdmF0ZSBzc2xDYWNoZTogTWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjb25maWcgLSBBTUPoqK3lrprvvIjnnIHnlaXmmYLjga/jg4fjg5Xjgqnjg6vjg4jlgKTvvIlcbiAgICogQHBhcmFtIGRvbWFpbiAtIOODmeODvOOCueODieODoeOCpOODs++8iOODh+ODleOCqeODq+ODiDogd2lraWRvdC5jb23vvIlcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUGFydGlhbDxBTUNDb25maWc+ID0ge30sIGRvbWFpbiA9ICd3aWtpZG90LmNvbScpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uREVGQVVMVF9BTUNfQ09ORklHLCAuLi5jb25maWcgfTtcbiAgICB0aGlzLmRvbWFpbiA9IGRvbWFpbjtcbiAgICB0aGlzLmhlYWRlciA9IG5ldyBBTUNIZWFkZXIoKTtcbiAgICB0aGlzLmxpbWl0ID0gcExpbWl0KHRoaXMuY29uZmlnLnNlbWFwaG9yZUxpbWl0KTtcblxuICAgIHRoaXMua3kgPSBreS5jcmVhdGUoe1xuICAgICAgdGltZW91dDogdGhpcy5jb25maWcudGltZW91dCxcbiAgICAgIHJldHJ5OiAwLCAvLyDmiYvli5Xjgafjg6rjg4jjg6njgqTjgpLliLblvqFcbiAgICB9KTtcblxuICAgIC8vIHd3d+OBr+W4uOOBq1NTTOWvvuW/nFxuICAgIHRoaXMuc3NsQ2FjaGUuc2V0KCd3d3cnLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgrXjgqTjg4jjga7lrZjlnKjjgahTU0zlr77lv5znirbms4HjgpLnorroqo3jgZnjgotcbiAgICogQHBhcmFtIHNpdGVOYW1lIC0g44K144Kk44OI5ZCNXG4gICAqIEByZXR1cm5zIFNTTOWvvuW/nOeKtuazge+8iHRydWU6IEhUVFBT44CBZmFsc2U6IEhUVFDvvIlcbiAgICovXG4gIGNoZWNrU2l0ZVNTTChzaXRlTmFtZTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPGJvb2xlYW4+IHtcbiAgICAvLyDjgq3jg6Pjg4Pjgrfjg6XjgavlrZjlnKjjgZnjgozjgbDjgZ3jgozjgpLov5TjgZlcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnNzbENhY2hlLmdldChzaXRlTmFtZSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gd2RPa0FzeW5jKGNhY2hlZCk7XG4gICAgfVxuXG4gICAgLy8gd3d344Gv5bi444GrU1NM5a++5b+cXG4gICAgaWYgKHNpdGVOYW1lID09PSAnd3d3Jykge1xuICAgICAgcmV0dXJuIHdkT2tBc3luYyh0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwOi8vJHtzaXRlTmFtZX0uJHt0aGlzLmRvbWFpbn1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICByZWRpcmVjdDogJ21hbnVhbCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIDQwNOOBruWgtOWQiOOBr+OCteOCpOODiOOBjOWtmOWcqOOBl+OBquOBhFxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oYFNpdGUgaXMgbm90IGZvdW5kOiAke3NpdGVOYW1lfS4ke3RoaXMuZG9tYWlufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMzAx44Oq44OA44Kk44Os44Kv44OI44GnaHR0cHPjgavlkJHjgYvjgYbloLTlkIjjga9TU0zlr77lv5xcbiAgICAgICAgY29uc3QgaXNTU0wgPVxuICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMzAxICYmIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpPy5zdGFydHNXaXRoKCdodHRwcycpID09PSB0cnVlO1xuXG4gICAgICAgIC8vIOOCreODo+ODg+OCt+ODpeOBq+S/neWtmFxuICAgICAgICB0aGlzLnNzbENhY2hlLnNldChzaXRlTmFtZSwgaXNTU0wpO1xuICAgICAgICByZXR1cm4gaXNTU0w7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFdpa2lkb3RFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGNoZWNrIFNTTCBmb3IgJHtzaXRlTmFtZX06ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFNQ+ODquOCr+OCqOOCueODiOOCkuWun+ihjOOBmeOCi1xuICAgKiBAcGFyYW0gYm9kaWVzIC0g44Oq44Kv44Ko44K544OI44Oc44OH44Kj6YWN5YiXXG4gICAqIEBwYXJhbSBzaXRlTmFtZSAtIOOCteOCpOODiOWQje+8iOecgeeVpeaZguOBr3d3d++8iVxuICAgKiBAcGFyYW0gc3NsU3VwcG9ydGVkIC0gU1NM5a++5b+c77yI55yB55Wl5pmC44Gv6Ieq5YuV5qSc5Ye677yJXG4gICAqIEByZXR1cm5zIOODrOOCueODneODs+OCuemFjeWIl1xuICAgKi9cbiAgcmVxdWVzdChcbiAgICBib2RpZXM6IEFNQ1JlcXVlc3RCb2R5W10sXG4gICAgc2l0ZU5hbWUgPSAnd3d3JyxcbiAgICBzc2xTdXBwb3J0ZWQ/OiBib29sZWFuXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxBTUNSZXNwb25zZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFdpdGhPcHRpb25zKGJvZGllcywge1xuICAgICAgc2l0ZU5hbWUsXG4gICAgICBzc2xTdXBwb3J0ZWQsXG4gICAgICByZXR1cm5FeGNlcHRpb25zOiBmYWxzZSxcbiAgICB9KSBhcyBXaWtpZG90UmVzdWx0QXN5bmM8QU1DUmVzcG9uc2VbXT47XG4gIH1cblxuICAvKipcbiAgICogQU1D44Oq44Kv44Ko44K544OI44KS5a6f6KGM44GZ44KL77yI44Kq44OX44K344On44Oz5oyH5a6a54mI77yJXG4gICAqIEBwYXJhbSBib2RpZXMgLSDjg6rjgq/jgqjjgrnjg4jjg5zjg4fjgqPphY3liJdcbiAgICogQHBhcmFtIG9wdGlvbnMgLSDjg6rjgq/jgqjjgrnjg4jjgqrjg5fjgrfjg6fjg7NcbiAgICogQHJldHVybnMg44Os44K544Od44Oz44K56YWN5YiX77yIcmV0dXJuRXhjZXB0aW9uc+OBjHRydWXjga7loLTlkIjjga/jgqjjg6njg7zjgoLlkKvjgoDvvIlcbiAgICovXG4gIHJlcXVlc3RXaXRoT3B0aW9ucyhcbiAgICBib2RpZXM6IEFNQ1JlcXVlc3RCb2R5W10sXG4gICAgb3B0aW9uczogQU1DUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8KEFNQ1Jlc3BvbnNlIHwgV2lraWRvdEVycm9yKVtdPiB7XG4gICAgY29uc3QgeyBzaXRlTmFtZSA9ICd3d3cnLCBzc2xTdXBwb3J0ZWQsIHJldHVybkV4Y2VwdGlvbnMgPSBmYWxzZSB9ID0gb3B0aW9ucztcblxuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIFNTTOWvvuW/nOeKtuazgeOCkuWPluW+l1xuICAgICAgICBsZXQgc3NsID0gc3NsU3VwcG9ydGVkO1xuICAgICAgICBpZiAoc3NsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzc2xSZXN1bHQgPSBhd2FpdCB0aGlzLmNoZWNrU2l0ZVNTTChzaXRlTmFtZSk7XG4gICAgICAgICAgaWYgKHNzbFJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgICB0aHJvdyBzc2xSZXN1bHQuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNzbCA9IHNzbFJlc3VsdC52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gc3NsID8gJ2h0dHBzJyA6ICdodHRwJztcbiAgICAgICAgY29uc3QgdXJsID0gYCR7cHJvdG9jb2x9Oi8vJHtzaXRlTmFtZX0uJHt0aGlzLmRvbWFpbn0vYWpheC1tb2R1bGUtY29ubmVjdG9yLnBocGA7XG5cbiAgICAgICAgLy8g5Lim5YiX44Gn44Oq44Kv44Ko44K544OI44KS5a6f6KGMXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBib2RpZXMubWFwKChib2R5KSA9PiB0aGlzLmxpbWl0KCgpID0+IHRoaXMuc2luZ2xlUmVxdWVzdChib2R5LCB1cmwpKSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocmV0dXJuRXhjZXB0aW9ucykge1xuICAgICAgICAgIC8vIOOCqOODqeODvOOCguWQq+OCgeOBpuOBmeOBueOBpuOBrue1kOaenOOCkui/lOOBmVxuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgaWYgKHIuaXNPaygpKSB7XG4gICAgICAgICAgICAgIHJldHVybiByLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHIuZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDjgqjjg6njg7zjgYzjgYLjgozjgbDmnIDliJ3jga7jgqjjg6njg7zjgpLjgrnjg63jg7xcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHJlc3VsdHMuZmluZCgocikgPT4gci5pc0VycigpKTtcbiAgICAgICAgaWYgKGZpcnN0RXJyb3I/LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyBmaXJzdEVycm9yLmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyKSA9PiB7XG4gICAgICAgICAgaWYgKHIuaXNPaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gci52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcignVW5leHBlY3RlZCBlcnJvciBpbiByZXN1bHQgcHJvY2Vzc2luZycpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgV2lraWRvdEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBBTUMgcmVxdWVzdCBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOWNmOS4gOODquOCr+OCqOOCueODiOOCkuWun+ihjOOBmeOCi+WGhemDqOODoeOCveODg+ODiVxuICAgKiBAcGFyYW0gYm9keSAtIOODquOCr+OCqOOCueODiOODnOODh+OCo1xuICAgKiBAcGFyYW0gdXJsIC0g44Oq44Kv44Ko44K544OIVVJMXG4gICAqIEByZXR1cm5zIOODrOOCueODneODs+OCuVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaW5nbGVSZXF1ZXN0KFxuICAgIGJvZHk6IEFNQ1JlcXVlc3RCb2R5LFxuICAgIHVybDogc3RyaW5nXG4gICk6IFByb21pc2U8V2lraWRvdFJlc3VsdEFzeW5jPEFNQ1Jlc3BvbnNlPj4ge1xuICAgIGxldCByZXRyeUNvdW50ID0gMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyB3aWtpZG90X3Rva2VuN+OCkui/veWKoFxuICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHsgLi4uYm9keSwgd2lraWRvdF90b2tlbjc6IFdJS0lET1RfVE9LRU43IH07XG5cbiAgICAgICAgLy8gVVJM44Ko44Oz44Kz44O844OJ44GV44KM44Gf44Oc44OH44Kj44KS5L2c5oiQXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXF1ZXN0Qm9keSkpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmt5LnBvc3QodXJsLCB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXIuZ2V0SGVhZGVycygpLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhLnRvU3RyaW5nKCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEpTT07jgajjgZfjgabjg5Hjg7zjgrlcbiAgICAgICAgbGV0IHJlc3BvbnNlRGF0YTogdW5rbm93bjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNwb25zZURhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiB3ZEVyckFzeW5jKFxuICAgICAgICAgICAgbmV3IFJlc3BvbnNlRGF0YUVycm9yKGBBTUMgcmVzcG9uZGVkIHdpdGggbm9uLUpTT04gZGF0YTogJHthd2FpdCByZXNwb25zZS50ZXh0KCl9YClcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gem9k44Gn44OQ44Oq44OH44O844K344On44OzXG4gICAgICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gYW1jUmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJldHVybiB3ZEVyckFzeW5jKFxuICAgICAgICAgICAgbmV3IFJlc3BvbnNlRGF0YUVycm9yKGBJbnZhbGlkIEFNQyByZXNwb25zZSBmb3JtYXQ6ICR7cGFyc2VSZXN1bHQuZXJyb3IubWVzc2FnZX1gKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbWNSZXNwb25zZSA9IHBhcnNlUmVzdWx0LmRhdGE7XG5cbiAgICAgICAgLy8gdHJ5X2FnYWlu44Gu5aC05ZCI44Gv44Oq44OI44Op44KkXG4gICAgICAgIGlmIChhbWNSZXNwb25zZS5zdGF0dXMgPT09ICd0cnlfYWdhaW4nKSB7XG4gICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICAgIGlmIChyZXRyeUNvdW50ID49IHRoaXMuY29uZmlnLnJldHJ5TGltaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZEVyckFzeW5jKG5ldyBXaWtpZG90U3RhdHVzRXJyb3IoJ0FNQyByZXNwb25kZWQgd2l0aCB0cnlfYWdhaW4nLCAndHJ5X2FnYWluJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihcbiAgICAgICAgICAgIHJldHJ5Q291bnQsXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5yZXRyeUludGVydmFsLFxuICAgICAgICAgICAgdGhpcy5jb25maWcuYmFja29mZkZhY3RvcixcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm1heEJhY2tvZmZcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmYpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9fcGVybWlzc2lvbuOBruWgtOWQiOOBr0ZvcmJpZGRlbkVycm9yXG4gICAgICAgIGlmIChhbWNSZXNwb25zZS5zdGF0dXMgPT09ICdub19wZXJtaXNzaW9uJykge1xuICAgICAgICAgIGNvbnN0IHRhcmdldFN0ciA9IGJvZHkubW9kdWxlTmFtZVxuICAgICAgICAgICAgPyBgbW9kdWxlTmFtZTogJHtib2R5Lm1vZHVsZU5hbWV9YFxuICAgICAgICAgICAgOiBib2R5LmFjdGlvblxuICAgICAgICAgICAgICA/IGBhY3Rpb246ICR7Ym9keS5hY3Rpb259LyR7Ym9keS5ldmVudCA/PyAnJ31gXG4gICAgICAgICAgICAgIDogJ3Vua25vd24nO1xuICAgICAgICAgIHJldHVybiB3ZEVyckFzeW5jKFxuICAgICAgICAgICAgbmV3IEZvcmJpZGRlbkVycm9yKFxuICAgICAgICAgICAgICBgWW91ciBhY2NvdW50IGhhcyBubyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb246ICR7dGFyZ2V0U3RyfWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb2vjgafjgarjgYTloLTlkIjjga/jgqjjg6njg7xcbiAgICAgICAgaWYgKGFtY1Jlc3BvbnNlLnN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybiB3ZEVyckFzeW5jKFxuICAgICAgICAgICAgbmV3IFdpa2lkb3RTdGF0dXNFcnJvcihcbiAgICAgICAgICAgICAgYEFNQyByZXNwb25kZWQgd2l0aCBlcnJvciBzdGF0dXM6IFwiJHthbWNSZXNwb25zZS5zdGF0dXN9XCJgLFxuICAgICAgICAgICAgICBhbWNSZXNwb25zZS5zdGF0dXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdkT2tBc3luYyhhbWNSZXNwb25zZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBIVFRQ44Ko44Op44O844Gu5aC05ZCI44Gv44Oq44OI44Op44KkXG4gICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgaWYgKHJldHJ5Q291bnQgPj0gdGhpcy5jb25maWcucmV0cnlMaW1pdCkge1xuICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPVxuICAgICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAncmVzcG9uc2UnIGluIGVycm9yXG4gICAgICAgICAgICAgID8gKChlcnJvciBhcyB7IHJlc3BvbnNlPzogeyBzdGF0dXM/OiBudW1iZXIgfSB9KS5yZXNwb25zZT8uc3RhdHVzID8/XG4gICAgICAgICAgICAgICAgREVGQVVMVF9IVFRQX1NUQVRVU19DT0RFKVxuICAgICAgICAgICAgICA6IERFRkFVTFRfSFRUUF9TVEFUVVNfQ09ERTtcbiAgICAgICAgICByZXR1cm4gd2RFcnJBc3luYyhcbiAgICAgICAgICAgIG5ldyBBTUNIdHRwRXJyb3IoYEFNQyBIVFRQIHJlcXVlc3QgZmFpbGVkOiAke1N0cmluZyhlcnJvcil9YCwgc3RhdHVzQ29kZSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoXG4gICAgICAgICAgcmV0cnlDb3VudCxcbiAgICAgICAgICB0aGlzLmNvbmZpZy5yZXRyeUludGVydmFsLFxuICAgICAgICAgIHRoaXMuY29uZmlnLmJhY2tvZmZGYWN0b3IsXG4gICAgICAgICAgdGhpcy5jb25maWcubWF4QmFja29mZlxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBzbGVlcChiYWNrb2ZmKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBBTUPjg6rjgq/jgqjjgrnjg4jjg5jjg4Pjg4Djg7zjgpLnrqHnkIbjgZnjgovjgq/jg6njgrlcbiAqL1xuZXhwb3J0IGNsYXNzIEFNQ0hlYWRlciB7XG4gIHByaXZhdGUgY29va2llczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgcHJpdmF0ZSBjb250ZW50VHlwZTogc3RyaW5nO1xuICBwcml2YXRlIHVzZXJBZ2VudDogc3RyaW5nO1xuICBwcml2YXRlIHJlZmVyZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQHBhcmFtIG9wdGlvbnMgLSDjg5jjg4Pjg4Djg7zliJ3mnJ/ljJbjgqrjg5fjgrfjg6fjg7NcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiB7IGNvbnRlbnRUeXBlPzogc3RyaW5nOyB1c2VyQWdlbnQ/OiBzdHJpbmc7IHJlZmVyZXI/OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuY29udGVudFR5cGUgPSBvcHRpb25zPy5jb250ZW50VHlwZSA/PyAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04JztcbiAgICB0aGlzLnVzZXJBZ2VudCA9IG9wdGlvbnM/LnVzZXJBZ2VudCA/PyAnV2lraWRvdFRTJztcbiAgICB0aGlzLnJlZmVyZXIgPSBvcHRpb25zPy5yZWZlcmVyID8/ICdodHRwczovL3d3dy53aWtpZG90LmNvbS8nO1xuICAgIHRoaXMuY29va2llcyA9IG5ldyBNYXAoW1snd2lraWRvdF90b2tlbjcnLCAnMTIzNDU2J11dKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb29raWXjgpLoqK3lrprjgZnjgotcbiAgICogQHBhcmFtIG5hbWUgLSBDb29raWXlkI1cbiAgICogQHBhcmFtIHZhbHVlIC0gQ29va2ll5YCkXG4gICAqL1xuICBzZXRDb29raWUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb29raWVzLnNldChuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29va2ll44KS5YmK6Zmk44GZ44KLXG4gICAqIEBwYXJhbSBuYW1lIC0gQ29va2ll5ZCNXG4gICAqL1xuICBkZWxldGVDb29raWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb29raWVzLmRlbGV0ZShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb29raWXjgpLlj5blvpfjgZnjgotcbiAgICogQHBhcmFtIG5hbWUgLSBDb29raWXlkI1cbiAgICogQHJldHVybnMgQ29va2ll5YCk44CB5a2Y5Zyo44GX44Gq44GE5aC05ZCI44GvdW5kZWZpbmVkXG4gICAqL1xuICBnZXRDb29raWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb29raWVzLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIVFRQ44OY44OD44OA44O844Kq44OW44K444Kn44Kv44OI44KS5Y+W5b6X44GZ44KLXG4gICAqIEByZXR1cm5zIOODmOODg+ODgOODvOi+nuabuFxuICAgKi9cbiAgZ2V0SGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBjb29raWVTdHJpbmcgPSBBcnJheS5mcm9tKHRoaXMuY29va2llcy5lbnRyaWVzKCkpXG4gICAgICAubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBgJHtuYW1lfT0ke3ZhbHVlfWApXG4gICAgICAuam9pbignOyAnKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnQ29udGVudC1UeXBlJzogdGhpcy5jb250ZW50VHlwZSxcbiAgICAgICdVc2VyLUFnZW50JzogdGhpcy51c2VyQWdlbnQsXG4gICAgICBSZWZlcmVyOiB0aGlzLnJlZmVyZXIsXG4gICAgICBDb29raWU6IGNvb2tpZVN0cmluZyxcbiAgICB9O1xuICB9XG59XG4iLAogICAgImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG4vKipcbiAqIEFNQ+ODquOCr+OCqOOCueODiOODnOODh+OCo+OBruWApOWei1xuICovXG5leHBvcnQgdHlwZSBBTUNSZXF1ZXN0Qm9keVZhbHVlID1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJcbiAgfCBib29sZWFuXG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHwgQU1DUmVxdWVzdEJvZHlWYWx1ZVtdO1xuXG4vKipcbiAqIEFNQ+ODquOCr+OCqOOCueODiOODnOODh+OCo+OBruWei+Wumue+qVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFNQ1JlcXVlc3RCb2R5IHtcbiAgbW9kdWxlTmFtZT86IHN0cmluZztcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogQU1DUmVxdWVzdEJvZHlWYWx1ZTtcbn1cblxuLyoqXG4gKiBBTUPjg6zjgrnjg53jg7Pjgrnjga7jg5njg7zjgrnjgrnjgq3jg7zjg55cbiAqL1xuY29uc3QgYmFzZVNjaGVtYTogei5ab2RPYmplY3Q8e1xuICBzdGF0dXM6IHouWm9kU3RyaW5nO1xuICBib2R5OiB6LlpvZE9wdGlvbmFsPHouWm9kU3RyaW5nPjtcbiAgbWVzc2FnZTogei5ab2RPcHRpb25hbDx6LlpvZFN0cmluZz47XG59PiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBib2R5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEFNQ+ODrOOCueODneODs+OCueOCueOCreODvOODnlxuICovXG5leHBvcnQgY29uc3QgYW1jUmVzcG9uc2VTY2hlbWE6IHouWm9kVHlwZTx6LmluZmVyPHR5cGVvZiBiYXNlU2NoZW1hPiAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9XG4gIGJhc2VTY2hlbWEucGFzc3Rocm91Z2goKTtcblxuLyoqXG4gKiBBTUPjg6zjgrnjg53jg7PjgrnlnotcbiAqL1xuZXhwb3J0IHR5cGUgQU1DUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBhbWNSZXNwb25zZVNjaGVtYT47XG5cbi8qKlxuICog5oiQ5Yqf44GX44GfQU1D44Os44K544Od44Oz44K5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQU1DU3VjY2Vzc1Jlc3BvbnNlIHtcbiAgc3RhdHVzOiAnb2snO1xuICBib2R5OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKlxuICogQU1D44Os44K544Od44Oz44K544GM5oiQ5Yqf44GL44Gp44GG44GL44KS5Yik5a6a44GZ44KL5Z6L44Ks44O844OJXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBBTUPjg6zjgrnjg53jg7PjgrlcbiAqIEByZXR1cm5zIOaIkOWKn+ODrOOCueODneODs+OCueOBruWgtOWQiHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3VjY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlOiBBTUNSZXNwb25zZSk6IHJlc3BvbnNlIGlzIEFNQ1N1Y2Nlc3NSZXNwb25zZSB7XG4gIHJldHVybiByZXNwb25zZS5zdGF0dXMgPT09ICdvayc7XG59XG4iLAogICAgImV4cG9ydCB7IEFNQ0NsaWVudCwgdHlwZSBBTUNSZXF1ZXN0T3B0aW9ucywgbWFza1NlbnNpdGl2ZURhdGEgfSBmcm9tICcuL2FtYy1jbGllbnQnO1xuZXhwb3J0IHsgdHlwZSBBTUNDb25maWcsIERFRkFVTFRfQU1DX0NPTkZJRyB9IGZyb20gJy4vYW1jLWNvbmZpZyc7XG5leHBvcnQgeyBBTUNIZWFkZXIgfSBmcm9tICcuL2FtYy1oZWFkZXInO1xuZXhwb3J0IHtcbiAgdHlwZSBBTUNSZXF1ZXN0Qm9keSxcbiAgdHlwZSBBTUNSZXNwb25zZSxcbiAgdHlwZSBBTUNTdWNjZXNzUmVzcG9uc2UsXG4gIGFtY1Jlc3BvbnNlU2NoZW1hLFxuICBpc1N1Y2Nlc3NSZXNwb25zZSxcbn0gZnJvbSAnLi9hbWMtdHlwZXMnO1xuZXhwb3J0IHsgbG9naW4sIGxvZ291dCB9IGZyb20gJy4vYXV0aCc7XG4iLAogICAgImltcG9ydCB7IFNlc3Npb25DcmVhdGVFcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jLCB3ZE9rQXN5bmMgfSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBdXRoQ2xpZW50Q29udGV4dCB9IGZyb20gJy4uL21vZHVsZS90eXBlcyc7XG5cbmNvbnN0IExPR0lOX1VSTCA9ICdodHRwczovL3d3dy53aWtpZG90LmNvbS9kZWZhdWx0LS1mbG93L2xvZ2luX19Mb2dpblBvcHVwU2NyZWVuJztcblxuLyoqXG4gKiDjg6bjg7zjgrbjg7zlkI3jgajjg5Hjgrnjg6/jg7zjg4njgadXaWtpZG9044Gr44Ot44Kw44Kk44Oz44GZ44KLXG4gKiBAcGFyYW0gY2xpZW50IC0g44Kv44Op44Kk44Ki44Oz44OI44Kz44Oz44OG44Kt44K544OI77yIQU1DQ2xpZW5044KS5oyB44Gk44Kq44OW44K444Kn44Kv44OI77yJXG4gKiBAcGFyYW0gdXNlcm5hbWUgLSDjg6bjg7zjgrbjg7zlkI1cbiAqIEBwYXJhbSBwYXNzd29yZCAtIOODkeOCueODr+ODvOODiVxuICogQHJldHVybnMg5oiQ5Yqf5pmC44Gvdm9pZOOAgeWkseaVl+aZguOBr1Nlc3Npb25DcmVhdGVFcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9naW4oXG4gIGNsaWVudDogQXV0aENsaWVudENvbnRleHQsXG4gIHVzZXJuYW1lOiBzdHJpbmcsXG4gIHBhc3N3b3JkOiBzdHJpbmdcbik6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgbG9naW46IHVzZXJuYW1lLFxuICAgICAgICBwYXNzd29yZDogcGFzc3dvcmQsXG4gICAgICAgIGFjdGlvbjogJ0xvZ2luMkFjdGlvbicsXG4gICAgICAgIGV2ZW50OiAnbG9naW4nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goTE9HSU5fVVJMLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiBjbGllbnQuYW1jQ2xpZW50LmhlYWRlci5nZXRIZWFkZXJzKCksXG4gICAgICAgIGJvZHk6IGZvcm1EYXRhLnRvU3RyaW5nKCksXG4gICAgICB9KTtcblxuICAgICAgLy8gQ2hlY2sgc3RhdHVzIGNvZGVcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25DcmVhdGVFcnJvcihcbiAgICAgICAgICBgTG9naW4gYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIEhUVFAgc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYm9keSBmb3IgZXJyb3IgbWVzc2FnZVxuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIGlmIChib2R5LmluY2x1ZGVzKCdUaGUgbG9naW4gYW5kIHBhc3N3b3JkIGRvIG5vdCBtYXRjaCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZXNzaW9uQ3JlYXRlRXJyb3IoJ0xvZ2luIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBpbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGNvb2tpZXNcbiAgICAgIGNvbnN0IGNvb2tpZXMgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnU2V0LUNvb2tpZScpO1xuICAgICAgaWYgKCFjb29raWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBTZXNzaW9uQ3JlYXRlRXJyb3IoJ0xvZ2luIGF0dGVtcHQgZmFpbGVkIGR1ZSB0byBtaXNzaW5nIGNvb2tpZXMnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFjdCBXSUtJRE9UX1NFU1NJT05fSUQgZnJvbSBjb29raWVzXG4gICAgICBjb25zdCBzZXNzaW9uSWRNYXRjaCA9IGNvb2tpZXMubWF0Y2goL1dJS0lET1RfU0VTU0lPTl9JRD0oW147XSspLyk7XG4gICAgICBpZiAoIXNlc3Npb25JZE1hdGNoPy5bMV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25DcmVhdGVFcnJvcihcbiAgICAgICAgICAnTG9naW4gYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgV0lLSURPVF9TRVNTSU9OX0lEIGNvb2tpZSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHNlc3Npb24gY29va2llXG4gICAgICBjbGllbnQuYW1jQ2xpZW50LmhlYWRlci5zZXRDb29raWUoJ1dJS0lET1RfU0VTU0lPTl9JRCcsIHNlc3Npb25JZE1hdGNoWzFdKTtcbiAgICB9KSgpLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2Vzc2lvbkNyZWF0ZUVycm9yKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgU2Vzc2lvbkNyZWF0ZUVycm9yKGBMb2dpbiBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICog44Ot44Kw44Ki44Km44OI44GZ44KLXG4gKiBAcGFyYW0gY2xpZW50IC0g44Kv44Op44Kk44Ki44Oz44OI44Kz44Oz44OG44Kt44K544OI77yIQU1DQ2xpZW5044KS5oyB44Gk44Kq44OW44K444Kn44Kv44OI77yJXG4gKiBAcmV0dXJucyDmiJDlip/mmYLjga92b2lkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dvdXQoY2xpZW50OiBBdXRoQ2xpZW50Q29udGV4dCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gIC8vIFRyeSB0byBsb2dvdXQgdmlhIEFNQywgdGhlbiBhbHdheXMgcmVtb3ZlIHNlc3Npb24gY29va2llXG4gIHJldHVybiBjbGllbnQuYW1jQ2xpZW50XG4gICAgLnJlcXVlc3QoW1xuICAgICAge1xuICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICBhY3Rpb246ICdMb2dpbjJBY3Rpb24nLFxuICAgICAgICBldmVudDogJ2xvZ291dCcsXG4gICAgICB9LFxuICAgIF0pXG4gICAgLm1hcCgoKSA9PiB7XG4gICAgICAvLyBMb2dvdXQgc3VjY2VlZGVkLCByZW1vdmUgc2Vzc2lvbiBjb29raWVcbiAgICAgIGNsaWVudC5hbWNDbGllbnQuaGVhZGVyLmRlbGV0ZUNvb2tpZSgnV0lLSURPVF9TRVNTSU9OX0lEJyk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pXG4gICAgLm9yRWxzZSgoKSA9PiB7XG4gICAgICAvLyBFdmVuIGlmIGxvZ291dCByZXF1ZXN0IGZhaWxzLCB3ZSBzdGlsbCB3YW50IHRvIGNsZWFyIHRoZSBzZXNzaW9uIGxvY2FsbHlcbiAgICAgIGNsaWVudC5hbWNDbGllbnQuaGVhZGVyLmRlbGV0ZUNvb2tpZSgnV0lLSURPVF9TRVNTSU9OX0lEJyk7XG4gICAgICByZXR1cm4gd2RPa0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgfSk7XG59XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQge1xuICBGb3JiaWRkZW5FcnJvcixcbiAgTG9naW5SZXF1aXJlZEVycm9yLFxuICBOb0VsZW1lbnRFcnJvcixcbiAgVW5leHBlY3RlZEVycm9yLFxufSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZU9kYXRlLCBwYXJzZVVzZXIgfSBmcm9tICcuLi8uLi91dGlsL3BhcnNlcic7XG5pbXBvcnQgdHlwZSB7IENsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciB9IGZyb20gJy4uL3VzZXInO1xuaW1wb3J0IHR5cGUgeyBVc2VyIH0gZnJvbSAnLi4vdXNlci91c2VyJztcblxuLyoqXG4gKiDjg5fjg6njgqTjg5njg7zjg4jjg6Hjg4Pjgrvjg7zjgrjjg4fjg7zjgr9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcml2YXRlTWVzc2FnZURhdGEge1xuICBjbGllbnQ6IENsaWVudDtcbiAgaWQ6IG51bWJlcjtcbiAgc2VuZGVyOiBBYnN0cmFjdFVzZXI7XG4gIHJlY2lwaWVudDogQWJzdHJhY3RVc2VyO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xufVxuXG4vKipcbiAqIOODl+ODqeOCpOODmeODvOODiOODoeODg+OCu+ODvOOCuFxuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZU1lc3NhZ2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VuZGVyOiBBYnN0cmFjdFVzZXI7XG4gIHB1YmxpYyByZWFkb25seSByZWNpcGllbnQ6IEFic3RyYWN0VXNlcjtcbiAgcHVibGljIHJlYWRvbmx5IHN1YmplY3Q6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGJvZHk6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBQcml2YXRlTWVzc2FnZURhdGEpIHtcbiAgICB0aGlzLmNsaWVudCA9IGRhdGEuY2xpZW50O1xuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgIHRoaXMuc2VuZGVyID0gZGF0YS5zZW5kZXI7XG4gICAgdGhpcy5yZWNpcGllbnQgPSBkYXRhLnJlY2lwaWVudDtcbiAgICB0aGlzLnN1YmplY3QgPSBkYXRhLnN1YmplY3Q7XG4gICAgdGhpcy5ib2R5ID0gZGF0YS5ib2R5O1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZGF0YS5jcmVhdGVkQXQ7XG4gIH1cblxuICAvKipcbiAgICog44Oh44OD44K744O844K4SUTjgYvjgonjg6Hjg4Pjgrvjg7zjgrjjgpLlj5blvpfjgZnjgotcbiAgICogQHBhcmFtIGNsaWVudCAtIOOCr+ODqeOCpOOCouODs+ODiFxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0g44Oh44OD44K744O844K4SURcbiAgICogQHJldHVybnMg44OX44Op44Kk44OZ44O844OI44Oh44OD44K744O844K4XG4gICAqL1xuICBzdGF0aWMgZnJvbUlkKGNsaWVudDogQ2xpZW50LCBtZXNzYWdlSWQ6IG51bWJlcik6IFdpa2lkb3RSZXN1bHRBc3luYzxQcml2YXRlTWVzc2FnZT4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbi5mcm9tSWRzKGNsaWVudCwgW21lc3NhZ2VJZF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKGBNZXNzYWdlIG5vdCBmb3VuZDogJHttZXNzYWdlSWR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEZvcmJpZGRlbkVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgbWVzc2FnZTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44OX44Op44Kk44OZ44O844OI44Oh44OD44K744O844K444KS6YCB5L+h44GZ44KLXG4gICAqIEBwYXJhbSBjbGllbnQgLSDjgq/jg6njgqTjgqLjg7Pjg4hcbiAgICogQHBhcmFtIHJlY2lwaWVudCAtIOWPl+S/oeiAhVxuICAgKiBAcGFyYW0gc3ViamVjdCAtIOS7tuWQjVxuICAgKiBAcGFyYW0gYm9keSAtIOacrOaWh1xuICAgKi9cbiAgc3RhdGljIHNlbmQoXG4gICAgY2xpZW50OiBDbGllbnQsXG4gICAgcmVjaXBpZW50OiBVc2VyLFxuICAgIHN1YmplY3Q6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmdcbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dpblJlc3VsdCA9IGNsaWVudC5yZXF1aXJlTG9naW4oKTtcbiAgICBpZiAobG9naW5SZXN1bHQuaXNFcnIoKSkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlamVjdChsb2dpblJlc3VsdC5lcnJvciksXG4gICAgICAgICgpID0+IG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0xvZ2luIHJlcXVpcmVkIHRvIHNlbmQgbWVzc2FnZScpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5hbWNDbGllbnQucmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlOiBib2R5LFxuICAgICAgICAgICAgc3ViamVjdCxcbiAgICAgICAgICAgIHRvX3VzZXJfaWQ6IHJlY2lwaWVudC5pZCxcbiAgICAgICAgICAgIGFjdGlvbjogJ0Rhc2hib2FyZE1lc3NhZ2VBY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdzZW5kJyxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdFbXB0eScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIHNlbmQgbWVzc2FnZTogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBQcml2YXRlTWVzc2FnZShpZD0ke3RoaXMuaWR9LCBzZW5kZXI9JHt0aGlzLnNlbmRlcn0sIHJlY2lwaWVudD0ke3RoaXMucmVjaXBpZW50fSwgc3ViamVjdD0ke3RoaXMuc3ViamVjdH0pYDtcbiAgfVxufVxuXG4vKipcbiAqIOODl+ODqeOCpOODmeODvOODiOODoeODg+OCu+ODvOOCuOOCs+ODrOOCr+OCt+ODp+ODs1xuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8UHJpdmF0ZU1lc3NhZ2U+IHtcbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogQ2xpZW50LCBtZXNzYWdlcz86IFByaXZhdGVNZXNzYWdlW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIGlmIChtZXNzYWdlcykge1xuICAgICAgdGhpcy5wdXNoKC4uLm1lc3NhZ2VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSUTjgafmpJzntKJcbiAgICovXG4gIGZpbmRCeUlkKGlkOiBudW1iZXIpOiBQcml2YXRlTWVzc2FnZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgobWVzc2FnZSkgPT4gbWVzc2FnZS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOODoeODg+OCu+ODvOOCuElE44Gu44Oq44K544OI44GL44KJ44Oh44OD44K744O844K444KS5Y+W5b6X44GZ44KLXG4gICAqL1xuICBzdGF0aWMgZnJvbUlkcyhcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICBtZXNzYWdlSWRzOiBudW1iZXJbXVxuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8UHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uPiB7XG4gICAgY29uc3QgbG9naW5SZXN1bHQgPSBjbGllbnQucmVxdWlyZUxvZ2luKCk7XG4gICAgaWYgKGxvZ2luUmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgICAgUHJvbWlzZS5yZWplY3QobG9naW5SZXN1bHQuZXJyb3IpLFxuICAgICAgICAoKSA9PiBuZXcgTG9naW5SZXF1aXJlZEVycm9yKCdMb2dpbiByZXF1aXJlZCB0byBnZXQgbWVzc2FnZXMnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBib2RpZXMgPSBtZXNzYWdlSWRzLm1hcCgobWVzc2FnZUlkKSA9PiAoe1xuICAgICAgICAgIGl0ZW06IG1lc3NhZ2VJZCxcbiAgICAgICAgICBtb2R1bGVOYW1lOiAnZGFzaGJvYXJkL21lc3NhZ2VzL0RNVmlld01lc3NhZ2VNb2R1bGUnLFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmFtY0NsaWVudC5yZXF1ZXN0KGJvZGllcyk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzOiBQcml2YXRlTWVzc2FnZVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlSWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbaV07XG4gICAgICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZUlkc1tpXTtcbiAgICAgICAgICBpZiAoIXJlc3BvbnNlIHx8IG1lc3NhZ2VJZCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnN0IGh0bWwgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcblxuICAgICAgICAgIC8vIOODpuODvOOCtuODvOaDheWgseOCkuWPluW+l1xuICAgICAgICAgIGNvbnN0IHByaW50dXNlckVsZW1zID0gJCgnZGl2LnBtZXNzYWdlIGRpdi5oZWFkZXIgc3Bhbi5wcmludHVzZXInKTtcbiAgICAgICAgICBpZiAocHJpbnR1c2VyRWxlbXMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEZvcmJpZGRlbkVycm9yKGBGYWlsZWQgdG8gZ2V0IG1lc3NhZ2U6ICR7bWVzc2FnZUlkfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNlbmRlckVsZW0gPSAkKHByaW50dXNlckVsZW1zWzBdKTtcbiAgICAgICAgICBjb25zdCByZWNpcGllbnRFbGVtID0gJChwcmludHVzZXJFbGVtc1sxXSk7XG5cbiAgICAgICAgICBjb25zdCBzZW5kZXIgPSBwYXJzZVVzZXIoY2xpZW50LCBzZW5kZXJFbGVtKTtcbiAgICAgICAgICBjb25zdCByZWNpcGllbnQgPSBwYXJzZVVzZXIoY2xpZW50LCByZWNpcGllbnRFbGVtKTtcblxuICAgICAgICAgIC8vIOS7tuWQjVxuICAgICAgICAgIGNvbnN0IHN1YmplY3RFbGVtID0gJCgnZGl2LnBtZXNzYWdlIGRpdi5oZWFkZXIgc3Bhbi5zdWJqZWN0Jyk7XG4gICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHN1YmplY3RFbGVtLnRleHQoKS50cmltKCk7XG5cbiAgICAgICAgICAvLyDmnKzmlodcbiAgICAgICAgICBjb25zdCBib2R5RWxlbSA9ICQoJ2Rpdi5wbWVzc2FnZSBkaXYuYm9keScpO1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBib2R5RWxlbS50ZXh0KCkudHJpbSgpO1xuXG4gICAgICAgICAgLy8g5pel5pmCXG4gICAgICAgICAgY29uc3Qgb2RhdGVFbGVtID0gJCgnZGl2LmhlYWRlciBzcGFuLm9kYXRlJyk7XG4gICAgICAgICAgY29uc3QgY3JlYXRlZEF0ID1cbiAgICAgICAgICAgIG9kYXRlRWxlbS5sZW5ndGggPiAwID8gKHBhcnNlT2RhdGUob2RhdGVFbGVtKSA/PyBuZXcgRGF0ZSgwKSkgOiBuZXcgRGF0ZSgwKTtcblxuICAgICAgICAgIG1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICBuZXcgUHJpdmF0ZU1lc3NhZ2Uoe1xuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICAgICAgICAgIHNlbmRlcixcbiAgICAgICAgICAgICAgcmVjaXBpZW50LFxuICAgICAgICAgICAgICBzdWJqZWN0LFxuICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbihjbGllbnQsIG1lc3NhZ2VzKTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRm9yYmlkZGVuRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgbWVzc2FnZXM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOODouOCuOODpeODvOODq+OBi+OCieODoeODg+OCu+ODvOOCuOOCkuWPluW+l+OBmeOCi+WGhemDqOODoeOCveODg+ODiVxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBhY3F1aXJlRnJvbU1vZHVsZShcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICBtb2R1bGVOYW1lOiBzdHJpbmdcbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbj4ge1xuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gY2xpZW50LnJlcXVpcmVMb2dpbigpO1xuICAgIGlmIChsb2dpblJlc3VsdC5pc0VycigpKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAgIFByb21pc2UucmVqZWN0KGxvZ2luUmVzdWx0LmVycm9yKSxcbiAgICAgICAgKCkgPT4gbmV3IExvZ2luUmVxdWlyZWRFcnJvcignTG9naW4gcmVxdWlyZWQgdG8gZ2V0IG1lc3NhZ2VzJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8g44Oa44O844K444Oj44O85Y+W5b6XXG4gICAgICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gYXdhaXQgY2xpZW50LmFtY0NsaWVudC5yZXF1ZXN0KFt7IG1vZHVsZU5hbWUgfV0pO1xuICAgICAgICBpZiAoZmlyc3RSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGZpcnN0UmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RSZXNwb25zZSA9IGZpcnN0UmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIWZpcnN0UmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0VtcHR5IHJlc3BvbnNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEh0bWwgPSBTdHJpbmcoZmlyc3RSZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgJGZpcnN0ID0gY2hlZXJpby5sb2FkKGZpcnN0SHRtbCk7XG5cbiAgICAgICAgLy8g44Oa44O844K45pWw44KS5Y+W5b6XXG4gICAgICAgIGNvbnN0IHBhZ2VyVGFyZ2V0cyA9ICRmaXJzdCgnZGl2LnBhZ2VyIHNwYW4udGFyZ2V0Jyk7XG4gICAgICAgIGxldCBtYXhQYWdlID0gMTtcbiAgICAgICAgaWYgKHBhZ2VyVGFyZ2V0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgY29uc3QgbGFzdFBhZ2VUZXh0ID0gJGZpcnN0KHBhZ2VyVGFyZ2V0c1twYWdlclRhcmdldHMubGVuZ3RoIC0gMl0pXG4gICAgICAgICAgICAudGV4dCgpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICAgIG1heFBhZ2UgPSBOdW1iZXIucGFyc2VJbnQobGFzdFBhZ2VUZXh0LCAxMCkgfHwgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWFqOODmuODvOOCuOOBi+OCieODoeODg+OCu+ODvOOCuElE44KS5Y+W5b6XXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VJZHM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgaWYgKG1heFBhZ2UgPiAxKSB7XG4gICAgICAgICAgY29uc3QgYm9kaWVzID0gW107XG4gICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0gbWF4UGFnZTsgcGFnZSsrKSB7XG4gICAgICAgICAgICBib2RpZXMucHVzaCh7IHBhZ2UsIG1vZHVsZU5hbWUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxSZXN1bHRzID0gYXdhaXQgY2xpZW50LmFtY0NsaWVudC5yZXF1ZXN0KGJvZGllcyk7XG4gICAgICAgICAgaWYgKGFkZGl0aW9uYWxSZXN1bHRzLmlzRXJyKCkpIHtcbiAgICAgICAgICAgIHRocm93IGFkZGl0aW9uYWxSZXN1bHRzLmVycm9yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgYWRkaXRpb25hbFJlc3VsdHMudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBTdHJpbmcocmVzcG9uc2U/LmJvZHkgPz8gJycpO1xuICAgICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcbiAgICAgICAgICAgICQoJ3RyLm1lc3NhZ2UnKS5lYWNoKChfaSwgZWxlbSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhSHJlZiA9ICQoZWxlbSkuYXR0cignZGF0YS1ocmVmJykgPz8gJyc7XG4gICAgICAgICAgICAgIGNvbnN0IGlkTWF0Y2ggPSBkYXRhSHJlZi5tYXRjaCgvXFwvKFxcZCspJC8pO1xuICAgICAgICAgICAgICBpZiAoaWRNYXRjaD8uWzFdKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkcy5wdXNoKE51bWJlci5wYXJzZUludChpZE1hdGNoWzFdLCAxMCkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJGZpcnN0KCd0ci5tZXNzYWdlJykuZWFjaCgoX2ksIGVsZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFIcmVmID0gJGZpcnN0KGVsZW0pLmF0dHIoJ2RhdGEtaHJlZicpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgaWRNYXRjaCA9IGRhdGFIcmVmLm1hdGNoKC9cXC8oXFxkKykkLyk7XG4gICAgICAgICAgICBpZiAoaWRNYXRjaD8uWzFdKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VJZHMucHVzaChOdW1iZXIucGFyc2VJbnQoaWRNYXRjaFsxXSwgMTApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOODoeODg+OCu+ODvOOCuOOCkuWPluW+l1xuICAgICAgICBjb25zdCBtZXNzYWdlc1Jlc3VsdCA9IGF3YWl0IFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbi5mcm9tSWRzKGNsaWVudCwgbWVzc2FnZUlkcyk7XG4gICAgICAgIGlmIChtZXNzYWdlc1Jlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgbWVzc2FnZXNSZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVzc2FnZXNSZXN1bHQudmFsdWU7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEZvcmJpZGRlbkVycm9yIHx8XG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IgfHxcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGFjcXVpcmUgbWVzc2FnZXM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICog5Y+X5L+h566xXG4gKi9cbmV4cG9ydCBjbGFzcyBQcml2YXRlTWVzc2FnZUluYm94IGV4dGVuZHMgUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uIHtcbiAgLyoqXG4gICAqIOWPl+S/oeeuseOBruODoeODg+OCu+ODvOOCuOOCkuOBmeOBueOBpuWPluW+l+OBmeOCi1xuICAgKi9cbiAgc3RhdGljIGFjcXVpcmUoY2xpZW50OiBDbGllbnQpOiBXaWtpZG90UmVzdWx0QXN5bmM8UHJpdmF0ZU1lc3NhZ2VJbmJveD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbi5hY3F1aXJlRnJvbU1vZHVsZShcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgJ2Rhc2hib2FyZC9tZXNzYWdlcy9ETUluYm94TW9kdWxlJ1xuICAgICAgICApO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5ib3ggPSBuZXcgUHJpdmF0ZU1lc3NhZ2VJbmJveChjbGllbnQpO1xuICAgICAgICBpbmJveC5wdXNoKC4uLnJlc3VsdC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBpbmJveDtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRm9yYmlkZGVuRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBhY3F1aXJlIGluYm94OiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOmAgeS/oeeusVxuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZU1lc3NhZ2VTZW50Qm94IGV4dGVuZHMgUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uIHtcbiAgLyoqXG4gICAqIOmAgeS/oeeuseOBruODoeODg+OCu+ODvOOCuOOCkuOBmeOBueOBpuWPluW+l+OBmeOCi1xuICAgKi9cbiAgc3RhdGljIGFjcXVpcmUoY2xpZW50OiBDbGllbnQpOiBXaWtpZG90UmVzdWx0QXN5bmM8UHJpdmF0ZU1lc3NhZ2VTZW50Qm94PiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uLmFjcXVpcmVGcm9tTW9kdWxlKFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAnZGFzaGJvYXJkL21lc3NhZ2VzL0RNU2VudE1vZHVsZSdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbnRCb3ggPSBuZXcgUHJpdmF0ZU1lc3NhZ2VTZW50Qm94KGNsaWVudCk7XG4gICAgICAgIHNlbnRCb3gucHVzaCguLi5yZXN1bHQudmFsdWUpO1xuICAgICAgICByZXR1cm4gc2VudEJveDtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRm9yYmlkZGVuRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBhY3F1aXJlIHNlbnQgYm94OiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQge1xuICBQcml2YXRlTWVzc2FnZSxcbiAgUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uLFxuICBQcml2YXRlTWVzc2FnZUluYm94LFxuICBQcml2YXRlTWVzc2FnZVNlbnRCb3gsXG59IGZyb20gJy4uLy4uL3ByaXZhdGUtbWVzc2FnZSc7XG5pbXBvcnQgdHlwZSB7IFVzZXIgfSBmcm9tICcuLi8uLi91c2VyL3VzZXInO1xuaW1wb3J0IHR5cGUgeyBDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuXG4vKipcbiAqIOODl+ODqeOCpOODmeODvOODiOODoeODg+OCu+ODvOOCuOaTjeS9nOOCouOCr+OCu+OCtVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyDlj5fkv6HnrrHjgpLlj5blvpdcbiAqIGNvbnN0IGluYm94UmVzdWx0ID0gYXdhaXQgY2xpZW50LnByaXZhdGVNZXNzYWdlLmluYm94KCk7XG4gKiBpZiAoIWluYm94UmVzdWx0LmlzT2soKSkge1xuICogICB0aHJvdyBuZXcgRXJyb3IoJ+WPl+S/oeeuseOBruWPluW+l+OBq+WkseaVl+OBl+OBvuOBl+OBnycpO1xuICogfVxuICogY29uc3QgaW5ib3ggPSBpbmJveFJlc3VsdC52YWx1ZTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZU1lc3NhZ2VBY2Nlc3NvciB7XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IENsaWVudDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIOODoeODg+OCu+ODvOOCuElE44GL44KJ44Oh44OD44K744O844K444KS5Y+W5b6X44GZ44KLXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIOODoeODg+OCu+ODvOOCuElEXG4gICAqIEByZXR1cm5zIFJlc3VsdOWei+OBp+ODqeODg+ODl+OBleOCjOOBn+ODoeODg+OCu+ODvOOCuOOCquODluOCuOOCp+OCr+ODiFxuICAgKi9cbiAgZ2V0KGlkOiBudW1iZXIpOiBXaWtpZG90UmVzdWx0QXN5bmM8UHJpdmF0ZU1lc3NhZ2U+IHtcbiAgICByZXR1cm4gUHJpdmF0ZU1lc3NhZ2UuZnJvbUlkKHRoaXMuY2xpZW50LCBpZCk7XG4gIH1cblxuICAvKipcbiAgICog6KSH5pWw44Gu44Oh44OD44K744O844K4SUTjgYvjgonjg6Hjg4Pjgrvjg7zjgrjjgpLlj5blvpfjgZnjgotcbiAgICogQHBhcmFtIGlkcyAtIOODoeODg+OCu+ODvOOCuElE6YWN5YiXXG4gICAqIEByZXR1cm5zIOODoeODg+OCu+ODvOOCuOOCs+ODrOOCr+OCt+ODp+ODs1xuICAgKi9cbiAgZ2V0TWVzc2FnZXMoaWRzOiBudW1iZXJbXSk6IFdpa2lkb3RSZXN1bHRBc3luYzxQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uLmZyb21JZHModGhpcy5jbGllbnQsIGlkcyk7XG4gIH1cblxuICAvKipcbiAgICog5Y+X5L+h566x44Gu44Oh44OD44K744O844K45LiA6Kan44KS5Y+W5b6X44GZ44KLXG4gICAqIEByZXR1cm5zIOWPl+S/oeeusVxuICAgKi9cbiAgaW5ib3goKTogV2lraWRvdFJlc3VsdEFzeW5jPFByaXZhdGVNZXNzYWdlSW5ib3g+IHtcbiAgICByZXR1cm4gUHJpdmF0ZU1lc3NhZ2VJbmJveC5hY3F1aXJlKHRoaXMuY2xpZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDpgIHkv6HnrrHjga7jg6Hjg4Pjgrvjg7zjgrjkuIDopqfjgpLlj5blvpfjgZnjgotcbiAgICogQHJldHVybnMg6YCB5L+h566xXG4gICAqL1xuICBzZW50Qm94KCk6IFdpa2lkb3RSZXN1bHRBc3luYzxQcml2YXRlTWVzc2FnZVNlbnRCb3g+IHtcbiAgICByZXR1cm4gUHJpdmF0ZU1lc3NhZ2VTZW50Qm94LmFjcXVpcmUodGhpcy5jbGllbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOODl+ODqeOCpOODmeODvOODiOODoeODg+OCu+ODvOOCuOOCkumAgeS/oeOBmeOCi1xuICAgKiBAcGFyYW0gcmVjaXBpZW50IC0g5Y+X5L+h6ICFXG4gICAqIEBwYXJhbSBzdWJqZWN0IC0g5Lu25ZCNXG4gICAqIEBwYXJhbSBib2R5IC0g5pys5paHXG4gICAqL1xuICBzZW5kKHJlY2lwaWVudDogVXNlciwgc3ViamVjdDogc3RyaW5nLCBib2R5OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBQcml2YXRlTWVzc2FnZS5zZW5kKHRoaXMuY2xpZW50LCByZWNpcGllbnQsIHN1YmplY3QsIGJvZHkpO1xuICB9XG59XG5cbmV4cG9ydCB7IFByaXZhdGVNZXNzYWdlLCBQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24sIFByaXZhdGVNZXNzYWdlSW5ib3gsIFByaXZhdGVNZXNzYWdlU2VudEJveCB9O1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQge1xuICBGb3J1bUNhdGVnb3J5LFxuICBGb3J1bUNhdGVnb3J5Q29sbGVjdGlvbixcbiAgRm9ydW1Qb3N0LFxuICBGb3J1bVRocmVhZCxcbiAgRm9ydW1UaHJlYWRDb2xsZWN0aW9uLFxufSBmcm9tICcuLi8uLi9mb3J1bSc7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcblxuLyoqXG4gKiDjg5Xjgqnjg7zjg6njg6Dmk43kvZzjgqLjgq/jgrvjgrVcbiAqL1xuZXhwb3J0IGNsYXNzIEZvcnVtQWNjZXNzb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcblxuICBjb25zdHJ1Y3RvcihzaXRlOiBTaXRlKSB7XG4gICAgdGhpcy5zaXRlID0gc2l0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5Xjgqnjg7zjg6njg6Djgqvjg4bjgrTjg6rkuIDopqfjgpLlj5blvpdcbiAgICogQHJldHVybnMg44Kr44OG44K044Oq5LiA6KanXG4gICAqL1xuICBnZXRDYXRlZ29yaWVzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bUNhdGVnb3J5Q29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBGb3J1bUNhdGVnb3J5Q29sbGVjdGlvbi5hY3F1aXJlQWxsKHRoaXMuc2l0ZSk7XG4gIH1cblxuICAvKipcbiAgICog44K544Os44OD44OJ44KS5Y+W5b6XXG4gICAqIEBwYXJhbSB0aHJlYWRJZCAtIOOCueODrOODg+ODiUlEXG4gICAqIEByZXR1cm5zIOOCueODrOODg+ODiVxuICAgKi9cbiAgZ2V0VGhyZWFkKHRocmVhZElkOiBudW1iZXIpOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWQ+IHtcbiAgICByZXR1cm4gRm9ydW1UaHJlYWQuZ2V0RnJvbUlkKHRoaXMuc2l0ZSwgdGhyZWFkSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOikh+aVsOOCueODrOODg+ODieOCkuWPluW+l1xuICAgKiBAcGFyYW0gdGhyZWFkSWRzIC0g44K544Os44OD44OJSUTphY3liJdcbiAgICogQHJldHVybnMg44K544Os44OD44OJ44Kz44Os44Kv44K344On44OzXG4gICAqL1xuICBnZXRUaHJlYWRzKHRocmVhZElkczogbnVtYmVyW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWRDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIEZvcnVtVGhyZWFkQ29sbGVjdGlvbi5hY3F1aXJlRnJvbVRocmVhZElkcyh0aGlzLnNpdGUsIHRocmVhZElkcyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgRm9ydW1DYXRlZ29yeSwgRm9ydW1DYXRlZ29yeUNvbGxlY3Rpb24sIEZvcnVtVGhyZWFkLCBGb3J1bVRocmVhZENvbGxlY3Rpb24sIEZvcnVtUG9zdCB9O1xuIiwKICAgICJpbXBvcnQgeyBSZXF1aXJlTG9naW4gfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBMb2dpblJlcXVpcmVkRXJyb3IsXG4gIFRhcmdldEVycm9yLFxuICBVbmV4cGVjdGVkRXJyb3IsXG4gIFdpa2lkb3RTdGF0dXNFcnJvcixcbn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBRTUNVc2VyLCBRdWlja01vZHVsZSB9IGZyb20gJy4uLy4uLy4uL3V0aWwvcXVpY2stbW9kdWxlJztcbmltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gJy4uLy4uL3VzZXIvdXNlcic7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcbmltcG9ydCB7IFNpdGVBcHBsaWNhdGlvbiB9IGZyb20gJy4uL3NpdGUtYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgU2l0ZU1lbWJlciB9IGZyb20gJy4uL3NpdGUtbWVtYmVyJztcblxuLyoqXG4gKiDjgrXjgqTjg4jjg6Hjg7Pjg5Djg7zmk43kvZzjgqLjgq/jgrvjgrVcbiAqL1xuZXhwb3J0IGNsYXNzIE1lbWJlckFjY2Vzc29yIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG5cbiAgY29uc3RydWN0b3Ioc2l0ZTogU2l0ZSkge1xuICAgIHRoaXMuc2l0ZSA9IHNpdGU7XG4gIH1cblxuICAvKipcbiAgICog5YWo44Oh44Oz44OQ44O844KS5Y+W5b6X44GZ44KLXG4gICAqIEByZXR1cm5zIOODoeODs+ODkOODvOS4gOimp1xuICAgKi9cbiAgZ2V0QWxsKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxTaXRlTWVtYmVyW10+IHtcbiAgICByZXR1cm4gU2l0ZU1lbWJlci5nZXRNZW1iZXJzKHRoaXMuc2l0ZSwgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIOODouODh+ODrOODvOOCv+ODvOS4gOimp+OCkuWPluW+l+OBmeOCi1xuICAgKiBAcmV0dXJucyDjg6Ljg4fjg6zjg7zjgr/jg7zkuIDopqdcbiAgICovXG4gIGdldE1vZGVyYXRvcnMoKTogV2lraWRvdFJlc3VsdEFzeW5jPFNpdGVNZW1iZXJbXT4ge1xuICAgIHJldHVybiBTaXRlTWVtYmVyLmdldE1lbWJlcnModGhpcy5zaXRlLCAnbW9kZXJhdG9ycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIOeuoeeQhuiAheS4gOimp+OCkuWPluW+l+OBmeOCi1xuICAgKiBAcmV0dXJucyDnrqHnkIbogIXkuIDopqdcbiAgICovXG4gIGdldEFkbWlucygpOiBXaWtpZG90UmVzdWx0QXN5bmM8U2l0ZU1lbWJlcltdPiB7XG4gICAgcmV0dXJuIFNpdGVNZW1iZXIuZ2V0TWVtYmVycyh0aGlzLnNpdGUsICdhZG1pbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmnKrlh6bnkIbjga7lj4LliqDnlLPoq4vjgpLlj5blvpfjgZnjgotcbiAgICogQHJldHVybnMg5Y+C5Yqg55Sz6KuL5LiA6KanXG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbnMoKTogV2lraWRvdFJlc3VsdEFzeW5jPFNpdGVBcHBsaWNhdGlvbltdPiB7XG4gICAgcmV0dXJuIFNpdGVBcHBsaWNhdGlvbi5hY3F1aXJlQWxsKHRoaXMuc2l0ZSk7XG4gIH1cblxuICAvKipcbiAgICog44Oh44Oz44OQ44O844KS5qSc57Si44GZ44KLXG4gICAqIEBwYXJhbSBxdWVyeSAtIOaknOe0ouOCr+OCqOODqu+8iOODpuODvOOCtuODvOWQjeOBruS4gOmDqO+8iVxuICAgKiBAcmV0dXJucyDjg57jg4Pjg4HjgZfjgZ/jg6bjg7zjgrbjg7zkuIDopqfvvIhRTUNVc2Vy5b2i5byP77yJXG4gICAqL1xuICBsb29rdXAocXVlcnk6IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzxRTUNVc2VyW10+IHtcbiAgICByZXR1cm4gUXVpY2tNb2R1bGUubWVtYmVyTG9va3VwKHRoaXMuc2l0ZS5pZCwgcXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOODpuODvOOCtuODvOOCkuOCteOCpOODiOOBq+aLm+W+heOBmeOCi1xuICAgKiBAcGFyYW0gdXNlciAtIOaLm+W+heOBmeOCi+ODpuODvOOCtuODvFxuICAgKiBAcGFyYW0gdGV4dCAtIOaLm+W+heODoeODg+OCu+ODvOOCuFxuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICBpbnZpdGUodXNlcjogVXNlciwgdGV4dDogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnTWFuYWdlU2l0ZU1lbWJlcnNoaXBBY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdpbnZpdGVNZW1iZXInLFxuICAgICAgICAgICAgdXNlcl9pZDogdXNlci5pZCxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXaWtpZG90U3RhdHVzRXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXNDb2RlID09PSAnYWxyZWFkeV9pbnZpdGVkJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVGFyZ2V0RXJyb3IoXG4gICAgICAgICAgICAgICAgYFVzZXIgaXMgYWxyZWFkeSBpbnZpdGVkIHRvICR7dGhpcy5zaXRlLnVuaXhOYW1lfTogJHt1c2VyLm5hbWV9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1c0NvZGUgPT09ICdhbHJlYWR5X21lbWJlcicpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFRhcmdldEVycm9yKFxuICAgICAgICAgICAgICAgIGBVc2VyIGlzIGFscmVhZHkgYSBtZW1iZXIgb2YgJHt0aGlzLnNpdGUudW5peE5hbWV9OiAke3VzZXIubmFtZX1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFRhcmdldEVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gaW52aXRlIHVzZXI6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCB7IFNpdGVNZW1iZXIsIFNpdGVBcHBsaWNhdGlvbiB9O1xuIiwKICAgICIvKipcbiAqIFF1aWNrTW9kdWxlIC0gV2lraWRvdOi7vemHj0FQSVxuICpcbiAqIHF1aWNrbW9kdWxlLnBocOOCqOODs+ODieODneOCpOODs+ODiOOCkuS9v+eUqOOBl+OBn+aknOe0ouapn+iDvVxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgTm90Rm91bmRFeGNlcHRpb24sIFVuZXhwZWN0ZWRFcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcblxuLyoqXG4gKiBRdWlja01vZHVsZeODouOCuOODpeODvOODq+WQjVxuICovXG5leHBvcnQgdHlwZSBRdWlja01vZHVsZU5hbWUgPSAnTWVtYmVyTG9va3VwUU1vZHVsZScgfCAnVXNlckxvb2t1cFFNb2R1bGUnIHwgJ1BhZ2VMb29rdXBRTW9kdWxlJztcblxuLyoqXG4gKiBRdWlja01vZHVsZeODpuODvOOCtuODvOaDheWgsVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFFNQ1VzZXIge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUXVpY2tNb2R1bGXjg5rjg7zjgrjmg4XloLFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRTUNQYWdlIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgdW5peE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBRdWlja01vZHVsZeODrOOCueODneODs+OCueOCueOCreODvOODnlxuICovXG5jb25zdCBxdWlja01vZHVsZVVzZXJSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdXNlcnM6IHoudW5pb24oW1xuICAgIHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHVzZXJfaWQ6IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCldKSxcbiAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgKSxcbiAgICB6LmxpdGVyYWwoZmFsc2UpLFxuICBdKSxcbn0pO1xuXG5jb25zdCBxdWlja01vZHVsZVBhZ2VSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcGFnZXM6IHoudW5pb24oW1xuICAgIHouYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHRpdGxlOiB6LnN0cmluZygpLFxuICAgICAgICB1bml4X25hbWU6IHouc3RyaW5nKCksXG4gICAgICB9KVxuICAgICksXG4gICAgei5saXRlcmFsKGZhbHNlKSxcbiAgXSksXG59KTtcblxuLyoqXG4gKiBRdWlja01vZHVsZeOCqOODs+ODieODneOCpOODs+ODiOOBq+ODquOCr+OCqOOCueODiOOCkumAgeS/oVxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0UXVpY2tNb2R1bGUoXG4gIG1vZHVsZU5hbWU6IFF1aWNrTW9kdWxlTmFtZSxcbiAgc2l0ZUlkOiBudW1iZXIsXG4gIHF1ZXJ5OiBzdHJpbmdcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCB1cmwgPSBgaHR0cHM6Ly93d3cud2lraWRvdC5jb20vcXVpY2ttb2R1bGUucGhwP21vZHVsZT0ke21vZHVsZU5hbWV9JnM9JHtzaXRlSWR9JnE9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWA7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0sXG4gIH0pO1xuXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDUwMCkge1xuICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihgU2l0ZSBub3QgZm91bmQ6IHNpdGVJZD0ke3NpdGVJZH1gKTtcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEVycm9yKGBRdWlja01vZHVsZSByZXF1ZXN0IGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG4vKipcbiAqIOOCteOCpOODiOODoeODs+ODkOODvOOCkuaknOe0olxuICogQHBhcmFtIHNpdGVJZCAtIOOCteOCpOODiElEXG4gKiBAcGFyYW0gcXVlcnkgLSDmpJzntKLjgq/jgqjjg6rvvIjjg6bjg7zjgrbjg7zlkI3jga7kuIDpg6jvvIlcbiAqIEByZXR1cm5zIOODnuODg+ODgeOBl+OBn+ODpuODvOOCtuODvOS4gOimp1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVyTG9va3VwKHNpdGVJZDogbnVtYmVyLCBxdWVyeTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPFFNQ1VzZXJbXT4ge1xuICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXF1ZXN0UXVpY2tNb2R1bGUoJ01lbWJlckxvb2t1cFFNb2R1bGUnLCBzaXRlSWQsIHF1ZXJ5KTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHF1aWNrTW9kdWxlVXNlclJlc3BvbnNlU2NoZW1hLnBhcnNlKGRhdGEpO1xuXG4gICAgICBpZiAocGFyc2VkLnVzZXJzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQudXNlcnMubWFwKCh1c2VyKSA9PiAoe1xuICAgICAgICBpZDogdHlwZW9mIHVzZXIudXNlcl9pZCA9PT0gJ3N0cmluZycgPyBOdW1iZXIucGFyc2VJbnQodXNlci51c2VyX2lkLCAxMCkgOiB1c2VyLnVzZXJfaWQsXG4gICAgICAgIG5hbWU6IHVzZXIubmFtZSxcbiAgICAgIH0pKTtcbiAgICB9KSgpLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24pIHJldHVybiBlcnJvcjtcbiAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBNZW1iZXIgbG9va3VwIGZhaWxlZDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBXaWtpZG905YWo5L2T44GL44KJ44Om44O844K244O844KS5qSc57SiXG4gKiBAcGFyYW0gc2l0ZUlkIC0g44K144Kk44OISUTvvIjku7vmhI/jga7jgrXjgqTjg4hJROOBp+WPr++8iVxuICogQHBhcmFtIHF1ZXJ5IC0g5qSc57Si44Kv44Ko44Oq77yI44Om44O844K244O85ZCN44Gu5LiA6YOo77yJXG4gKiBAcmV0dXJucyDjg57jg4Pjg4HjgZfjgZ/jg6bjg7zjgrbjg7zkuIDopqdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJMb29rdXAoc2l0ZUlkOiBudW1iZXIsIHF1ZXJ5OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8UU1DVXNlcltdPiB7XG4gIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcXVlc3RRdWlja01vZHVsZSgnVXNlckxvb2t1cFFNb2R1bGUnLCBzaXRlSWQsIHF1ZXJ5KTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHF1aWNrTW9kdWxlVXNlclJlc3BvbnNlU2NoZW1hLnBhcnNlKGRhdGEpO1xuXG4gICAgICBpZiAocGFyc2VkLnVzZXJzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQudXNlcnMubWFwKCh1c2VyKSA9PiAoe1xuICAgICAgICBpZDogdHlwZW9mIHVzZXIudXNlcl9pZCA9PT0gJ3N0cmluZycgPyBOdW1iZXIucGFyc2VJbnQodXNlci51c2VyX2lkLCAxMCkgOiB1c2VyLnVzZXJfaWQsXG4gICAgICAgIG5hbWU6IHVzZXIubmFtZSxcbiAgICAgIH0pKTtcbiAgICB9KSgpLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24pIHJldHVybiBlcnJvcjtcbiAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBVc2VyIGxvb2t1cCBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICog44K144Kk44OI5YaF44Gu44Oa44O844K444KS5qSc57SiXG4gKiBAcGFyYW0gc2l0ZUlkIC0g44K144Kk44OISURcbiAqIEBwYXJhbSBxdWVyeSAtIOaknOe0ouOCr+OCqOODqu+8iOODmuODvOOCuOWQjeOBruS4gOmDqO+8iVxuICogQHJldHVybnMg44Oe44OD44OB44GX44Gf44Oa44O844K45LiA6KanXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWdlTG9va3VwKHNpdGVJZDogbnVtYmVyLCBxdWVyeTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPFFNQ1BhZ2VbXT4ge1xuICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXF1ZXN0UXVpY2tNb2R1bGUoJ1BhZ2VMb29rdXBRTW9kdWxlJywgc2l0ZUlkLCBxdWVyeSk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBxdWlja01vZHVsZVBhZ2VSZXNwb25zZVNjaGVtYS5wYXJzZShkYXRhKTtcblxuICAgICAgaWYgKHBhcnNlZC5wYWdlcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkLnBhZ2VzLm1hcCgocGFnZSkgPT4gKHtcbiAgICAgICAgdGl0bGU6IHBhZ2UudGl0bGUsXG4gICAgICAgIHVuaXhOYW1lOiBwYWdlLnVuaXhfbmFtZSxcbiAgICAgIH0pKTtcbiAgICB9KSgpLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24pIHJldHVybiBlcnJvcjtcbiAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBQYWdlIGxvb2t1cCBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogUXVpY2tNb2R1bGUgQVBJ77yI5b6M5pa55LqS5o+b5oCn44Gu44Gf44KB57at5oyB77yJXG4gKiBAZGVwcmVjYXRlZCDku6Pjgo/jgorjgavlgIvliKXjga7plqLmlbDvvIhtZW1iZXJMb29rdXAsIHVzZXJMb29rdXAsIHBhZ2VMb29rdXDvvInjgpLkvb/nlKjjgZfjgabjgY/jgaDjgZXjgYRcbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrTW9kdWxlOiB7XG4gIG1lbWJlckxvb2t1cDogdHlwZW9mIG1lbWJlckxvb2t1cDtcbiAgdXNlckxvb2t1cDogdHlwZW9mIHVzZXJMb29rdXA7XG4gIHBhZ2VMb29rdXA6IHR5cGVvZiBwYWdlTG9va3VwO1xufSA9IHtcbiAgbWVtYmVyTG9va3VwOiBtZW1iZXJMb29rdXAsXG4gIHVzZXJMb29rdXA6IHVzZXJMb29rdXAsXG4gIHBhZ2VMb29rdXA6IHBhZ2VMb29rdXAsXG59O1xuIiwKICAgICJpbXBvcnQgKiBhcyBjaGVlcmlvIGZyb20gJ2NoZWVyaW8nO1xuaW1wb3J0IHsgUmVxdWlyZUxvZ2luIH0gZnJvbSAnLi4vLi4vY29tbW9uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgRm9yYmlkZGVuRXJyb3IsXG4gIExvZ2luUmVxdWlyZWRFcnJvcixcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFVuZXhwZWN0ZWRFcnJvcixcbiAgV2lraWRvdFN0YXR1c0Vycm9yLFxufSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZVVzZXIgfSBmcm9tICcuLi8uLi91dGlsL3BhcnNlcic7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciB9IGZyb20gJy4uL3VzZXInO1xuaW1wb3J0IHR5cGUgeyBTaXRlIH0gZnJvbSAnLi9zaXRlJztcblxuLyoqXG4gKiDjgrXjgqTjg4jlj4LliqDnlLPoq4vjg4fjg7zjgr9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaXRlQXBwbGljYXRpb25EYXRhIHtcbiAgc2l0ZTogU2l0ZTtcbiAgdXNlcjogQWJzdHJhY3RVc2VyO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICog44K144Kk44OI5Y+C5Yqg55Sz6KuLXG4gKi9cbmV4cG9ydCBjbGFzcyBTaXRlQXBwbGljYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXI6IEFic3RyYWN0VXNlcjtcbiAgcHVibGljIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTaXRlQXBwbGljYXRpb25EYXRhKSB7XG4gICAgdGhpcy5zaXRlID0gZGF0YS5zaXRlO1xuICAgIHRoaXMudXNlciA9IGRhdGEudXNlcjtcbiAgICB0aGlzLnRleHQgPSBkYXRhLnRleHQ7XG4gIH1cblxuICAvKipcbiAgICog5pyq5Yem55CG44Gu5Y+C5Yqg55Sz6KuL44KS44GZ44G544Gm5Y+W5b6X44GZ44KLXG4gICAqIEBwYXJhbSBzaXRlIC0g5a++6LGh44K144Kk44OIXG4gICAqL1xuICBzdGF0aWMgYWNxdWlyZUFsbChzaXRlOiBTaXRlKTogV2lraWRvdFJlc3VsdEFzeW5jPFNpdGVBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgbG9naW5SZXN1bHQgPSBzaXRlLmNsaWVudC5yZXF1aXJlTG9naW4oKTtcbiAgICBpZiAobG9naW5SZXN1bHQuaXNFcnIoKSkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlamVjdChsb2dpblJlc3VsdC5lcnJvciksXG4gICAgICAgICgpID0+IG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0xvZ2luIHJlcXVpcmVkIHRvIGdldCBhcHBsaWNhdGlvbnMnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHsgbW9kdWxlTmFtZTogJ21hbmFnZXNpdGUvTWFuYWdlU2l0ZU1lbWJlcnNBcHBsaWNhdGlvbnNNb2R1bGUnIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcignRW1wdHkgcmVzcG9uc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0bWwgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJyk7XG5cbiAgICAgICAgLy8g5qip6ZmQ44OB44Kn44OD44KvXG4gICAgICAgIGlmIChodG1sLmluY2x1ZGVzKCdXSUtJRE9ULnBhZ2UubGlzdGVuZXJzLmxvZ2luQ2xpY2soZXZlbnQpJykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRm9yYmlkZGVuRXJyb3IoJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRoaXMgcGFnZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcbiAgICAgICAgY29uc3QgYXBwbGljYXRpb25zOiBTaXRlQXBwbGljYXRpb25bXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHVzZXJFbGVtZW50cyA9ICQoJ2gzIHNwYW4ucHJpbnR1c2VyJykudG9BcnJheSgpO1xuICAgICAgICBjb25zdCB0ZXh0V3JhcHBlckVsZW1lbnRzID0gJCgndGFibGUnKS50b0FycmF5KCk7XG5cbiAgICAgICAgaWYgKHVzZXJFbGVtZW50cy5sZW5ndGggIT09IHRleHRXcmFwcGVyRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcihcbiAgICAgICAgICAgICdMZW5ndGggb2YgdXNlcl9lbGVtZW50cyBhbmQgdGV4dF93cmFwcGVyX2VsZW1lbnRzIGFyZSBkaWZmZXJlbnQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXNlckVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdXNlckVsZW1lbnQgPSB1c2VyRWxlbWVudHNbaV07XG4gICAgICAgICAgY29uc3QgdGV4dFdyYXBwZXJFbGVtZW50ID0gdGV4dFdyYXBwZXJFbGVtZW50c1tpXTtcblxuICAgICAgICAgIGlmICghdXNlckVsZW1lbnQgfHwgIXRleHRXcmFwcGVyRWxlbWVudCkgY29udGludWU7XG5cbiAgICAgICAgICBjb25zdCB1c2VyID0gcGFyc2VVc2VyKHNpdGUuY2xpZW50LCAkKHVzZXJFbGVtZW50KSk7XG4gICAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSAkKHRleHRXcmFwcGVyRWxlbWVudCkuZmluZCgndGQnKS5lcSgxKTtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gdGV4dEVsZW1lbnQudGV4dCgpLnRyaW0oKTtcblxuICAgICAgICAgIGFwcGxpY2F0aW9ucy5wdXNoKG5ldyBTaXRlQXBwbGljYXRpb24oeyBzaXRlLCB1c2VyLCB0ZXh0IH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcHBsaWNhdGlvbnM7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEZvcmJpZGRlbkVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IGFwcGxpY2F0aW9uczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog55Sz6KuL44KS5Yem55CG44GZ44KL5YaF6YOo44Oh44K944OD44OJXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIHByaXZhdGUgcHJvY2VzcyhhY3Rpb246ICdhY2NlcHQnIHwgJ2RlY2xpbmUnKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnTWFuYWdlU2l0ZU1lbWJlcnNoaXBBY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdhY2NlcHRBcHBsaWNhdGlvbicsXG4gICAgICAgICAgICB1c2VyX2lkOiB0aGlzLnVzZXIuaWQsXG4gICAgICAgICAgICB0ZXh0OiBgeW91ciBhcHBsaWNhdGlvbiBoYXMgYmVlbiAke2FjdGlvbn1lZGAsXG4gICAgICAgICAgICB0eXBlOiBhY3Rpb24sXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXaWtpZG90U3RhdHVzRXJyb3IgJiYgZXJyb3Iuc3RhdHVzQ29kZSA9PT0gJ25vX2FwcGxpY2F0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKGBBcHBsaWNhdGlvbiBub3QgZm91bmQ6ICR7dGhpcy51c2VyLm5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXhjZXB0aW9uIHx8IGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gcHJvY2VzcyBhcHBsaWNhdGlvbjogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5Y+C5Yqg55Sz6KuL44KS5om/6KqN44GZ44KLXG4gICAqL1xuICBhY2NlcHQoKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCdhY2NlcHQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlj4LliqDnlLPoq4vjgpLmi5LlkKbjgZnjgotcbiAgICovXG4gIGRlY2xpbmUoKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCdkZWNsaW5lJyk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgU2l0ZUFwcGxpY2F0aW9uKHVzZXI9JHt0aGlzLnVzZXIubmFtZX0sIHNpdGU9JHt0aGlzLnNpdGUudW5peE5hbWV9LCB0ZXh0PSR7dGhpcy50ZXh0fSlgO1xuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgeyBSZXF1aXJlTG9naW4gfSBmcm9tICcuLi8uLi9jb21tb24vZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBMb2dpblJlcXVpcmVkRXJyb3IsXG4gIFRhcmdldEVycm9yLFxuICBVbmV4cGVjdGVkRXJyb3IsXG4gIFdpa2lkb3RTdGF0dXNFcnJvcixcbn0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VPZGF0ZSwgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIgfSBmcm9tICcuLi91c2VyJztcbmltcG9ydCB0eXBlIHsgU2l0ZSB9IGZyb20gJy4vc2l0ZSc7XG5cbi8qKlxuICog44K144Kk44OI44Oh44Oz44OQ44O844OH44O844K/XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2l0ZU1lbWJlckRhdGEge1xuICBzaXRlOiBTaXRlO1xuICB1c2VyOiBBYnN0cmFjdFVzZXI7XG4gIGpvaW5lZEF0OiBEYXRlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiDjgrXjgqTjg4jjg6Hjg7Pjg5Djg7xcbiAqL1xuZXhwb3J0IGNsYXNzIFNpdGVNZW1iZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXI6IEFic3RyYWN0VXNlcjtcbiAgcHVibGljIHJlYWRvbmx5IGpvaW5lZEF0OiBEYXRlIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTaXRlTWVtYmVyRGF0YSkge1xuICAgIHRoaXMuc2l0ZSA9IGRhdGEuc2l0ZTtcbiAgICB0aGlzLnVzZXIgPSBkYXRhLnVzZXI7XG4gICAgdGhpcy5qb2luZWRBdCA9IGRhdGEuam9pbmVkQXQ7XG4gIH1cblxuICAvKipcbiAgICogSFRNTOOBi+OCieODoeODs+ODkOODvOaDheWgseOCkuODkeODvOOCueOBmeOCi1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2Uoc2l0ZTogU2l0ZSwgaHRtbDogc3RyaW5nKTogU2l0ZU1lbWJlcltdIHtcbiAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpO1xuICAgIGNvbnN0IG1lbWJlcnM6IFNpdGVNZW1iZXJbXSA9IFtdO1xuXG4gICAgJCgndGFibGUgdHInKS5lYWNoKChfaSwgcm93KSA9PiB7XG4gICAgICBjb25zdCB0ZHMgPSAkKHJvdykuZmluZCgndGQnKTtcbiAgICAgIGNvbnN0IHVzZXJFbGVtID0gJCh0ZHNbMF0pLmZpbmQoJy5wcmludHVzZXInKTtcblxuICAgICAgaWYgKHVzZXJFbGVtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXIgPSBwYXJzZVVzZXIoc2l0ZS5jbGllbnQsIHVzZXJFbGVtKTtcblxuICAgICAgLy8gMuOBpOebruOBrnRk44GM44GC44KM44Gw5Yqg5YWl5pel5pmCXG4gICAgICBsZXQgam9pbmVkQXQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmICh0ZHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgY29uc3Qgb2RhdGVFbGVtID0gJCh0ZHNbMV0pLmZpbmQoJy5vZGF0ZScpO1xuICAgICAgICBpZiAob2RhdGVFbGVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBqb2luZWRBdCA9IHBhcnNlT2RhdGUob2RhdGVFbGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtZW1iZXJzLnB1c2gobmV3IFNpdGVNZW1iZXIoeyBzaXRlLCB1c2VyLCBqb2luZWRBdCB9KSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVtYmVycztcbiAgfVxuXG4gIC8qKlxuICAgKiDjgrXjgqTjg4jjg6Hjg7Pjg5Djg7zkuIDopqfjgpLlj5blvpfjgZnjgotcbiAgICogQHBhcmFtIHNpdGUgLSDlr77osaHjgrXjgqTjg4hcbiAgICogQHBhcmFtIGdyb3VwIC0g44Kw44Or44O844OX77yIXCJhZG1pbnNcIiwgXCJtb2RlcmF0b3JzXCIsIOOBvuOBn+OBr+epuuaWh+Wtl+OBp+WFqOODoeODs+ODkOODvO+8iVxuICAgKi9cbiAgc3RhdGljIGdldE1lbWJlcnMoXG4gICAgc2l0ZTogU2l0ZSxcbiAgICBncm91cDogJ2FkbWlucycgfCAnbW9kZXJhdG9ycycgfCAnJyA9ICcnXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxTaXRlTWVtYmVyW10+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzOiBTaXRlTWVtYmVyW10gPSBbXTtcblxuICAgICAgICAvLyDmnIDliJ3jga7jg5rjg7zjgrjjgpLlj5blvpdcbiAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSBhd2FpdCBzaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdtZW1iZXJzaGlwL01lbWJlcnNMaXN0TW9kdWxlJyxcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICBncm91cCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoZmlyc3RSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGZpcnN0UmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RSZXNwb25zZSA9IGZpcnN0UmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIWZpcnN0UmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RIdG1sID0gU3RyaW5nKGZpcnN0UmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgIG1lbWJlcnMucHVzaCguLi5TaXRlTWVtYmVyLnBhcnNlKHNpdGUsIGZpcnN0SHRtbCkpO1xuXG4gICAgICAgIC8vIOODmuODvOOCuOODo+ODvOOCkueiuuiqjVxuICAgICAgICBjb25zdCAkZmlyc3QgPSBjaGVlcmlvLmxvYWQoZmlyc3RIdG1sKTtcbiAgICAgICAgY29uc3QgcGFnZXJMaW5rcyA9ICRmaXJzdCgnZGl2LnBhZ2VyIGEnKTtcbiAgICAgICAgaWYgKHBhZ2VyTGlua3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHJldHVybiBtZW1iZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFBhZ2VUZXh0ID0gJGZpcnN0KHBhZ2VyTGlua3NbcGFnZXJMaW5rcy5sZW5ndGggLSAyXSlcbiAgICAgICAgICAudGV4dCgpXG4gICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgY29uc3QgbGFzdFBhZ2UgPSBOdW1iZXIucGFyc2VJbnQobGFzdFBhZ2VUZXh0LCAxMCkgfHwgMTtcbiAgICAgICAgaWYgKGxhc3RQYWdlIDw9IDEpIHtcbiAgICAgICAgICByZXR1cm4gbWVtYmVycztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOaui+OCiuOBruODmuODvOOCuOOCkuWPluW+l1xuICAgICAgICBjb25zdCBib2RpZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gbGFzdFBhZ2U7IHBhZ2UrKykge1xuICAgICAgICAgIGJvZGllcy5wdXNoKHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdtZW1iZXJzaGlwL01lbWJlcnNMaXN0TW9kdWxlJyxcbiAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICBncm91cCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxSZXN1bHRzID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KGJvZGllcyk7XG4gICAgICAgIGlmIChhZGRpdGlvbmFsUmVzdWx0cy5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgYWRkaXRpb25hbFJlc3VsdHMuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIGFkZGl0aW9uYWxSZXN1bHRzLnZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZT8uYm9keSA/PyAnJyk7XG4gICAgICAgICAgbWVtYmVycy5wdXNoKC4uLlNpdGVNZW1iZXIucGFyc2Uoc2l0ZSwgaHRtbCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lbWJlcnM7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IG1lbWJlcnM6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Kw44Or44O844OX5aSJ5pu044Gu5YaF6YOo44Oh44K944OD44OJXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIHByaXZhdGUgY2hhbmdlR3JvdXAoXG4gICAgZXZlbnQ6ICd0b01vZGVyYXRvcnMnIHwgJ3JlbW92ZU1vZGVyYXRvcicgfCAndG9BZG1pbnMnIHwgJ3JlbW92ZUFkbWluJ1xuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdNYW5hZ2VTaXRlTWVtYmVyc2hpcEFjdGlvbicsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIHVzZXJfaWQ6IHRoaXMudXNlci5pZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXaWtpZG90U3RhdHVzRXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXNDb2RlID09PSAnbm90X2FscmVhZHknKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUYXJnZXRFcnJvcihgVXNlciBpcyBub3QgbW9kZXJhdG9yL2FkbWluOiAke3RoaXMudXNlci5uYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1c0NvZGUgPT09ICdhbHJlYWR5X2FkbWluJyB8fCBlcnJvci5zdGF0dXNDb2RlID09PSAnYWxyZWFkeV9tb2RlcmF0b3InKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUYXJnZXRFcnJvcihcbiAgICAgICAgICAgICAgICBgVXNlciBpcyBhbHJlYWR5ICR7ZXJyb3Iuc3RhdHVzQ29kZS5yZXBsYWNlKCdhbHJlYWR5XycsICcnKX06ICR7dGhpcy51c2VyLm5hbWV9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUYXJnZXRFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIExvZ2luUmVxdWlyZWRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGNoYW5nZSBtZW1iZXIgZ3JvdXA6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOODouODh+ODrOODvOOCv+ODvOOBq+aYh+agvFxuICAgKi9cbiAgdG9Nb2RlcmF0b3IoKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VHcm91cCgndG9Nb2RlcmF0b3JzJyk7XG4gIH1cblxuICAvKipcbiAgICog44Oi44OH44Os44O844K/44O85qip6ZmQ44KS5YmK6ZmkXG4gICAqL1xuICByZW1vdmVNb2RlcmF0b3IoKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VHcm91cCgncmVtb3ZlTW9kZXJhdG9yJyk7XG4gIH1cblxuICAvKipcbiAgICog566h55CG6ICF44Gr5piH5qC8XG4gICAqL1xuICB0b0FkbWluKCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlR3JvdXAoJ3RvQWRtaW5zJyk7XG4gIH1cblxuICAvKipcbiAgICog566h55CG6ICF5qip6ZmQ44KS5YmK6ZmkXG4gICAqL1xuICByZW1vdmVBZG1pbigpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZUdyb3VwKCdyZW1vdmVBZG1pbicpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFNpdGVNZW1iZXIodXNlcj0ke3RoaXMudXNlci5uYW1lfSwgc2l0ZT0ke3RoaXMuc2l0ZS51bml4TmFtZX0pYDtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyBOb0VsZW1lbnRFcnJvciwgVW5leHBlY3RlZEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHsgUGFnZSwgUGFnZUNvbGxlY3Rpb24sIFNlYXJjaFBhZ2VzUXVlcnkgfSBmcm9tICcuLi8uLi9wYWdlJztcbmltcG9ydCB0eXBlIHsgU2l0ZSB9IGZyb20gJy4uL3NpdGUnO1xuXG4vKipcbiAqIOWNmOS4gOODmuODvOOCuOaTjeS9nOOCouOCr+OCu+OCtVxuICovXG5leHBvcnQgY2xhc3MgUGFnZUFjY2Vzc29yIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG5cbiAgY29uc3RydWN0b3Ioc2l0ZTogU2l0ZSkge1xuICAgIHRoaXMuc2l0ZSA9IHNpdGU7XG4gIH1cblxuICAvKipcbiAgICogVU5JWOWQjeOBi+OCieODmuODvOOCuOOCkuWPluW+l+OBmeOCi1xuICAgKiBAcGFyYW0gdW5peE5hbWUgLSDjg5rjg7zjgrjjga5VTklY5ZCN77yI5L6LOiAnc2NwLTE3MyfvvIlcbiAgICogQHJldHVybnMg44Oa44O844K477yI5a2Y5Zyo44GX44Gq44GE5aC05ZCI44GvbnVsbO+8iVxuICAgKi9cbiAgZ2V0KHVuaXhOYW1lOiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZSB8IG51bGw+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBTZWFyY2hQYWdlc1F1ZXJ5KHsgZnVsbG5hbWU6IHVuaXhOYW1lIH0pO1xuICAgICAgICBjb25zdCB1c2VyUGFyc2VyID0gcGFyc2VVc2VyLmJpbmQobnVsbCwgdGhpcy5zaXRlLmNsaWVudCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUGFnZUNvbGxlY3Rpb24uc2VhcmNoUGFnZXModGhpcy5zaXRlLCB1c2VyUGFyc2VyLCBxdWVyeSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQudmFsdWUubGVuZ3RoID4gMCA/IChyZXN1bHQudmFsdWVbMF0gPz8gbnVsbCkgOiBudWxsO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCBwYWdlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjjgpLkvZzmiJDjgZnjgotcbiAgICogQHBhcmFtIGZ1bGxuYW1lIC0g44Oa44O844K444Gu44OV44Or44ON44O844Og77yI5L6LOiAnc2NwLTE3MyfvvIlcbiAgICogQHBhcmFtIG9wdGlvbnMgLSDkvZzmiJDjgqrjg5fjgrfjg6fjg7NcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgY3JlYXRlKFxuICAgIGZ1bGxuYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgICBzb3VyY2U/OiBzdHJpbmc7XG4gICAgICBjb21tZW50Pzogc3RyaW5nO1xuICAgICAgZm9yY2VFZGl0PzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gUGFnZUNvbGxlY3Rpb24uY3JlYXRlT3JFZGl0KHRoaXMuc2l0ZSwgZnVsbG5hbWUsIHtcbiAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlLFxuICAgICAgc291cmNlOiBvcHRpb25zLnNvdXJjZSxcbiAgICAgIGNvbW1lbnQ6IG9wdGlvbnMuY29tbWVudCxcbiAgICAgIGZvcmNlRWRpdDogb3B0aW9ucy5mb3JjZUVkaXQsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFnZSB9O1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IENoZWVyaW8gfSBmcm9tICdjaGVlcmlvJztcbmltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgdHlwZSB7IEFueU5vZGUgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCBwTGltaXQgZnJvbSAncC1saW1pdCc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFJlcXVpcmVMb2dpbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9kZWNvcmF0b3JzJztcbmltcG9ydCB7XG4gIEZvcmJpZGRlbkVycm9yLFxuICBMb2dpblJlcXVpcmVkRXJyb3IsXG4gIE5vRWxlbWVudEVycm9yLFxuICBOb3RGb3VuZEV4Y2VwdGlvbixcbiAgVGFyZ2V0RXhpc3RzRXJyb3IsXG4gIFVuZXhwZWN0ZWRFcnJvcixcbn0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBTUNSZXF1ZXN0Qm9keSB9IGZyb20gJy4uLy4uL2Nvbm5lY3Rvcic7XG5pbXBvcnQgeyBwYXJzZU9kYXRlLCBwYXJzZVVzZXIgfSBmcm9tICcuLi8uLi91dGlsL3BhcnNlcic7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5pbXBvcnQgeyBQYWdlRmlsZUNvbGxlY3Rpb24gfSBmcm9tICcuL3BhZ2UtZmlsZSc7XG5pbXBvcnQgeyBQYWdlTWV0YUNvbGxlY3Rpb24gfSBmcm9tICcuL3BhZ2UtbWV0YSc7XG5pbXBvcnQgeyBQYWdlUmV2aXNpb24sIFBhZ2VSZXZpc2lvbkNvbGxlY3Rpb24gfSBmcm9tICcuL3BhZ2UtcmV2aXNpb24nO1xuaW1wb3J0IHsgUGFnZVNvdXJjZSB9IGZyb20gJy4vcGFnZS1zb3VyY2UnO1xuaW1wb3J0IHsgUGFnZVZvdGUsIFBhZ2VWb3RlQ29sbGVjdGlvbiB9IGZyb20gJy4vcGFnZS12b3RlJztcbmltcG9ydCB7IERFRkFVTFRfTU9EVUxFX0JPRFksIERFRkFVTFRfUEVSX1BBR0UsIFNlYXJjaFBhZ2VzUXVlcnkgfSBmcm9tICcuL3NlYXJjaC1xdWVyeSc7XG5cbi8qKlxuICogTGlzdFBhZ2VzTW9kdWxl44OR44O844K557WQ5p6c44Gu44K544Kt44O844OeXG4gKiDlnovlronlhajmgKfjga7jgZ/jgoHjgatab2TjgpLkvb/nlKjjgZfjgabjg5Hjg7zjgrnntZDmnpzjgpLmpJzoqLxcbiAqL1xuY29uc3QgcGFnZVBhcmFtc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZnVsbG5hbWU6IHoucHJlcHJvY2VzcygodikgPT4gdiA/PyAnJywgei5zdHJpbmcoKSksXG4gIG5hbWU6IHoucHJlcHJvY2VzcygodikgPT4gdiA/PyAnJywgei5zdHJpbmcoKSksXG4gIGNhdGVnb3J5OiB6LnByZXByb2Nlc3MoKHYpID0+IHYgPz8gJycsIHouc3RyaW5nKCkpLFxuICB0aXRsZTogei5wcmVwcm9jZXNzKCh2KSA9PiB2ID8/ICcnLCB6LnN0cmluZygpKSxcbiAgY2hpbGRyZW5fY291bnQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMCksXG4gIGNvbW1lbnRzX2NvdW50OiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICBzaXplOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICByYXRpbmc6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMCksXG4gIHZvdGVzX2NvdW50OiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICByYXRpbmdfcGVyY2VudDogei5jb2VyY2UubnVtYmVyKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICByZXZpc2lvbnNfY291bnQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMCksXG4gIHBhcmVudF9mdWxsbmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIHRhZ3M6IHouYXJyYXkoei5zdHJpbmcoKSkuZGVmYXVsdChbXSksXG4gIGNyZWF0ZWRfYnk6IHouY3VzdG9tPEFic3RyYWN0VXNlcj4oKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgdXBkYXRlZF9ieTogei5jdXN0b208QWJzdHJhY3RVc2VyPigpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgdXBkYXRlZF9hdDogei5kYXRlKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBjb21tZW50ZWRfYnk6IHouY3VzdG9tPEFic3RyYWN0VXNlcj4oKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIGNvbW1lbnRlZF9hdDogei5kYXRlKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxufSk7XG5cbi8qKlxuICog44Oa44O844K444OH44O844K/XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZURhdGEge1xuICBzaXRlOiBTaXRlO1xuICBmdWxsbmFtZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNoaWxkcmVuQ291bnQ6IG51bWJlcjtcbiAgY29tbWVudHNDb3VudDogbnVtYmVyO1xuICBzaXplOiBudW1iZXI7XG4gIHJhdGluZzogbnVtYmVyO1xuICB2b3Rlc0NvdW50OiBudW1iZXI7XG4gIHJhdGluZ1BlcmNlbnQ6IG51bWJlciB8IG51bGw7XG4gIHJldmlzaW9uc0NvdW50OiBudW1iZXI7XG4gIHBhcmVudEZ1bGxuYW1lOiBzdHJpbmcgfCBudWxsO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgY3JlYXRlZEJ5OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHVwZGF0ZWRCeTogQWJzdHJhY3RVc2VyIHwgbnVsbDtcbiAgdXBkYXRlZEF0OiBEYXRlO1xuICBjb21tZW50ZWRCeTogQWJzdHJhY3RVc2VyIHwgbnVsbDtcbiAgY29tbWVudGVkQXQ6IERhdGUgfCBudWxsO1xufVxuXG4vKipcbiAqIFdpa2lkb3Tjg5rjg7zjgrhcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcbiAgcHVibGljIHJlYWRvbmx5IGZ1bGxuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjYXRlZ29yeTogc3RyaW5nO1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgcHVibGljIGNoaWxkcmVuQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIGNvbW1lbnRzQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIHNpemU6IG51bWJlcjtcbiAgcHVibGljIHJhdGluZzogbnVtYmVyO1xuICBwdWJsaWMgdm90ZXNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgcmF0aW5nUGVyY2VudDogbnVtYmVyIHwgbnVsbDtcbiAgcHVibGljIHJldmlzaW9uc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyBwYXJlbnRGdWxsbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIHRhZ3M6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEJ5OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0OiBEYXRlO1xuICBwdWJsaWMgdXBkYXRlZEJ5OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBwdWJsaWMgdXBkYXRlZEF0OiBEYXRlO1xuICBwdWJsaWMgY29tbWVudGVkQnk6IEFic3RyYWN0VXNlciB8IG51bGw7XG4gIHB1YmxpYyBjb21tZW50ZWRBdDogRGF0ZSB8IG51bGw7XG5cbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9zb3VyY2U6IFBhZ2VTb3VyY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcmV2aXNpb25zOiBQYWdlUmV2aXNpb25Db2xsZWN0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3ZvdGVzOiBQYWdlVm90ZUNvbGxlY3Rpb24gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBQYWdlRGF0YSkge1xuICAgIHRoaXMuc2l0ZSA9IGRhdGEuc2l0ZTtcbiAgICB0aGlzLmZ1bGxuYW1lID0gZGF0YS5mdWxsbmFtZTtcbiAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGRhdGEuY2F0ZWdvcnk7XG4gICAgdGhpcy50aXRsZSA9IGRhdGEudGl0bGU7XG4gICAgdGhpcy5jaGlsZHJlbkNvdW50ID0gZGF0YS5jaGlsZHJlbkNvdW50O1xuICAgIHRoaXMuY29tbWVudHNDb3VudCA9IGRhdGEuY29tbWVudHNDb3VudDtcbiAgICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gICAgdGhpcy5yYXRpbmcgPSBkYXRhLnJhdGluZztcbiAgICB0aGlzLnZvdGVzQ291bnQgPSBkYXRhLnZvdGVzQ291bnQ7XG4gICAgdGhpcy5yYXRpbmdQZXJjZW50ID0gZGF0YS5yYXRpbmdQZXJjZW50O1xuICAgIHRoaXMucmV2aXNpb25zQ291bnQgPSBkYXRhLnJldmlzaW9uc0NvdW50O1xuICAgIHRoaXMucGFyZW50RnVsbG5hbWUgPSBkYXRhLnBhcmVudEZ1bGxuYW1lO1xuICAgIHRoaXMudGFncyA9IGRhdGEudGFncztcbiAgICB0aGlzLmNyZWF0ZWRCeSA9IGRhdGEuY3JlYXRlZEJ5O1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZGF0YS5jcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQnkgPSBkYXRhLnVwZGF0ZWRCeTtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IGRhdGEudXBkYXRlZEF0O1xuICAgIHRoaXMuY29tbWVudGVkQnkgPSBkYXRhLmNvbW1lbnRlZEJ5O1xuICAgIHRoaXMuY29tbWVudGVkQXQgPSBkYXRhLmNvbW1lbnRlZEF0O1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuFVSTOOCkuWPluW+l1xuICAgKi9cbiAgZ2V0VXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2l0ZS5nZXRCYXNlVXJsKCl9LyR7dGhpcy5mdWxsbmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuElE44GM5Y+W5b6X5riI44G/44GL44Gp44GG44GLXG4gICAqL1xuICBpc0lkQWNxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lkICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuElE44KS5Y+W5b6XXG4gICAqL1xuICBnZXQgaWQoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuElE44KS6Kit5a6aXG4gICAqL1xuICBzZXQgaWQodmFsdWU6IG51bWJlciB8IG51bGwpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIOOCveODvOOCueOCs+ODvOODieOCkuWPluW+l1xuICAgKi9cbiAgZ2V0IHNvdXJjZSgpOiBQYWdlU291cmNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgr3jg7zjgrnjgrPjg7zjg4njgpLoqK3lrppcbiAgICovXG4gIHNldCBzb3VyY2UodmFsdWU6IFBhZ2VTb3VyY2UgfCBudWxsKSB7XG4gICAgdGhpcy5fc291cmNlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICog44Oq44OT44K444On44Oz5bGl5q2044KS5Y+W5b6XXG4gICAqL1xuICBnZXQgcmV2aXNpb25zKCk6IFBhZ2VSZXZpc2lvbkNvbGxlY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcmV2aXNpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIOODquODk+OCuOODp+ODs+WxpeattOOCkuioreWumlxuICAgKi9cbiAgc2V0IHJldmlzaW9ucyh2YWx1ZTogUGFnZVJldmlzaW9uQ29sbGVjdGlvbiB8IG51bGwpIHtcbiAgICB0aGlzLl9yZXZpc2lvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmipXnpajmg4XloLHjgpLlj5blvpdcbiAgICovXG4gIGdldCB2b3RlcygpOiBQYWdlVm90ZUNvbGxlY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdm90ZXM7XG4gIH1cblxuICAvKipcbiAgICog5oqV56Wo5oOF5aCx44KS6Kit5a6aXG4gICAqL1xuICBzZXQgdm90ZXModmFsdWU6IFBhZ2VWb3RlQ29sbGVjdGlvbiB8IG51bGwpIHtcbiAgICB0aGlzLl92b3RlcyA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIOacgOaWsOODquODk+OCuOODp+ODs+OCkuWPluW+l1xuICAgKi9cbiAgZ2V0IGxhdGVzdFJldmlzaW9uKCk6IFBhZ2VSZXZpc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9yZXZpc2lvbnMgfHwgdGhpcy5fcmV2aXNpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5fcmV2aXNpb25zLnJlZHVjZSgobWF4LCByZXYpID0+IChyZXYucmV2Tm8gPiBtYXgucmV2Tm8gPyByZXYgOiBtYXgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrhJROOCkueiuuS/neOBmeOCi++8iOacquWPluW+l+OBruWgtOWQiOOBr+iHquWLleWPluW+l++8iVxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0g5pON5L2c5ZCN77yI44Ko44Op44O844Oh44OD44K744O844K455So77yJXG4gICAqIEB0aHJvd3MgSUTjga7lj5blvpfjgavlpLHmlZfjgZfjgZ/loLTlkIhcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlSWQob3BlcmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLl9pZCA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUGFnZUNvbGxlY3Rpb24uYWNxdWlyZVBhZ2VJZHModGhpcy5zaXRlLCBbdGhpc10pO1xuICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBhY3F1aXJlIHBhZ2UgSUQgZm9yICR7b3BlcmF0aW9ufTogJHtyZXN1bHQuZXJyb3IubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9pZCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcihgUGFnZSBJRCBhY3F1aXNpdGlvbiBmYWlsZWQgZm9yICR7b3BlcmF0aW9ufWApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K444KS5YmK6Zmk44GZ44KLXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGRlc3Ryb3koKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlSWQgPSBhd2FpdCB0aGlzLmVuc3VyZUlkKCdkZWxldGlvbicpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnV2lraVBhZ2VBY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdkZWxldGVQYWdlJyxcbiAgICAgICAgICAgIHBhZ2VfaWQ6IHBhZ2VJZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdFbXB0eScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBwYWdlOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOOCv+OCsOOCkuS/neWtmOOBmeOCi1xuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICBjb21taXRUYWdzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZUlkID0gYXdhaXQgdGhpcy5lbnN1cmVJZCgnc2F2aW5nIHRhZ3MnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRhZ3M6IHRoaXMudGFncy5qb2luKCcgJyksXG4gICAgICAgICAgICBhY3Rpb246ICdXaWtpUGFnZUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ3NhdmVUYWdzJyxcbiAgICAgICAgICAgIHBhZ2VJZDogcGFnZUlkLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gc2F2ZSB0YWdzOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOimquODmuODvOOCuOOCkuioreWumuOBmeOCi1xuICAgKiBAcGFyYW0gcGFyZW50RnVsbG5hbWUgLSDopqrjg5rjg7zjgrjjga7jg5Xjg6vjg43jg7zjg6DvvIhudWxs44Gn6Kej6Zmk77yJXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIHNldFBhcmVudChwYXJlbnRGdWxsbmFtZTogc3RyaW5nIHwgbnVsbCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZUlkID0gYXdhaXQgdGhpcy5lbnN1cmVJZCgnc2V0dGluZyBwYXJlbnQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ1dpa2lQYWdlQWN0aW9uJyxcbiAgICAgICAgICAgIGV2ZW50OiAnc2V0UGFyZW50UGFnZScsXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgICAgcGFnZUlkOiBTdHJpbmcocGFnZUlkKSxcbiAgICAgICAgICAgIHBhcmVudE5hbWU6IHBhcmVudEZ1bGxuYW1lID8/ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJlbnRGdWxsbmFtZSA9IHBhcmVudEZ1bGxuYW1lO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIHNldCBwYXJlbnQ6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K444Gr5oqV56Wo44GZ44KLXG4gICAqIEBwYXJhbSB2YWx1ZSAtIOaKleelqOWApFxuICAgKiBAcmV0dXJucyDmlrDjgZfjgYTjg6zjg7zjg4bjgqPjg7PjgrBcbiAgICovXG4gIEBSZXF1aXJlTG9naW5cbiAgdm90ZSh2YWx1ZTogbnVtYmVyKTogV2lraWRvdFJlc3VsdEFzeW5jPG51bWJlcj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VJZCA9IGF3YWl0IHRoaXMuZW5zdXJlSWQoJ3ZvdGluZycpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnUmF0ZUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ3JhdGVQYWdlJyxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdFbXB0eScsXG4gICAgICAgICAgICBwYWdlSWQ6IHBhZ2VJZCxcbiAgICAgICAgICAgIHBvaW50czogdmFsdWUsXG4gICAgICAgICAgICBmb3JjZTogJ3llcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ0VtcHR5IHJlc3BvbnNlIGZyb20gdm90ZSByZXF1ZXN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3UmF0aW5nID0gTnVtYmVyLnBhcnNlSW50KFN0cmluZyhyZXNwb25zZS5wb2ludHMgPz8gdGhpcy5yYXRpbmcpLCAxMCk7XG4gICAgICAgIHRoaXMucmF0aW5nID0gbmV3UmF0aW5nO1xuICAgICAgICByZXR1cm4gbmV3UmF0aW5nO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIHZvdGU6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5oqV56Wo44KS44Kt44Oj44Oz44K744Or44GZ44KLXG4gICAqIEByZXR1cm5zIOaWsOOBl+OBhOODrOODvOODhuOCo+ODs+OCsFxuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICBjYW5jZWxWb3RlKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxudW1iZXI+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlSWQgPSBhd2FpdCB0aGlzLmVuc3VyZUlkKCdjYW5jZWxpbmcgdm90ZScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnUmF0ZUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ2NhbmNlbFZvdGUnLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgICAgIHBhZ2VJZDogcGFnZUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEVycm9yKCdFbXB0eSByZXNwb25zZSBmcm9tIGNhbmNlbCB2b3RlIHJlcXVlc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSYXRpbmcgPSBOdW1iZXIucGFyc2VJbnQoU3RyaW5nKHJlc3BvbnNlLnBvaW50cyA/PyB0aGlzLnJhdGluZyksIDEwKTtcbiAgICAgICAgdGhpcy5yYXRpbmcgPSBuZXdSYXRpbmc7XG4gICAgICAgIHJldHVybiBuZXdSYXRpbmc7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gY2FuY2VsIHZvdGU6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K444KS57eo6ZuG44GZ44KLXG4gICAqIEBwYXJhbSBvcHRpb25zIC0g57eo6ZuG44Kq44OX44K344On44OzXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGVkaXQob3B0aW9uczoge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICBjb21tZW50Pzogc3RyaW5nO1xuICAgIGZvcmNlRWRpdD86IGJvb2xlYW47XG4gIH0pOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VJZCA9IGF3YWl0IHRoaXMuZW5zdXJlSWQoJ2VkaXRpbmcnKTtcblxuICAgICAgICAvLyDnj77lnKjjga7jgr3jg7zjgrnjgpLlj5blvpfvvIjmjIflrprjgYzjgarjgYTloLTlkIjvvIlcbiAgICAgICAgbGV0IGN1cnJlbnRTb3VyY2UgPSBvcHRpb25zLnNvdXJjZTtcbiAgICAgICAgaWYgKGN1cnJlbnRTb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nU291cmNlID0gdGhpcy5fc291cmNlO1xuICAgICAgICAgIGlmIChleGlzdGluZ1NvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY3VycmVudFNvdXJjZSA9IGV4aXN0aW5nU291cmNlLndpa2lUZXh0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDjgr3jg7zjgrnjgpLlj5blvpdcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVJlc3VsdCA9IGF3YWl0IFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlU291cmNlcyh0aGlzLnNpdGUsIFt0aGlzXSk7XG4gICAgICAgICAgICBpZiAoc291cmNlUmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgc291cmNlUmVzdWx0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYWNxdWlyZVBhZ2VTb3VyY2Vz5b6M44CBdGhpcy5fc291cmNl44Gr44K744OD44OI44GV44KM44KLXG4gICAgICAgICAgICBjdXJyZW50U291cmNlID0gdGhpcy5fc291cmNlPy53aWtpVGV4dCA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQYWdlQ29sbGVjdGlvbi5jcmVhdGVPckVkaXQodGhpcy5zaXRlLCB0aGlzLmZ1bGxuYW1lLCB7XG4gICAgICAgICAgcGFnZUlkLFxuICAgICAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlID8/IHRoaXMudGl0bGUsXG4gICAgICAgICAgc291cmNlOiBjdXJyZW50U291cmNlLFxuICAgICAgICAgIGNvbW1lbnQ6IG9wdGlvbnMuY29tbWVudCA/PyAnJyxcbiAgICAgICAgICBmb3JjZUVkaXQ6IG9wdGlvbnMuZm9yY2VFZGl0ID8/IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIExvZ2luUmVxdWlyZWRFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEZvcmJpZGRlbkVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZWRpdCBwYWdlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjlkI3jgpLlpInmm7TjgZnjgotcbiAgICogQHBhcmFtIG5ld0Z1bGxuYW1lIC0g5paw44GX44GE44OV44Or44ON44O844OgXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIHJlbmFtZShuZXdGdWxsbmFtZTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlSWQgPSBhd2FpdCB0aGlzLmVuc3VyZUlkKCdyZW5hbWluZycpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnV2lraVBhZ2VBY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdyZW5hbWVQYWdlJyxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdFbXB0eScsXG4gICAgICAgICAgICBwYWdlX2lkOiBwYWdlSWQsXG4gICAgICAgICAgICBuZXdfbmFtZTogbmV3RnVsbG5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyDjg5fjg63jg5Hjg4bjgqPjgpLmm7TmlrDvvIhyZWFkb25seeOBquOBruOBp09iamVjdC5hc3NpZ27jgafvvIlcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7XG4gICAgICAgICAgZnVsbG5hbWU6IG5ld0Z1bGxuYW1lLFxuICAgICAgICAgIGNhdGVnb3J5OiBuZXdGdWxsbmFtZS5pbmNsdWRlcygnOicpID8gbmV3RnVsbG5hbWUuc3BsaXQoJzonKVswXSA6ICdfZGVmYXVsdCcsXG4gICAgICAgICAgbmFtZTogbmV3RnVsbG5hbWUuaW5jbHVkZXMoJzonKSA/IG5ld0Z1bGxuYW1lLnNwbGl0KCc6JylbMV0gOiBuZXdGdWxsbmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gcmVuYW1lIHBhZ2U6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K444Gr5re75LuY44GV44KM44Gf44OV44Kh44Kk44Or5LiA6Kan44KS5Y+W5b6X44GZ44KLXG4gICAqL1xuICBnZXRGaWxlcygpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUZpbGVDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIFBhZ2VGaWxlQ29sbGVjdGlvbi5hY3F1aXJlKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuOOBruODh+OCo+OCueOCq+ODg+OCt+ODp+ODs+OCueODrOODg+ODieOCkuWPluW+l+OBmeOCi1xuICAgKi9cbiAgZ2V0RGlzY3Vzc2lvbigpOiBXaWtpZG90UmVzdWx0QXN5bmM8aW1wb3J0KCcuLi9mb3J1bScpLkZvcnVtVGhyZWFkIHwgbnVsbD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VJZCA9IGF3YWl0IHRoaXMuZW5zdXJlSWQoJ2dldHRpbmcgZGlzY3Vzc2lvbicpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnZm9ydW0vRm9ydW1Db21tZW50c0xpc3RNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodG1sID0gU3RyaW5nKHJlc3BvbnNlLmJvZHkgPz8gJycpO1xuICAgICAgICAvLyDjgrnjg6zjg4Pjg4lJROOCkuaKveWHulxuICAgICAgICBjb25zdCBtYXRjaCA9IGh0bWwubWF0Y2goXG4gICAgICAgICAgL1dJS0lET1RcXC5tb2R1bGVzXFwuRm9ydW1WaWV3VGhyZWFkTW9kdWxlXFwudmFyc1xcLnRocmVhZElkXFxzKj1cXHMqKFxcZCspL1xuICAgICAgICApO1xuICAgICAgICBpZiAoIW1hdGNoPy5bMV0pIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRocmVhZElkID0gTnVtYmVyLnBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG5cbiAgICAgICAgLy8gRm9ydW1UaHJlYWTjgpLlj5blvpdcbiAgICAgICAgY29uc3QgeyBGb3J1bVRocmVhZCB9ID0gYXdhaXQgaW1wb3J0KCcuLi9mb3J1bScpO1xuICAgICAgICBjb25zdCB0aHJlYWRSZXN1bHQgPSBhd2FpdCBGb3J1bVRocmVhZC5nZXRGcm9tSWQodGhpcy5zaXRlLCB0aHJlYWRJZCk7XG4gICAgICAgIGlmICh0aHJlYWRSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHRocmVhZFJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyZWFkUmVzdWx0LnZhbHVlO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCBkaXNjdXNzaW9uOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuOOBruODoeOCv+OCv+OCsOS4gOimp+OCkuWPluW+l+OBmeOCi1xuICAgKiBAcmV0dXJucyDjg6Hjgr/jgr/jgrDjgrPjg6zjgq/jgrfjg6fjg7NcbiAgICovXG4gIGdldE1ldGFzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlTWV0YUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUlkKCdnZXR0aW5nIG1ldGFzJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFBhZ2VNZXRhQ29sbGVjdGlvbi5hY3F1aXJlKHRoaXMpO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgbWV0YXM6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Oh44K/44K/44Kw44KS6Kit5a6a44GZ44KLXG4gICAqIEBwYXJhbSBuYW1lIC0g44Oh44K/44K/44Kw5ZCNXG4gICAqIEBwYXJhbSBjb250ZW50IC0g44Oh44K/44K/44Kw44Gu5YCkXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIHNldE1ldGEobmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlSWQoJ3NldHRpbmcgbWV0YScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQYWdlTWV0YUNvbGxlY3Rpb24uc2V0TWV0YSh0aGlzLCBuYW1lLCBjb250ZW50KTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gc2V0IG1ldGE6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Oh44K/44K/44Kw44KS5YmK6Zmk44GZ44KLXG4gICAqIEBwYXJhbSBuYW1lIC0g44Oh44K/44K/44Kw5ZCNXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGRlbGV0ZU1ldGEobmFtZTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUlkKCdkZWxldGluZyBtZXRhJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFBhZ2VNZXRhQ29sbGVjdGlvbi5kZWxldGVNZXRhKHRoaXMsIG5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBkZWxldGUgbWV0YTogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjjgr3jg7zjgrnjgpLlj5blvpfjgZnjgovvvIjmnKrlj5blvpfjga7loLTlkIjjga/oh6rli5Xlj5blvpfvvIlcbiAgICogQHJldHVybnMg44Oa44O844K444K944O844K5XG4gICAqL1xuICBnZXRTb3VyY2UoKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VTb3VyY2U+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUGFnZUNvbGxlY3Rpb24uYWNxdWlyZVBhZ2VJZHModGhpcy5zaXRlLCBbdGhpc10pO1xuICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzb3VyY2VSZXN1bHQgPSBhd2FpdCBQYWdlQ29sbGVjdGlvbi5hY3F1aXJlUGFnZVNvdXJjZXModGhpcy5zaXRlLCBbdGhpc10pO1xuICAgICAgICAgIGlmIChzb3VyY2VSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgICAgdGhyb3cgc291cmNlUmVzdWx0LmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc291cmNlID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCdDYW5ub3QgZmluZCBwYWdlIHNvdXJjZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXhjZXB0aW9uKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IHNvdXJjZTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Oq44OT44K444On44Oz5bGl5q2044KS5Y+W5b6X44GZ44KL77yI5pyq5Y+W5b6X44Gu5aC05ZCI44Gv6Ieq5YuV5Y+W5b6X77yJXG4gICAqIEByZXR1cm5zIOODquODk+OCuOODp+ODs+OCs+ODrOOCr+OCt+ODp+ODs1xuICAgKi9cbiAgZ2V0UmV2aXNpb25zKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlUmV2aXNpb25Db2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JldmlzaW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlSWRzKHRoaXMuc2l0ZSwgW3RoaXNdKTtcbiAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmV2UmVzdWx0ID0gYXdhaXQgUGFnZUNvbGxlY3Rpb24uYWNxdWlyZVBhZ2VSZXZpc2lvbnModGhpcy5zaXRlLCBbdGhpc10pO1xuICAgICAgICAgIGlmIChyZXZSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgICAgdGhyb3cgcmV2UmVzdWx0LmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcmV2aXNpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCdDYW5ub3QgZmluZCBwYWdlIHJldmlzaW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXZpc2lvbnM7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXhjZXB0aW9uKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IHJldmlzaW9uczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog5oqV56Wo5oOF5aCx44KS5Y+W5b6X44GZ44KL77yI5pyq5Y+W5b6X44Gu5aC05ZCI44Gv6Ieq5YuV5Y+W5b6X77yJXG4gICAqIEByZXR1cm5zIOaKleelqOOCs+ODrOOCr+OCt+ODp+ODs1xuICAgKi9cbiAgZ2V0Vm90ZXMoKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VWb3RlQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl92b3RlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlSWRzKHRoaXMuc2l0ZSwgW3RoaXNdKTtcbiAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgdm90ZXNSZXN1bHQgPSBhd2FpdCBQYWdlQ29sbGVjdGlvbi5hY3F1aXJlUGFnZVZvdGVzKHRoaXMuc2l0ZSwgW3RoaXNdKTtcbiAgICAgICAgICBpZiAodm90ZXNSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgICAgdGhyb3cgdm90ZXNSZXN1bHQuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl92b3RlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbignQ2Fubm90IGZpbmQgcGFnZSB2b3RlcycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl92b3RlcztcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24pIHJldHVybiBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgdm90ZXM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFBhZ2UoZnVsbG5hbWU9JHt0aGlzLmZ1bGxuYW1lfSwgdGl0bGU9JHt0aGlzLnRpdGxlfSlgO1xuICB9XG59XG5cbi8qKlxuICog44Oa44O844K444Kz44Os44Kv44K344On44OzXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PFBhZ2U+IHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG5cbiAgY29uc3RydWN0b3Ioc2l0ZTogU2l0ZSwgcGFnZXM/OiBQYWdlW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2l0ZSA9IHNpdGU7XG4gICAgaWYgKHBhZ2VzKSB7XG4gICAgICB0aGlzLnB1c2goLi4ucGFnZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDjg5Xjg6vjg43jg7zjg6DjgafmpJzntKJcbiAgICogQHBhcmFtIGZ1bGxuYW1lIC0g44Oa44O844K444Gu44OV44Or44ON44O844OgXG4gICAqIEByZXR1cm5zIOODmuODvOOCuO+8iOWtmOWcqOOBl+OBquOBhOWgtOWQiOOBr3VuZGVmaW5lZO+8iVxuICAgKi9cbiAgZmluZEJ5RnVsbG5hbWUoZnVsbG5hbWU6IHN0cmluZyk6IFBhZ2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbmQoKHBhZ2UpID0+IHBhZ2UuZnVsbG5hbWUgPT09IGZ1bGxuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrhJROOCkuS4gOaLrOWPluW+l1xuICAgKi9cbiAgZ2V0UGFnZUlkcygpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gUGFnZUNvbGxlY3Rpb24uYWNxdWlyZVBhZ2VJZHModGhpcy5zaXRlLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjjgr3jg7zjgrnjgpLkuIDmi6zlj5blvpdcbiAgICovXG4gIGdldFBhZ2VTb3VyY2VzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBQYWdlQ29sbGVjdGlvbi5hY3F1aXJlUGFnZVNvdXJjZXModGhpcy5zaXRlLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjjg6rjg5Pjgrjjg6fjg7PjgpLkuIDmi6zlj5blvpdcbiAgICovXG4gIGdldFBhZ2VSZXZpc2lvbnMoKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlUmV2aXNpb25zKHRoaXMuc2l0ZSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K45oqV56Wo44KS5LiA5ous5Y+W5b6XXG4gICAqL1xuICBnZXRQYWdlVm90ZXMoKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlVm90ZXModGhpcy5zaXRlLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrhJROOCkuS4gOaLrOWPluW+l+OBmeOCi+WGhemDqOODoeOCveODg+ODiVxuICAgKi9cbiAgc3RhdGljIGFjcXVpcmVQYWdlSWRzKHNpdGU6IFNpdGUsIHBhZ2VzOiBQYWdlW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRQYWdlcyA9IHBhZ2VzLmZpbHRlcigocGFnZSkgPT4gIXBhZ2UuaXNJZEFjcXVpcmVkKCkpO1xuXG4gICAgICAgIGlmICh0YXJnZXRQYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VDb2xsZWN0aW9uKHNpdGUsIHBhZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWQjOaZguaOpee2muaVsOOCkuWItumZkO+8iEFNQ0NsaWVudOOBqOWQjOOBmHNlbWFwaG9yZUxpbWl044KS5L2/55So77yJXG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcExpbWl0KHNpdGUuY2xpZW50LmFtY0NsaWVudC5jb25maWcuc2VtYXBob3JlTGltaXQpO1xuXG4gICAgICAgIC8vIG5vcmVuZGVyLCBub3JlZGlyZWN044Gn44Ki44Kv44K744K5XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHRhcmdldFBhZ2VzLm1hcCgocGFnZSkgPT5cbiAgICAgICAgICAgIGxpbWl0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdXJsID0gYCR7cGFnZS5nZXRVcmwoKX0vbm9yZW5kZXIvdHJ1ZS9ub3JlZGlyZWN0L3RydWVgO1xuICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHNpdGUuY2xpZW50LmFtY0NsaWVudC5oZWFkZXIuZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgcGFnZSwgcmVzcG9uc2UgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgeyBwYWdlLCByZXNwb25zZSB9IG9mIHJlc3BvbnNlcykge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9XSUtJUkVRVUVTVFxcLmluZm9cXC5wYWdlSWRcXHMqPVxccyooXFxkKyk7Lyk7XG4gICAgICAgICAgaWYgKCFtYXRjaD8uWzFdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoYENhbm5vdCBmaW5kIHBhZ2UgaWQ6ICR7cGFnZS5mdWxsbmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZS5pZCA9IE51bWJlci5wYXJzZUludChtYXRjaFsxXSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBwYWdlIElEczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K444K944O844K544KS5LiA5ous5Y+W5b6X44GZ44KL5YaF6YOo44Oh44K944OD44OJXG4gICAqL1xuICBzdGF0aWMgYWNxdWlyZVBhZ2VTb3VyY2VzKHNpdGU6IFNpdGUsIHBhZ2VzOiBQYWdlW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRQYWdlcyA9IHBhZ2VzLmZpbHRlcigocGFnZSkgPT4gcGFnZS5zb3VyY2UgPT09IG51bGwgJiYgcGFnZS5pZCAhPT0gbnVsbCk7XG5cbiAgICAgICAgaWYgKHRhcmdldFBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUGFnZUNvbGxlY3Rpb24oc2l0ZSwgcGFnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFxuICAgICAgICAgIHRhcmdldFBhZ2VzLm1hcCgocGFnZSkgPT4gKHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICd2aWV3c291cmNlL1ZpZXdTb3VyY2VNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZV9pZDogcGFnZS5pZCxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGFnZSA9IHRhcmdldFBhZ2VzW2ldO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlW2ldO1xuICAgICAgICAgIGlmICghcGFnZSB8fCAhcmVzcG9uc2UpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJykucmVwbGFjZSgvJm5ic3A7L2csICcgJyk7XG4gICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChib2R5KTtcbiAgICAgICAgICBjb25zdCBzb3VyY2VFbGVtZW50ID0gJCgnZGl2LnBhZ2Utc291cmNlJyk7XG4gICAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoYENhbm5vdCBmaW5kIHNvdXJjZSBlbGVtZW50IGZvciBwYWdlOiAke3BhZ2UuZnVsbG5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHdpa2lUZXh0ID0gc291cmNlRWxlbWVudC50ZXh0KCkudHJpbSgpLnJlcGxhY2UoL15cXHQvLCAnJyk7XG4gICAgICAgICAgcGFnZS5zb3VyY2UgPSBuZXcgUGFnZVNvdXJjZSh7IHBhZ2UsIHdpa2lUZXh0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBwYWdlIHNvdXJjZXM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuOODquODk+OCuOODp+ODs+OCkuS4gOaLrOWPluW+l+OBmeOCi+WGhemDqOODoeOCveODg+ODiVxuICAgKi9cbiAgc3RhdGljIGFjcXVpcmVQYWdlUmV2aXNpb25zKHNpdGU6IFNpdGUsIHBhZ2VzOiBQYWdlW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRQYWdlcyA9IHBhZ2VzLmZpbHRlcigocGFnZSkgPT4gcGFnZS5yZXZpc2lvbnMgPT09IG51bGwgJiYgcGFnZS5pZCAhPT0gbnVsbCk7XG5cbiAgICAgICAgaWYgKHRhcmdldFBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUGFnZUNvbGxlY3Rpb24oc2l0ZSwgcGFnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFxuICAgICAgICAgIHRhcmdldFBhZ2VzLm1hcCgocGFnZSkgPT4gKHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdoaXN0b3J5L1BhZ2VSZXZpc2lvbkxpc3RNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZV9pZDogcGFnZS5pZCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHsgYWxsOiB0cnVlIH0sXG4gICAgICAgICAgICBwZXJwYWdlOiAxMDAwMDAwMDAsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g44Oq44OT44K444On44Oz44KS44OR44O844K5XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFyZ2V0UGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYWdlID0gdGFyZ2V0UGFnZXNbaV07XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbaV07XG4gICAgICAgICAgaWYgKCFwYWdlIHx8ICFyZXNwb25zZSkgY29udGludWU7XG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gU3RyaW5nKHJlc3BvbnNlLmJvZHkgPz8gJycpO1xuICAgICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoYm9keSk7XG4gICAgICAgICAgY29uc3QgcmV2aXNpb25zOiBQYWdlUmV2aXNpb25bXSA9IFtdO1xuXG4gICAgICAgICAgJCgndGFibGUucGFnZS1oaXN0b3J5IHRyW2lkXj1cInJldmlzaW9uLXJvdy1cIl0nKS5lYWNoKChfaiwgcmV2RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJHJldiA9ICQocmV2RWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCByZXZJZEF0dHIgPSAkcmV2LmF0dHIoJ2lkJyk7XG4gICAgICAgICAgICBpZiAoIXJldklkQXR0cikgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCByZXZJZCA9IE51bWJlci5wYXJzZUludChyZXZJZEF0dHIucmVwbGFjZSgncmV2aXNpb24tcm93LScsICcnKSwgMTApO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihyZXZJZCkpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgJHRkcyA9ICRyZXYuZmluZCgndGQnKTtcbiAgICAgICAgICAgIGlmICgkdGRzLmxlbmd0aCA8IDcpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgcmV2Tm9UZXh0ID0gJHRkcy5lcSgwKS50ZXh0KCkudHJpbSgpLnJlcGxhY2UoL1xcLiQvLCAnJyk7XG4gICAgICAgICAgICBjb25zdCByZXZObyA9IE51bWJlci5wYXJzZUludChyZXZOb1RleHQsIDEwKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4ocmV2Tm8pKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0ICRjcmVhdGVkQnlFbGVtID0gJHRkcy5lcSg0KS5maW5kKCdzcGFuLnByaW50dXNlcicpO1xuICAgICAgICAgICAgaWYgKCRjcmVhdGVkQnlFbGVtLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEJ5ID0gcGFyc2VVc2VyKHNpdGUuY2xpZW50LCAkY3JlYXRlZEJ5RWxlbSBhcyBDaGVlcmlvPEFueU5vZGU+KTtcblxuICAgICAgICAgICAgY29uc3QgJGNyZWF0ZWRBdEVsZW0gPSAkdGRzLmVxKDUpLmZpbmQoJ3NwYW4ub2RhdGUnKTtcbiAgICAgICAgICAgIGlmICgkY3JlYXRlZEF0RWxlbS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHBhcnNlT2RhdGUoJGNyZWF0ZWRBdEVsZW0gYXMgQ2hlZXJpbzxBbnlOb2RlPikgPz8gbmV3IERhdGUoKTtcblxuICAgICAgICAgICAgY29uc3QgY29tbWVudCA9ICR0ZHMuZXEoNikudGV4dCgpLnRyaW0oKTtcblxuICAgICAgICAgICAgcmV2aXNpb25zLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBQYWdlUmV2aXNpb24oe1xuICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgaWQ6IHJldklkLFxuICAgICAgICAgICAgICAgIHJldk5vLFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRCeSxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBwYWdlLnJldmlzaW9ucyA9IG5ldyBQYWdlUmV2aXNpb25Db2xsZWN0aW9uKHBhZ2UsIHJldmlzaW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFBhZ2VDb2xsZWN0aW9uKHNpdGUsIHBhZ2VzKTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBhY3F1aXJlIHBhZ2UgcmV2aXNpb25zOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuOaKleelqOOCkuS4gOaLrOWPluW+l+OBmeOCi+WGhemDqOODoeOCveODg+ODiVxuICAgKi9cbiAgc3RhdGljIGFjcXVpcmVQYWdlVm90ZXMoc2l0ZTogU2l0ZSwgcGFnZXM6IFBhZ2VbXSk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFBhZ2VzID0gcGFnZXMuZmlsdGVyKChwYWdlKSA9PiBwYWdlLnZvdGVzID09PSBudWxsICYmIHBhZ2UuaWQgIT09IG51bGwpO1xuXG4gICAgICAgIGlmICh0YXJnZXRQYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VDb2xsZWN0aW9uKHNpdGUsIHBhZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNpdGUuYW1jUmVxdWVzdChcbiAgICAgICAgICB0YXJnZXRQYWdlcy5tYXAoKHBhZ2UpID0+ICh7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAncGFnZXJhdGUvV2hvUmF0ZWRQYWdlTW9kdWxlJyxcbiAgICAgICAgICAgIHBhZ2VJZDogcGFnZS5pZCxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDmipXnpajjgpLjg5Hjg7zjgrlcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhZ2UgPSB0YXJnZXRQYWdlc1tpXTtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVtpXTtcbiAgICAgICAgICBpZiAoIXBhZ2UgfHwgIXJlc3BvbnNlKSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChib2R5KTtcblxuICAgICAgICAgIGNvbnN0ICR1c2VyRWxlbXMgPSAkKCdzcGFuLnByaW50dXNlcicpO1xuICAgICAgICAgIGNvbnN0ICR2YWx1ZUVsZW1zID0gJChcInNwYW5bc3R5bGVePSdjb2xvciddXCIpO1xuXG4gICAgICAgICAgaWYgKCR1c2VyRWxlbXMubGVuZ3RoICE9PSAkdmFsdWVFbGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ1VzZXIgYW5kIHZhbHVlIGNvdW50IG1pc21hdGNoIGluIHZvdGVzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgdm90ZXM6IFBhZ2VWb3RlW10gPSBbXTtcbiAgICAgICAgICAkdXNlckVsZW1zLmVhY2goKGosIHVzZXJFbGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdXNlciA9ICQodXNlckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgJHZhbHVlID0gJHZhbHVlRWxlbXMuZXEoaik7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBwYXJzZVVzZXIoc2l0ZS5jbGllbnQsICR1c2VyIGFzIENoZWVyaW88QW55Tm9kZT4pO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gJHZhbHVlLnRleHQoKS50cmltKCk7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZTogbnVtYmVyO1xuICAgICAgICAgICAgaWYgKHZhbHVlVGV4dCA9PT0gJysnKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUZXh0ID09PSAnLScpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlVGV4dCwgMTApIHx8IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZvdGVzLnB1c2gobmV3IFBhZ2VWb3RlKHsgcGFnZSwgdXNlciwgdmFsdWUgfSkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcGFnZS52b3RlcyA9IG5ldyBQYWdlVm90ZUNvbGxlY3Rpb24ocGFnZSwgdm90ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBwYWdlIHZvdGVzOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RQYWdlc01vZHVsZeODrOOCueODneODs+OCueOCkuODkeODvOOCuVxuICAgKi9cbiAgc3RhdGljIHBhcnNlKFxuICAgIHNpdGU6IFNpdGUsXG4gICAgaHRtbEJvZHk6IGNoZWVyaW8uQ2hlZXJpb0FQSSxcbiAgICBfcGFyc2VVc2VyOiAoZWxlbWVudDogY2hlZXJpby5DaGVlcmlvPEFueU5vZGU+KSA9PiBBYnN0cmFjdFVzZXJcbiAgKTogUGFnZUNvbGxlY3Rpb24ge1xuICAgIGNvbnN0IHBhZ2VzOiBQYWdlW10gPSBbXTtcblxuICAgIGh0bWxCb2R5KCdkaXYucGFnZScpLmVhY2goKF9pLCBwYWdlRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgJHBhZ2UgPSBodG1sQm9keShwYWdlRWxlbWVudCk7XG4gICAgICBjb25zdCBwYWdlUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgICAvLyA144Gk5pif44Os44O844OG44Kj44Oz44Kw5Yik5a6aXG4gICAgICBjb25zdCBpczVTdGFyUmF0aW5nID0gJHBhZ2UuZmluZCgnc3Bhbi5yYXRpbmcgc3Bhbi5wYWdlLXJhdGUtbGlzdC1wYWdlcy1zdGFydCcpLmxlbmd0aCA+IDA7XG5cbiAgICAgIC8vIOWQhOWApOOCkuWPluW+l1xuICAgICAgJHBhZ2UuZmluZCgnc3Bhbi5zZXQnKS5lYWNoKChfaiwgc2V0RWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCAkc2V0ID0gaHRtbEJvZHkoc2V0RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGtleUVsZW1lbnQgPSAkc2V0LmZpbmQoJ3NwYW4ubmFtZScpO1xuICAgICAgICBpZiAoa2V5RWxlbWVudC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBsZXQga2V5ID0ga2V5RWxlbWVudC50ZXh0KCkudHJpbSgpO1xuICAgICAgICBjb25zdCB2YWx1ZUVsZW1lbnQgPSAkc2V0LmZpbmQoJ3NwYW4udmFsdWUnKTtcblxuICAgICAgICBsZXQgdmFsdWU6IHVua25vd24gPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWx1ZUVsZW1lbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKFsnY3JlYXRlZF9hdCcsICd1cGRhdGVkX2F0JywgJ2NvbW1lbnRlZF9hdCddLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBjb25zdCBvZGF0ZUVsZW1lbnQgPSB2YWx1ZUVsZW1lbnQuZmluZCgnc3Bhbi5vZGF0ZScpO1xuICAgICAgICAgIGlmIChvZGF0ZUVsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGltZXN0YW1wID0gb2RhdGVFbGVtZW50LmF0dHIoJ2NsYXNzJyk/Lm1hdGNoKC90aW1lXyhcXGQrKS8pPy5bMV07XG4gICAgICAgICAgICB2YWx1ZSA9IHRpbWVzdGFtcCA/IG5ldyBEYXRlKE51bWJlci5wYXJzZUludCh0aW1lc3RhbXAsIDEwKSAqIDEwMDApIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgWydjcmVhdGVkX2J5X2xpbmtlZCcsICd1cGRhdGVkX2J5X2xpbmtlZCcsICdjb21tZW50ZWRfYnlfbGlua2VkJ10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBwcmludHVzZXJFbGVtZW50ID0gdmFsdWVFbGVtZW50LmZpbmQoJ3NwYW4ucHJpbnR1c2VyJyk7XG4gICAgICAgICAgaWYgKHByaW50dXNlckVsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFsdWUgPSBfcGFyc2VVc2VyKHByaW50dXNlckVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChbJ3RhZ3MnLCAnX3RhZ3MnXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZUVsZW1lbnQudGV4dCgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICB9IGVsc2UgaWYgKFsncmF0aW5nX3ZvdGVzJywgJ2NvbW1lbnRzJywgJ3NpemUnLCAncmV2aXNpb25zJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHZhbHVlID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlRWxlbWVudC50ZXh0KCkudHJpbSgpLCAxMCkgfHwgMDtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdyYXRpbmcnKSB7XG4gICAgICAgICAgY29uc3QgcmF0aW5nVGV4dCA9IHZhbHVlRWxlbWVudC50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIHZhbHVlID0gaXM1U3RhclJhdGluZ1xuICAgICAgICAgICAgPyBOdW1iZXIucGFyc2VGbG9hdChyYXRpbmdUZXh0KSB8fCAwXG4gICAgICAgICAgICA6IE51bWJlci5wYXJzZUludChyYXRpbmdUZXh0LCAxMCkgfHwgMDtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdyYXRpbmdfcGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoaXM1U3RhclJhdGluZykge1xuICAgICAgICAgICAgdmFsdWUgPSAoTnVtYmVyLnBhcnNlRmxvYXQodmFsdWVFbGVtZW50LnRleHQoKS50cmltKCkpIHx8IDApIC8gMTAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVFbGVtZW50LnRleHQoKS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDjgq3jg7zlpInmj5tcbiAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnX2xpbmtlZCcpKSB7XG4gICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoJ19saW5rZWQnLCAnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoWydjb21tZW50cycsICdjaGlsZHJlbicsICdyZXZpc2lvbnMnXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAga2V5ID0gYCR7a2V5fV9jb3VudGA7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncmF0aW5nX3ZvdGVzJykge1xuICAgICAgICAgIGtleSA9ICd2b3Rlc19jb3VudCc7XG4gICAgICAgIH1cblxuICAgICAgICBwYWdlUGFyYW1zW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyDjgr/jgrDntbHlkIhcbiAgICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5pc0FycmF5KHBhZ2VQYXJhbXMudGFncykgPyBwYWdlUGFyYW1zLnRhZ3MgOiBbXTtcbiAgICAgIGNvbnN0IGhpZGRlblRhZ3MgPSBBcnJheS5pc0FycmF5KHBhZ2VQYXJhbXMuX3RhZ3MpID8gcGFnZVBhcmFtcy5fdGFncyA6IFtdO1xuICAgICAgcGFnZVBhcmFtcy50YWdzID0gWy4uLnRhZ3MsIC4uLmhpZGRlblRhZ3NdO1xuXG4gICAgICAvLyBab2Tjgrnjgq3jg7zjg57jgafmpJzoqLzjg7vjg4fjg5Xjgqnjg6vjg4jlgKTpgannlKhcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhZ2VQYXJhbXNTY2hlbWEucGFyc2UocGFnZVBhcmFtcyk7XG5cbiAgICAgIC8vIFBhZ2Xjgqrjg5bjgrjjgqfjgq/jg4jkvZzmiJBcbiAgICAgIHBhZ2VzLnB1c2goXG4gICAgICAgIG5ldyBQYWdlKHtcbiAgICAgICAgICBzaXRlLFxuICAgICAgICAgIGZ1bGxuYW1lOiBwYXJzZWQuZnVsbG5hbWUsXG4gICAgICAgICAgbmFtZTogcGFyc2VkLm5hbWUsXG4gICAgICAgICAgY2F0ZWdvcnk6IHBhcnNlZC5jYXRlZ29yeSxcbiAgICAgICAgICB0aXRsZTogcGFyc2VkLnRpdGxlLFxuICAgICAgICAgIGNoaWxkcmVuQ291bnQ6IHBhcnNlZC5jaGlsZHJlbl9jb3VudCxcbiAgICAgICAgICBjb21tZW50c0NvdW50OiBwYXJzZWQuY29tbWVudHNfY291bnQsXG4gICAgICAgICAgc2l6ZTogcGFyc2VkLnNpemUsXG4gICAgICAgICAgcmF0aW5nOiBwYXJzZWQucmF0aW5nLFxuICAgICAgICAgIHZvdGVzQ291bnQ6IHBhcnNlZC52b3Rlc19jb3VudCxcbiAgICAgICAgICByYXRpbmdQZXJjZW50OiBwYXJzZWQucmF0aW5nX3BlcmNlbnQsXG4gICAgICAgICAgcmV2aXNpb25zQ291bnQ6IHBhcnNlZC5yZXZpc2lvbnNfY291bnQsXG4gICAgICAgICAgcGFyZW50RnVsbG5hbWU6IHBhcnNlZC5wYXJlbnRfZnVsbG5hbWUsXG4gICAgICAgICAgdGFnczogcGFyc2VkLnRhZ3MsXG4gICAgICAgICAgY3JlYXRlZEJ5OiBwYXJzZWQuY3JlYXRlZF9ieSxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHBhcnNlZC5jcmVhdGVkX2F0ID8/IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXBkYXRlZEJ5OiBwYXJzZWQudXBkYXRlZF9ieSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHBhcnNlZC51cGRhdGVkX2F0ID8/IG5ldyBEYXRlKCksXG4gICAgICAgICAgY29tbWVudGVkQnk6IHBhcnNlZC5jb21tZW50ZWRfYnksXG4gICAgICAgICAgY29tbWVudGVkQXQ6IHBhcnNlZC5jb21tZW50ZWRfYXQsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K45qSc57SiXG4gICAqL1xuICBzdGF0aWMgc2VhcmNoUGFnZXMoXG4gICAgc2l0ZTogU2l0ZSxcbiAgICBwYXJzZVVzZXI6IChlbGVtZW50OiBjaGVlcmlvLkNoZWVyaW88QW55Tm9kZT4pID0+IEFic3RyYWN0VXNlcixcbiAgICBxdWVyeTogU2VhcmNoUGFnZXNRdWVyeSB8IG51bGwgPSBudWxsXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHEgPSBxdWVyeSA/PyBuZXcgU2VhcmNoUGFnZXNRdWVyeSgpO1xuICAgICAgICBjb25zdCBxdWVyeURpY3QgPSBxLmFzRGljdCgpO1xuXG4gICAgICAgIC8vIOODouOCuOODpeODvOODq+ODnOODh+OCo+eUn+aIkFxuICAgICAgICBjb25zdCBtb2R1bGVCb2R5ID0gYFtbZGl2IGNsYXNzPVwicGFnZVwiXV1cXG4ke0RFRkFVTFRfTU9EVUxFX0JPRFkubWFwKFxuICAgICAgICAgIChrZXkpID0+XG4gICAgICAgICAgICBgW1tzcGFuIGNsYXNzPVwic2V0ICR7a2V5fVwiXV1bW3NwYW4gY2xhc3M9XCJuYW1lXCJdXSAke2tleX0gW1svc3Bhbl1dW1tzcGFuIGNsYXNzPVwidmFsdWVcIl1dICUlJHtrZXl9JSUgW1svc3Bhbl1dW1svc3Bhbl1dYFxuICAgICAgICApLmpvaW4oJycpfVxcbltbL2Rpdl1dYDtcblxuICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAuLi5xdWVyeURpY3QsXG4gICAgICAgICAgbW9kdWxlTmFtZTogJ2xpc3QvTGlzdFBhZ2VzTW9kdWxlJyxcbiAgICAgICAgICBtb2R1bGVfYm9keTogbW9kdWxlQm9keSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzaXRlLmFtY1JlcXVlc3QoW3JlcXVlc3RCb2R5XSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbm90X29rJykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBGb3JiaWRkZW5FcnJvcignRmFpbGVkIHRvIGdldCBwYWdlcywgdGFyZ2V0IHNpdGUgbWF5IGJlIHByaXZhdGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RSZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgY29uc3QgYm9keSA9IFN0cmluZyhmaXJzdFJlc3BvbnNlPy5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgJGZpcnN0ID0gY2hlZXJpby5sb2FkKGJvZHkpO1xuXG4gICAgICAgIGxldCB0b3RhbCA9IDE7XG4gICAgICAgIGNvbnN0IGh0bWxCb2RpZXM6IGNoZWVyaW8uQ2hlZXJpb0FQSVtdID0gWyRmaXJzdF07XG5cbiAgICAgICAgLy8g44Oa44O844K444ON44O844K344On44Oz56K66KqNXG4gICAgICAgIGNvbnN0IHBhZ2VyRWxlbWVudCA9ICRmaXJzdCgnZGl2LnBhZ2VyJyk7XG4gICAgICAgIGlmIChwYWdlckVsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGxhc3RQYWdlckVsZW1lbnRzID0gJGZpcnN0KCdkaXYucGFnZXIgc3Bhbi50YXJnZXQnKTtcbiAgICAgICAgICBpZiAobGFzdFBhZ2VyRWxlbWVudHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZExhc3RQYWdlciA9ICRmaXJzdChsYXN0UGFnZXJFbGVtZW50c1tsYXN0UGFnZXJFbGVtZW50cy5sZW5ndGggLSAyXSk7XG4gICAgICAgICAgICBjb25zdCBsYXN0UGFnZXJMaW5rID0gc2Vjb25kTGFzdFBhZ2VyLmZpbmQoJ2EnKTtcbiAgICAgICAgICAgIGlmIChsYXN0UGFnZXJMaW5rLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdG90YWwgPSBOdW1iZXIucGFyc2VJbnQobGFzdFBhZ2VyTGluay50ZXh0KCkudHJpbSgpLCAxMCkgfHwgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDov73liqDjg5rjg7zjgrjlj5blvpdcbiAgICAgICAgaWYgKHRvdGFsID4gMSkge1xuICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxCb2RpZXM6IEFNQ1JlcXVlc3RCb2R5W10gPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHRvdGFsOyBpKyspIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxCb2RpZXMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLnF1ZXJ5RGljdCxcbiAgICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2xpc3QvTGlzdFBhZ2VzTW9kdWxlJyxcbiAgICAgICAgICAgICAgbW9kdWxlX2JvZHk6IG1vZHVsZUJvZHksXG4gICAgICAgICAgICAgIG9mZnNldDogaSAqIChxLnBlclBhZ2UgPz8gREVGQVVMVF9QRVJfUEFHRSksXG4gICAgICAgICAgICB9IGFzIEFNQ1JlcXVlc3RCb2R5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsUmVzdWx0cyA9IGF3YWl0IHNpdGUuYW1jUmVxdWVzdChhZGRpdGlvbmFsQm9kaWVzKTtcbiAgICAgICAgICBpZiAoYWRkaXRpb25hbFJlc3VsdHMuaXNFcnIoKSkge1xuICAgICAgICAgICAgdGhyb3cgYWRkaXRpb25hbFJlc3VsdHMuZXJyb3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBhZGRpdGlvbmFsUmVzdWx0cy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzcEJvZHkgPSBTdHJpbmcocmVzcG9uc2U/LmJvZHkgPz8gJycpO1xuICAgICAgICAgICAgaHRtbEJvZGllcy5wdXNoKGNoZWVyaW8ubG9hZChyZXNwQm9keSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOODkeODvOOCuVxuICAgICAgICBjb25zdCBwYWdlczogUGFnZVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgJGh0bWwgb2YgaHRtbEJvZGllcykge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IFBhZ2VDb2xsZWN0aW9uLnBhcnNlKHNpdGUsICRodG1sLCBwYXJzZVVzZXIpO1xuICAgICAgICAgIHBhZ2VzLnB1c2goLi4ucGFyc2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUGFnZUNvbGxlY3Rpb24oc2l0ZSwgcGFnZXMpO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBGb3JiaWRkZW5FcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gc2VhcmNoIHBhZ2VzOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjjgpLkvZzmiJDjgb7jgZ/jga/nt6jpm4ZcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVPckVkaXQoXG4gICAgc2l0ZTogU2l0ZSxcbiAgICBmdWxsbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHBhZ2VJZD86IG51bWJlciB8IG51bGw7XG4gICAgICB0aXRsZT86IHN0cmluZztcbiAgICAgIHNvdXJjZT86IHN0cmluZztcbiAgICAgIGNvbW1lbnQ/OiBzdHJpbmc7XG4gICAgICBmb3JjZUVkaXQ/OiBib29sZWFuO1xuICAgICAgcmFpc2VPbkV4aXN0cz86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgY29uc3QgbG9naW5SZXN1bHQgPSBzaXRlLmNsaWVudC5yZXF1aXJlTG9naW4oKTtcbiAgICBpZiAobG9naW5SZXN1bHQuaXNFcnIoKSkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlamVjdChsb2dpblJlc3VsdC5lcnJvciksXG4gICAgICAgICgpID0+IG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0xvZ2luIHJlcXVpcmVkIHRvIGNyZWF0ZS9lZGl0IHBhZ2UnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcGFnZUlkID0gbnVsbCxcbiAgICAgICAgICB0aXRsZSA9ICcnLFxuICAgICAgICAgIHNvdXJjZSA9ICcnLFxuICAgICAgICAgIGNvbW1lbnQgPSAnJyxcbiAgICAgICAgICBmb3JjZUVkaXQgPSBmYWxzZSxcbiAgICAgICAgICByYWlzZU9uRXhpc3RzID0gZmFsc2UsXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIC8vIOODmuODvOOCuOODreODg+OCr+WPluW+l1xuICAgICAgICBjb25zdCBsb2NrUmVxdWVzdEJvZHk6IEFNQ1JlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgIG1vZGU6ICdwYWdlJyxcbiAgICAgICAgICB3aWtpX3BhZ2U6IGZ1bGxuYW1lLFxuICAgICAgICAgIG1vZHVsZU5hbWU6ICdlZGl0L1BhZ2VFZGl0TW9kdWxlJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGZvcmNlRWRpdCkge1xuICAgICAgICAgIGxvY2tSZXF1ZXN0Qm9keS5mb3JjZV9sb2NrID0gJ3llcyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NrUmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFtsb2NrUmVxdWVzdEJvZHldKTtcbiAgICAgICAgaWYgKGxvY2tSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGxvY2tSZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NrUmVzcG9uc2UgPSBsb2NrUmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAobG9ja1Jlc3BvbnNlPy5sb2NrZWQgfHwgbG9ja1Jlc3BvbnNlPy5vdGhlcl9sb2Nrcykge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoYFBhZ2UgJHtmdWxsbmFtZX0gaXMgbG9ja2VkIG9yIG90aGVyIGxvY2tzIGV4aXN0YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0V4aXN0ID0gJ3BhZ2VfcmV2aXNpb25faWQnIGluIChsb2NrUmVzcG9uc2UgPz8ge30pO1xuXG4gICAgICAgIGlmIChyYWlzZU9uRXhpc3RzICYmIGlzRXhpc3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVGFyZ2V0RXhpc3RzRXJyb3IoYFBhZ2UgJHtmdWxsbmFtZX0gYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0V4aXN0ICYmIHBhZ2VJZCA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ3BhZ2VfaWQgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBlZGl0aW5nIGV4aXN0aW5nIHBhZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2tJZCA9IFN0cmluZyhsb2NrUmVzcG9uc2U/LmxvY2tfaWQgPz8gJycpO1xuICAgICAgICBjb25zdCBsb2NrU2VjcmV0ID0gU3RyaW5nKGxvY2tSZXNwb25zZT8ubG9ja19zZWNyZXQgPz8gJycpO1xuICAgICAgICBjb25zdCBwYWdlUmV2aXNpb25JZCA9IFN0cmluZyhsb2NrUmVzcG9uc2U/LnBhZ2VfcmV2aXNpb25faWQgPz8gJycpO1xuXG4gICAgICAgIC8vIOODmuODvOOCuOS/neWtmFxuICAgICAgICBjb25zdCBlZGl0UmVxdWVzdEJvZHk6IEFNQ1JlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgIGFjdGlvbjogJ1dpa2lQYWdlQWN0aW9uJyxcbiAgICAgICAgICBldmVudDogJ3NhdmVQYWdlJyxcbiAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgIG1vZGU6ICdwYWdlJyxcbiAgICAgICAgICBsb2NrX2lkOiBsb2NrSWQsXG4gICAgICAgICAgbG9ja19zZWNyZXQ6IGxvY2tTZWNyZXQsXG4gICAgICAgICAgcmV2aXNpb25faWQ6IHBhZ2VSZXZpc2lvbklkLFxuICAgICAgICAgIHdpa2lfcGFnZTogZnVsbG5hbWUsXG4gICAgICAgICAgcGFnZV9pZDogcGFnZUlkID8/ICcnLFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICBjb21tZW50czogY29tbWVudCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBlZGl0UmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFtlZGl0UmVxdWVzdEJvZHldKTtcbiAgICAgICAgaWYgKGVkaXRSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGVkaXRSZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVGFyZ2V0RXhpc3RzRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUvZWRpdCBwYWdlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgeyBTZWFyY2hQYWdlc1F1ZXJ5IH07XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgeyBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2UgfSBmcm9tICcuL3BhZ2UnO1xuXG4vKipcbiAqIOODmuODvOOCuOODleOCoeOCpOODq+ODh+ODvOOCv1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VGaWxlRGF0YSB7XG4gIHBhZ2U6IFBhZ2U7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIG1pbWVUeXBlOiBzdHJpbmc7XG4gIHNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiDjg5rjg7zjgrjmt7vku5jjg5XjgqHjgqTjg6tcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VGaWxlIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2U6IFBhZ2U7XG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtaW1lVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFBhZ2VGaWxlRGF0YSkge1xuICAgIHRoaXMucGFnZSA9IGRhdGEucGFnZTtcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgdGhpcy51cmwgPSBkYXRhLnVybDtcbiAgICB0aGlzLm1pbWVUeXBlID0gZGF0YS5taW1lVHlwZTtcbiAgICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgUGFnZUZpbGUoaWQ9JHt0aGlzLmlkfSwgbmFtZT0ke3RoaXMubmFtZX0sIHNpemU9JHt0aGlzLnNpemV9KWA7XG4gIH1cbn1cblxuLyoqXG4gKiDjg5rjg7zjgrjjg5XjgqHjgqTjg6vjgrPjg6zjgq/jgrfjg6fjg7NcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VGaWxlQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PFBhZ2VGaWxlPiB7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlOiBQYWdlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IFBhZ2UsIGZpbGVzPzogUGFnZUZpbGVbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wYWdlID0gcGFnZTtcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIHRoaXMucHVzaCguLi5maWxlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElE44Gn5qSc57SiXG4gICAqL1xuICBmaW5kQnlJZChpZDogbnVtYmVyKTogUGFnZUZpbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbmQoKGZpbGUpID0+IGZpbGUuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlkI3liY3jgafmpJzntKJcbiAgICovXG4gIGZpbmRCeU5hbWUobmFtZTogc3RyaW5nKTogUGFnZUZpbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbmQoKGZpbGUpID0+IGZpbGUubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICog44K144Kk44K65paH5a2X5YiX44KS44OQ44Kk44OI5pWw44Gr5aSJ5o+bXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBwYXJzZVNpemUoc2l6ZVRleHQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdGV4dCA9IHNpemVUZXh0LnRyaW0oKTtcbiAgICBpZiAodGV4dC5pbmNsdWRlcygnQnl0ZXMnKSkge1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTnVtYmVyLnBhcnNlRmxvYXQodGV4dC5yZXBsYWNlKCdCeXRlcycsICcnKS50cmltKCkpKTtcbiAgICB9XG4gICAgaWYgKHRleHQuaW5jbHVkZXMoJ2tCJykpIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKE51bWJlci5wYXJzZUZsb2F0KHRleHQucmVwbGFjZSgna0InLCAnJykudHJpbSgpKSAqIDEwMDApO1xuICAgIH1cbiAgICBpZiAodGV4dC5pbmNsdWRlcygnTUInKSkge1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTnVtYmVyLnBhcnNlRmxvYXQodGV4dC5yZXBsYWNlKCdNQicsICcnKS50cmltKCkpICogMTAwMDAwMCk7XG4gICAgfVxuICAgIGlmICh0ZXh0LmluY2x1ZGVzKCdHQicpKSB7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihOdW1iZXIucGFyc2VGbG9hdCh0ZXh0LnJlcGxhY2UoJ0dCJywgJycpLnRyaW0oKSkgKiAxMDAwMDAwMDAwKTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K444Gr5re75LuY44GV44KM44Gf44OV44Kh44Kk44Or5LiA6Kan44KS5Y+W5b6X44GZ44KLXG4gICAqL1xuICBzdGF0aWMgYWNxdWlyZShwYWdlOiBQYWdlKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VGaWxlQ29sbGVjdGlvbj4ge1xuICAgIGlmIChwYWdlLmlkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAgIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignUGFnZSBJRCBub3QgYWNxdWlyZWQnKSksXG4gICAgICAgICgpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ1BhZ2UgSUQgbXVzdCBiZSBhY3F1aXJlZCBiZWZvcmUgZ2V0dGluZyBmaWxlcycpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VJZCA9IHBhZ2UuaWQ7XG5cbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdlLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2ZpbGVzL1BhZ2VGaWxlc01vZHVsZScsXG4gICAgICAgICAgICBwYWdlX2lkOiBwYWdlSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcblxuICAgICAgICBjb25zdCBmaWxlc1RhYmxlID0gJCgndGFibGUucGFnZS1maWxlcycpO1xuICAgICAgICBpZiAoZmlsZXNUYWJsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VGaWxlQ29sbGVjdGlvbihwYWdlLCBbXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlczogUGFnZUZpbGVbXSA9IFtdO1xuXG4gICAgICAgIGZpbGVzVGFibGUuZmluZChcInRib2R5IHRyW2lkXj0nZmlsZS1yb3ctJ11cIikuZWFjaCgoX2ksIHJvdykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvd0lkID0gJChyb3cpLmF0dHIoJ2lkJyk7XG4gICAgICAgICAgaWYgKCFyb3dJZCkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgZmlsZUlkID0gTnVtYmVyLnBhcnNlSW50KHJvd0lkLnJlcGxhY2UoJ2ZpbGUtcm93LScsICcnKSwgMTApO1xuICAgICAgICAgIGNvbnN0IHRkcyA9ICQocm93KS5maW5kKCd0ZCcpO1xuICAgICAgICAgIGlmICh0ZHMubGVuZ3RoIDwgMykgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgbGlua0VsZW0gPSAkKHRkc1swXSkuZmluZCgnYScpO1xuICAgICAgICAgIGlmIChsaW5rRWxlbS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IG5hbWUgPSBsaW5rRWxlbS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IGhyZWYgPSBsaW5rRWxlbS5hdHRyKCdocmVmJykgPz8gJyc7XG4gICAgICAgICAgY29uc3QgdXJsID0gYCR7cGFnZS5zaXRlLmdldEJhc2VVcmwoKX0ke2hyZWZ9YDtcblxuICAgICAgICAgIGNvbnN0IG1pbWVFbGVtID0gJCh0ZHNbMV0pLmZpbmQoJ3NwYW4nKTtcbiAgICAgICAgICBjb25zdCBtaW1lVHlwZSA9IG1pbWVFbGVtLmF0dHIoJ3RpdGxlJykgPz8gJyc7XG5cbiAgICAgICAgICBjb25zdCBzaXplVGV4dCA9ICQodGRzWzJdKS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHNpemUgPSBQYWdlRmlsZUNvbGxlY3Rpb24ucGFyc2VTaXplKHNpemVUZXh0KTtcblxuICAgICAgICAgIGZpbGVzLnB1c2goXG4gICAgICAgICAgICBuZXcgUGFnZUZpbGUoe1xuICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgICBpZDogZmlsZUlkLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgIG1pbWVUeXBlLFxuICAgICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IFBhZ2VGaWxlQ29sbGVjdGlvbihwYWdlLCBmaWxlcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBmaWxlczogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyBMb2dpblJlcXVpcmVkRXJyb3IsIE5vRWxlbWVudEVycm9yLCBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2VSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICog44Oa44O844K444Oh44K/44K/44Kw44OH44O844K/XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZU1ldGFEYXRhIHtcbiAgcGFnZTogUGFnZVJlZjtcbiAgbmFtZTogc3RyaW5nO1xuICBjb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICog44Oa44O844K444Oh44K/44K/44KwXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlTWV0YSB7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlOiBQYWdlUmVmO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgY29udGVudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFBhZ2VNZXRhRGF0YSkge1xuICAgIHRoaXMucGFnZSA9IGRhdGEucGFnZTtcbiAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgdGhpcy5jb250ZW50ID0gZGF0YS5jb250ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIOODoeOCv+OCv+OCsOOBruWApOOCkuabtOaWsOOBmeOCi1xuICAgKiBAcGFyYW0gY29udGVudCAtIOaWsOOBl+OBhOWApFxuICAgKi9cbiAgdXBkYXRlKGNvbnRlbnQ6IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIFBhZ2VNZXRhQ29sbGVjdGlvbi5zZXRNZXRhKHRoaXMucGFnZSwgdGhpcy5uYW1lLCBjb250ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg6Hjgr/jgr/jgrDjgpLliYrpmaTjgZnjgotcbiAgICovXG4gIGRlbGV0ZSgpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBQYWdlTWV0YUNvbGxlY3Rpb24uZGVsZXRlTWV0YSh0aGlzLnBhZ2UsIHRoaXMubmFtZSk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgUGFnZU1ldGEobmFtZT0ke3RoaXMubmFtZX0sIGNvbnRlbnQ9JHt0aGlzLmNvbnRlbnR9KWA7XG4gIH1cbn1cblxuLyoqXG4gKiDjg5rjg7zjgrjjg6Hjgr/jgr/jgrDjgrPjg6zjgq/jgrfjg6fjg7NcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VNZXRhQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PFBhZ2VNZXRhPiB7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlOiBQYWdlUmVmO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IFBhZ2VSZWYsIG1ldGFzPzogUGFnZU1ldGFbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wYWdlID0gcGFnZTtcbiAgICBpZiAobWV0YXMpIHtcbiAgICAgIHRoaXMucHVzaCguLi5tZXRhcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWQjeWJjeOBp+aknOe0olxuICAgKiBAcGFyYW0gbmFtZSAtIOODoeOCv+OCv+OCsOWQjVxuICAgKiBAcmV0dXJucyDjg6Hjgr/jgr/jgrDvvIjlrZjlnKjjgZfjgarjgYTloLTlkIjjga91bmRlZmluZWTvvIlcbiAgICovXG4gIGZpbmRCeU5hbWUobmFtZTogc3RyaW5nKTogUGFnZU1ldGEgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbmQoKG1ldGEpID0+IG1ldGEubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K444Gu44Oh44K/44K/44Kw44KS5Y+W5b6X44GZ44KLXG4gICAqIEBwYXJhbSBwYWdlIC0g44Oa44O844K45Y+C54WnXG4gICAqIEByZXR1cm5zIOODoeOCv+OCv+OCsOOCs+ODrOOCr+OCt+ODp+ODs1xuICAgKi9cbiAgc3RhdGljIGFjcXVpcmUocGFnZTogUGFnZVJlZik6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlTWV0YUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdlLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2VkaXQvRWRpdE1ldGFNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZUlkOiBwYWdlLmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgbWV0YXM6IFBhZ2VNZXRhW10gPSBbXTtcblxuICAgICAgICAvLyBIVE1M44Ko44Oz44Kz44O844OJ44GV44KM44Gf44Oh44K/44K/44Kw44KS5q2j6KaP6KGo54++44Gn44OR44O844K5XG4gICAgICAgIC8vIOW9ouW8jzogJmx0O21ldGEgbmFtZT1cInh4eFwiIGNvbnRlbnQ9XCJ5eXlcIi8mZ3Q7XG4gICAgICAgIGNvbnN0IG1ldGFSZWdleCA9IC8mbHQ7bWV0YSBuYW1lPVwiKFteXCJdKylcIiBjb250ZW50PVwiKFteXCJdKilcIlxcLz8mZ3Q7L2c7XG4gICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgaHRtbC5tYXRjaEFsbChtZXRhUmVnZXgpKSB7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IG1hdGNoWzFdO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtYXRjaFsyXTtcbiAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgbWV0YXMucHVzaChcbiAgICAgICAgICAgICAgbmV3IFBhZ2VNZXRhKHtcbiAgICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogY29udGVudCA/PyAnJyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlTWV0YUNvbGxlY3Rpb24ocGFnZSwgbWV0YXMpO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGFjcXVpcmUgcGFnZSBtZXRhczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog44Oh44K/44K/44Kw44KS6Kit5a6a44GZ44KLXG4gICAqIEBwYXJhbSBwYWdlIC0g44Oa44O844K45Y+C54WnXG4gICAqIEBwYXJhbSBuYW1lIC0g44Oh44K/44K/44Kw5ZCNXG4gICAqIEBwYXJhbSBjb250ZW50IC0g44Oh44K/44K/44Kw44Gu5YCkXG4gICAqL1xuICBzdGF0aWMgc2V0TWV0YShwYWdlOiBQYWdlUmVmLCBuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgY29uc3QgbG9naW5SZXN1bHQgPSBwYWdlLnNpdGUuY2xpZW50LnJlcXVpcmVMb2dpbigpO1xuICAgIGlmIChsb2dpblJlc3VsdC5pc0VycigpKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAgIFByb21pc2UucmVqZWN0KGxvZ2luUmVzdWx0LmVycm9yKSxcbiAgICAgICAgKCkgPT4gbmV3IExvZ2luUmVxdWlyZWRFcnJvcignTG9naW4gcmVxdWlyZWQgdG8gc2V0IG1ldGEgdGFnJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFnZS5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ1dpa2lQYWdlQWN0aW9uJyxcbiAgICAgICAgICAgIGV2ZW50OiAnc2F2ZU1ldGFUYWcnLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2VkaXQvRWRpdE1ldGFNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZUlkOiBwYWdlLmlkLFxuICAgICAgICAgICAgbWV0YU5hbWU6IG5hbWUsXG4gICAgICAgICAgICBtZXRhQ29udGVudDogY29udGVudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gc2V0IG1ldGEgdGFnOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg6Hjgr/jgr/jgrDjgpLliYrpmaTjgZnjgotcbiAgICogQHBhcmFtIHBhZ2UgLSDjg5rjg7zjgrjlj4LnhadcbiAgICogQHBhcmFtIG5hbWUgLSDjg6Hjgr/jgr/jgrDlkI1cbiAgICovXG4gIHN0YXRpYyBkZWxldGVNZXRhKHBhZ2U6IFBhZ2VSZWYsIG5hbWU6IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgY29uc3QgbG9naW5SZXN1bHQgPSBwYWdlLnNpdGUuY2xpZW50LnJlcXVpcmVMb2dpbigpO1xuICAgIGlmIChsb2dpblJlc3VsdC5pc0VycigpKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAgIFByb21pc2UucmVqZWN0KGxvZ2luUmVzdWx0LmVycm9yKSxcbiAgICAgICAgKCkgPT4gbmV3IExvZ2luUmVxdWlyZWRFcnJvcignTG9naW4gcmVxdWlyZWQgdG8gZGVsZXRlIG1ldGEgdGFnJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFnZS5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ1dpa2lQYWdlQWN0aW9uJyxcbiAgICAgICAgICAgIGV2ZW50OiAnZGVsZXRlTWV0YVRhZycsXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnZWRpdC9FZGl0TWV0YU1vZHVsZScsXG4gICAgICAgICAgICBwYWdlSWQ6IHBhZ2UuaWQsXG4gICAgICAgICAgICBtZXRhTmFtZTogbmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIG1ldGEgdGFnOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBjaGVlcmlvIGZyb20gJ2NoZWVyaW8nO1xuaW1wb3J0IHsgTm9FbGVtZW50RXJyb3IsIFVuZXhwZWN0ZWRFcnJvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5pbXBvcnQgdHlwZSB7IFBhZ2UgfSBmcm9tICcuL3BhZ2UnO1xuaW1wb3J0IHR5cGUgeyBQYWdlU291cmNlIH0gZnJvbSAnLi9wYWdlLXNvdXJjZSc7XG5cbi8qKlxuICog44Oa44O844K444Oq44OT44K444On44Oz44OH44O844K/XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVJldmlzaW9uRGF0YSB7XG4gIHBhZ2U6IFBhZ2U7XG4gIGlkOiBudW1iZXI7XG4gIHJldk5vOiBudW1iZXI7XG4gIGNyZWF0ZWRCeTogQWJzdHJhY3RVc2VyO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIGNvbW1lbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiDjg5rjg7zjgrjjga7jg6rjg5Pjgrjjg6fjg7PvvIjnt6jpm4blsaXmrbTjga7jg5Djg7zjgrjjg6fjg7PvvIlcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VSZXZpc2lvbiB7XG4gIC8qKiDjg6rjg5Pjgrjjg6fjg7PjgYzlsZ7jgZnjgovjg5rjg7zjgrggKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhZ2U6IFBhZ2U7XG5cbiAgLyoqIOODquODk+OCuOODp+ODs0lEICovXG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKiDjg6rjg5Pjgrjjg6fjg7Pnlarlj7cgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJldk5vOiBudW1iZXI7XG5cbiAgLyoqIOODquODk+OCuOODp+ODs+S9nOaIkOiAhSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEJ5OiBBYnN0cmFjdFVzZXI7XG5cbiAgLyoqIOODquODk+OCuOODp+ODs+S9nOaIkOaXpeaZgiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIC8qKiDnt6jpm4bjgrPjg6Hjg7Pjg4ggKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbW1lbnQ6IHN0cmluZztcblxuICAvKiog44K944O844K544Kz44O844OJ77yI5YaF6YOo44Kt44Oj44OD44K344Ol77yJICovXG4gIHByaXZhdGUgX3NvdXJjZTogUGFnZVNvdXJjZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBIVE1M6KGo56S677yI5YaF6YOo44Kt44Oj44OD44K344Ol77yJICovXG4gIHByaXZhdGUgX2h0bWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFBhZ2VSZXZpc2lvbkRhdGEpIHtcbiAgICB0aGlzLnBhZ2UgPSBkYXRhLnBhZ2U7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5yZXZObyA9IGRhdGEucmV2Tm87XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkYXRhLmNyZWF0ZWRCeTtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IGRhdGEuY3JlYXRlZEF0O1xuICAgIHRoaXMuY29tbWVudCA9IGRhdGEuY29tbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgr3jg7zjgrnjgrPjg7zjg4njgYzlj5blvpfmuIjjgb/jgYvjganjgYbjgYtcbiAgICovXG4gIGlzU291cmNlQWNxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIVE1M6KGo56S644GM5Y+W5b6X5riI44G/44GL44Gp44GG44GLXG4gICAqL1xuICBpc0h0bWxBY3F1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faHRtbCAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgr3jg7zjgrnjgrPjg7zjg4nvvIjjgq3jg6Pjg4Pjgrfjg6XmuIjjgb/vvInjgpLlj5blvpdcbiAgICovXG4gIGdldCBzb3VyY2UoKTogUGFnZVNvdXJjZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICog44K944O844K544Kz44O844OJ44KS6Kit5a6aXG4gICAqL1xuICBzZXQgc291cmNlKHZhbHVlOiBQYWdlU291cmNlIHwgbnVsbCkge1xuICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhUTUzooajnpLrvvIjjgq3jg6Pjg4Pjgrfjg6XmuIjjgb/vvInjgpLlj5blvpdcbiAgICovXG4gIGdldCBodG1sKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9odG1sO1xuICB9XG5cbiAgLyoqXG4gICAqIEhUTUzooajnpLrjgpLoqK3lrppcbiAgICovXG4gIHNldCBodG1sKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5faHRtbCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIOODquODk+OCuOODp+ODs+OBruOCveODvOOCueOCkuWPluW+l+OBmeOCi++8iFJFVi0wMDHvvIlcbiAgICogQHJldHVybnMg44K944O844K55paH5a2X5YiXXG4gICAqL1xuICBnZXRTb3VyY2UoKTogV2lraWRvdFJlc3VsdEFzeW5jPHN0cmluZz4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIOOCreODo+ODg+OCt+ODpeOBjOOBguOCjOOBsOi/lOOBmVxuICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS53aWtpVGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGFnZS5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdoaXN0b3J5L1BhZ2VTb3VyY2VNb2R1bGUnLFxuICAgICAgICAgICAgcmV2aXNpb25faWQ6IHRoaXMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0VtcHR5IHJlc3BvbnNlIGZyb20gUGFnZVNvdXJjZU1vZHVsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcblxuICAgICAgICAvLyDjgr3jg7zjgrnjgrPjg7zjg4njga88ZGl2IGNsYXNzPVwicGFnZS1zb3VyY2VcIj7lhoXjgavjgYLjgotcbiAgICAgICAgY29uc3Qgc291cmNlRWxlbSA9ICQoJ2Rpdi5wYWdlLXNvdXJjZScpO1xuICAgICAgICBpZiAoc291cmNlRWxlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ1NvdXJjZSBlbGVtZW50IG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlVGV4dCA9IHNvdXJjZUVsZW0udGV4dCgpO1xuICAgICAgICByZXR1cm4gc291cmNlVGV4dDtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgcmV2aXNpb24gc291cmNlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg6rjg5Pjgrjjg6fjg7Pjga5IVE1M44KS5Y+W5b6X44GZ44KL77yIUkVWLTAwMu+8iVxuICAgKiBAcmV0dXJucyBIVE1M5paH5a2X5YiXXG4gICAqL1xuICBnZXRIdG1sKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxzdHJpbmc+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyDjgq3jg6Pjg4Pjgrfjg6XjgYzjgYLjgozjgbDov5TjgZlcbiAgICAgICAgaWYgKHRoaXMuX2h0bWwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5faHRtbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGFnZS5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdoaXN0b3J5L1BhZ2VWZXJzaW9uTW9kdWxlJyxcbiAgICAgICAgICAgIHJldmlzaW9uX2lkOiB0aGlzLmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSByZXNwb25zZSBmcm9tIFBhZ2VWZXJzaW9uTW9kdWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodG1sID0gU3RyaW5nKHJlc3BvbnNlLmJvZHkgPz8gJycpO1xuICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpO1xuXG4gICAgICAgIC8vIEhUTUzjgrPjg7Pjg4bjg7Pjg4Tjga88ZGl2IGlkPVwicGFnZS1jb250ZW50XCI+5YaF44Gr44GC44KLXG4gICAgICAgIGNvbnN0IGNvbnRlbnRFbGVtID0gJCgnI3BhZ2UtY29udGVudCcpO1xuICAgICAgICBpZiAoY29udGVudEVsZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gcGFnZS1jb250ZW5044GM44Gq44GE5aC05ZCI44GvYm9keeWFqOS9k+OCkui/lOOBmVxuICAgICAgICAgIHRoaXMuX2h0bWwgPSBodG1sO1xuICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudEh0bWwgPSBjb250ZW50RWxlbS5odG1sKCkgPz8gJyc7XG4gICAgICAgIHRoaXMuX2h0bWwgPSBjb250ZW50SHRtbDtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRIdG1sO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCByZXZpc2lvbiBIVE1MOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBQYWdlUmV2aXNpb24oaWQ9JHt0aGlzLmlkfSwgcmV2Tm89JHt0aGlzLnJldk5vfSlgO1xuICB9XG59XG5cbi8qKlxuICog44Oa44O844K444Oq44OT44K444On44Oz44Kz44Os44Kv44K344On44OzXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlUmV2aXNpb25Db2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8UGFnZVJldmlzaW9uPiB7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlOiBQYWdlIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwYWdlOiBQYWdlIHwgbnVsbCwgcmV2aXNpb25zPzogUGFnZVJldmlzaW9uW10pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucGFnZSA9IHBhZ2U7XG4gICAgaWYgKHJldmlzaW9ucykge1xuICAgICAgdGhpcy5wdXNoKC4uLnJldmlzaW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElE44Gn5qSc57SiXG4gICAqIEBwYXJhbSBpZCAtIOODquODk+OCuOODp+ODs0lEXG4gICAqIEByZXR1cm5zIOODquODk+OCuOODp+ODs++8iOWtmOWcqOOBl+OBquOBhOWgtOWQiOOBr3VuZGVmaW5lZO+8iVxuICAgKi9cbiAgZmluZEJ5SWQoaWQ6IG51bWJlcik6IFBhZ2VSZXZpc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgocmV2aXNpb24pID0+IHJldmlzaW9uLmlkID09PSBpZCk7XG4gIH1cblxuICAvKipcbiAgICog5YWo44Oq44OT44K444On44Oz44Gu44K944O844K544KS5LiA5ous5Y+W5b6X44GZ44KLXG4gICAqIEByZXR1cm5zIOOCveODvOOCueaWh+Wtl+WIl+OBrumFjeWIl1xuICAgKi9cbiAgZ2V0U291cmNlcygpOiBXaWtpZG90UmVzdWx0QXN5bmM8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgdGhpcy5tYXAoYXN5bmMgKHJldmlzaW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXZpc2lvbi5nZXRTb3VyY2UoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCBzb3VyY2VzOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlhajjg6rjg5Pjgrjjg6fjg7Pjga5IVE1M44KS5LiA5ous5Y+W5b6X44GZ44KLXG4gICAqIEByZXR1cm5zIEhUTUzmloflrZfliJfjga7phY3liJdcbiAgICovXG4gIGdldEh0bWxzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxzdHJpbmdbXT4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICB0aGlzLm1hcChhc3luYyAocmV2aXNpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJldmlzaW9uLmdldEh0bWwoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCBIVE1MczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBQYWdlIH0gZnJvbSAnLi9wYWdlJztcblxuLyoqXG4gKiDjg5rjg7zjgrjjgr3jg7zjgrnjg4fjg7zjgr9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlU291cmNlRGF0YSB7XG4gIHBhZ2U6IFBhZ2U7XG4gIHdpa2lUZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICog44Oa44O844K444Gu44K944O844K544Kz44O844OJ77yIV2lraWRvdOiomOazle+8iVxuICovXG5leHBvcnQgY2xhc3MgUGFnZVNvdXJjZSB7XG4gIC8qKiDjgr3jg7zjgrnjgYzlsZ7jgZnjgovjg5rjg7zjgrggKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhZ2U6IFBhZ2U7XG5cbiAgLyoqIOOCveODvOOCueOCs+ODvOODie+8iFdpa2lkb3ToqJjms5XvvIkgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdpa2lUZXh0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogUGFnZVNvdXJjZURhdGEpIHtcbiAgICB0aGlzLnBhZ2UgPSBkYXRhLnBhZ2U7XG4gICAgdGhpcy53aWtpVGV4dCA9IGRhdGEud2lraVRleHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgUGFnZVNvdXJjZShwYWdlPSR7dGhpcy5wYWdlLmZ1bGxuYW1lfSwgbGVuZ3RoPSR7dGhpcy53aWtpVGV4dC5sZW5ndGh9KWA7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIgfSBmcm9tICcuLi91c2VyJztcbmltcG9ydCB0eXBlIHsgUGFnZSB9IGZyb20gJy4vcGFnZSc7XG5cbi8qKlxuICog44Oa44O844K45oqV56Wo44OH44O844K/XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVZvdGVEYXRhIHtcbiAgcGFnZTogUGFnZTtcbiAgdXNlcjogQWJzdHJhY3RVc2VyO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIOODmuODvOOCuOOBuOOBruaKleelqO+8iOODrOODvOODhuOCo+ODs+OCsO+8iVxuICovXG5leHBvcnQgY2xhc3MgUGFnZVZvdGUge1xuICAvKiog5oqV56Wo44GM5bGe44GZ44KL44Oa44O844K4ICovXG4gIHB1YmxpYyByZWFkb25seSBwYWdlOiBQYWdlO1xuXG4gIC8qKiDmipXnpajjgZfjgZ/jg6bjg7zjgrbjg7wgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXI6IEFic3RyYWN0VXNlcjtcblxuICAvKiog5oqV56Wo5YCk77yIKzEvLTEg44G+44Gf44GvIOaVsOWApO+8iSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBQYWdlVm90ZURhdGEpIHtcbiAgICB0aGlzLnBhZ2UgPSBkYXRhLnBhZ2U7XG4gICAgdGhpcy51c2VyID0gZGF0YS51c2VyO1xuICAgIHRoaXMudmFsdWUgPSBkYXRhLnZhbHVlO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFBhZ2VWb3RlKHVzZXI9JHt0aGlzLnVzZXIubmFtZX0sIHZhbHVlPSR7dGhpcy52YWx1ZX0pYDtcbiAgfVxufVxuXG4vKipcbiAqIOODmuODvOOCuOaKleelqOOCs+ODrOOCr+OCt+ODp+ODs1xuICovXG5leHBvcnQgY2xhc3MgUGFnZVZvdGVDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8UGFnZVZvdGU+IHtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2U6IFBhZ2U7XG5cbiAgY29uc3RydWN0b3IocGFnZTogUGFnZSwgdm90ZXM/OiBQYWdlVm90ZVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgIGlmICh2b3Rlcykge1xuICAgICAgdGhpcy5wdXNoKC4uLnZvdGVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog44Om44O844K244O844Gn5qSc57SiXG4gICAqIEBwYXJhbSB1c2VyIC0g5qSc57Si44GZ44KL44Om44O844K244O8XG4gICAqIEByZXR1cm5zIOaKleelqO+8iOWtmOWcqOOBl+OBquOBhOWgtOWQiOOBr3VuZGVmaW5lZO+8iVxuICAgKi9cbiAgZmluZEJ5VXNlcih1c2VyOiBBYnN0cmFjdFVzZXIpOiBQYWdlVm90ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgodm90ZSkgPT4gdm90ZS51c2VyLmlkID09PSB1c2VyLmlkKTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciB9IGZyb20gJy4uL3VzZXInO1xuXG4vKipcbiAqIOODmuODvOOCuOaknOe0ouOCr+OCqOODquOBruODkeODqeODoeODvOOCv1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFBhZ2VzUXVlcnlQYXJhbXMge1xuICAvKiog44Oa44O844K444K/44Kk44OX77yI5L6LOiAnbm9ybWFsJywgJ2FkbWluJ++8iSAqL1xuICBwYWdldHlwZT86IHN0cmluZztcbiAgLyoqIOOCq+ODhuOCtOODquWQjSAqL1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgLyoqIOaknOe0ouWvvuixoeOCv+OCsO+8iEFOROadoeS7tu+8iSAqL1xuICB0YWdzPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIC8qKiDopqrjg5rjg7zjgrjlkI0gKi9cbiAgcGFyZW50Pzogc3RyaW5nO1xuICAvKiog44Oq44Oz44Kv5YWI44Oa44O844K45ZCNICovXG4gIGxpbmtUbz86IHN0cmluZztcbiAgLyoqIOS9nOaIkOaXpeaZguadoeS7tiAqL1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKiDmm7TmlrDml6XmmYLmnaHku7YgKi9cbiAgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKiog5L2c5oiQ6ICFICovXG4gIGNyZWF0ZWRCeT86IEFic3RyYWN0VXNlciB8IHN0cmluZztcbiAgLyoqIOODrOODvOODhuOCo+ODs+OCsOadoeS7tiAqL1xuICByYXRpbmc/OiBzdHJpbmc7XG4gIC8qKiDmipXnpajmlbDmnaHku7YgKi9cbiAgdm90ZXM/OiBzdHJpbmc7XG4gIC8qKiDjg5rjg7zjgrjlkI3mnaHku7YgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIOODleODq+ODjeODvOODoO+8iOWujOWFqOS4gOiHtO+8iSAqL1xuICBmdWxsbmFtZT86IHN0cmluZztcbiAgLyoqIOevhOWbsuaMh+WumiAqL1xuICByYW5nZT86IHN0cmluZztcbiAgLyoqIOOCveODvOODiOmghu+8iOS+izogJ2NyZWF0ZWRfYXQgZGVzYyfvvIkgKi9cbiAgb3JkZXI/OiBzdHJpbmc7XG4gIC8qKiDlj5blvpfplovlp4vkvY3nva4gKi9cbiAgb2Zmc2V0PzogbnVtYmVyO1xuICAvKiog5Y+W5b6X5Lu25pWw5Yi26ZmQICovXG4gIGxpbWl0PzogbnVtYmVyO1xuICAvKiogMeODmuODvOOCuOOBguOBn+OCiuS7tuaVsCAqL1xuICBwZXJQYWdlPzogbnVtYmVyO1xuICAvKiog5YCL5Yil6KGo56S6ICovXG4gIHNlcGFyYXRlPzogc3RyaW5nO1xuICAvKiog44Op44OD44OR44O86KGo56S6ICovXG4gIHdyYXBwZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICog44OH44OV44Kp44Or44OI44GuMeODmuODvOOCuOOBguOBn+OCiuS7tuaVsFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QRVJfUEFHRSA9IDI1MDtcblxuLyoqXG4gKiDjg4fjg5Xjgqnjg6vjg4jjga7jg6Ljgrjjg6Xjg7zjg6vjg5zjg4fjgqPjg5XjgqPjg7zjg6vjg4lcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTU9EVUxFX0JPRFkgPSBbXG4gICdmdWxsbmFtZScsXG4gICdjYXRlZ29yeScsXG4gICduYW1lJyxcbiAgJ3RpdGxlJyxcbiAgJ2NyZWF0ZWRfYXQnLFxuICAnY3JlYXRlZF9ieV9saW5rZWQnLFxuICAndXBkYXRlZF9hdCcsXG4gICd1cGRhdGVkX2J5X2xpbmtlZCcsXG4gICdjb21tZW50ZWRfYXQnLFxuICAnY29tbWVudGVkX2J5X2xpbmtlZCcsXG4gICdwYXJlbnRfZnVsbG5hbWUnLFxuICAnY29tbWVudHMnLFxuICAnc2l6ZScsXG4gICdjaGlsZHJlbicsXG4gICdyYXRpbmdfdm90ZXMnLFxuICAncmF0aW5nJyxcbiAgJ3JhdGluZ19wZXJjZW50JyxcbiAgJ3JldmlzaW9ucycsXG4gICd0YWdzJyxcbiAgJ190YWdzJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICog44Oa44O844K45qSc57Si44Kv44Ko44OqXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWFyY2hQYWdlc1F1ZXJ5IHtcbiAgLyoqIOODmuODvOOCuOOCv+OCpOODlyAqL1xuICBwYWdldHlwZTogc3RyaW5nO1xuICAvKiog44Kr44OG44K044OqICovXG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIC8qKiDjgr/jgrAgKi9cbiAgdGFnczogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuICAvKiog6Kaq44Oa44O844K4ICovXG4gIHBhcmVudDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIOODquODs+OCr+WFiCAqL1xuICBsaW5rVG86IHN0cmluZyB8IG51bGw7XG4gIC8qKiDkvZzmiJDml6XmmYLmnaHku7YgKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmcgfCBudWxsO1xuICAvKiog5pu05paw5pel5pmC5p2h5Lu2ICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIOS9nOaIkOiAhSAqL1xuICBjcmVhdGVkQnk6IEFic3RyYWN0VXNlciB8IHN0cmluZyB8IG51bGw7XG4gIC8qKiDjg6zjg7zjg4bjgqPjg7PjgrDmnaHku7YgKi9cbiAgcmF0aW5nOiBzdHJpbmcgfCBudWxsO1xuICAvKiog5oqV56Wo5pWw5p2h5Lu2ICovXG4gIHZvdGVzOiBzdHJpbmcgfCBudWxsO1xuICAvKiog44Oa44O844K45ZCN5p2h5Lu2ICovXG4gIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gIC8qKiDjg5Xjg6vjg43jg7zjg6DmnaHku7YgKi9cbiAgZnVsbG5hbWU6IHN0cmluZyB8IG51bGw7XG4gIC8qKiDnr4Tlm7IgKi9cbiAgcmFuZ2U6IHN0cmluZyB8IG51bGw7XG4gIC8qKiDjgr3jg7zjg4jpoIYgKi9cbiAgb3JkZXI6IHN0cmluZztcbiAgLyoqIOOCquODleOCu+ODg+ODiCAqL1xuICBvZmZzZXQ6IG51bWJlcjtcbiAgLyoqIOWPluW+l+S7tuaVsOWItumZkCAqL1xuICBsaW1pdDogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIDHjg5rjg7zjgrjjgYLjgZ/jgorku7bmlbAgKi9cbiAgcGVyUGFnZTogbnVtYmVyO1xuICAvKiog5YCL5Yil6KGo56S6ICovXG4gIHNlcGFyYXRlOiBzdHJpbmc7XG4gIC8qKiDjg6njg4Pjg5Hjg7zooajnpLogKi9cbiAgd3JhcHBlcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogU2VhcmNoUGFnZXNRdWVyeVBhcmFtcyA9IHt9KSB7XG4gICAgdGhpcy5wYWdldHlwZSA9IHBhcmFtcy5wYWdldHlwZSA/PyAnKic7XG4gICAgdGhpcy5jYXRlZ29yeSA9IHBhcmFtcy5jYXRlZ29yeSA/PyAnKic7XG4gICAgdGhpcy50YWdzID0gcGFyYW1zLnRhZ3MgPz8gbnVsbDtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmFtcy5wYXJlbnQgPz8gbnVsbDtcbiAgICB0aGlzLmxpbmtUbyA9IHBhcmFtcy5saW5rVG8gPz8gbnVsbDtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHBhcmFtcy5jcmVhdGVkQXQgPz8gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IHBhcmFtcy51cGRhdGVkQXQgPz8gbnVsbDtcbiAgICB0aGlzLmNyZWF0ZWRCeSA9IHBhcmFtcy5jcmVhdGVkQnkgPz8gbnVsbDtcbiAgICB0aGlzLnJhdGluZyA9IHBhcmFtcy5yYXRpbmcgPz8gbnVsbDtcbiAgICB0aGlzLnZvdGVzID0gcGFyYW1zLnZvdGVzID8/IG51bGw7XG4gICAgdGhpcy5uYW1lID0gcGFyYW1zLm5hbWUgPz8gbnVsbDtcbiAgICB0aGlzLmZ1bGxuYW1lID0gcGFyYW1zLmZ1bGxuYW1lID8/IG51bGw7XG4gICAgdGhpcy5yYW5nZSA9IHBhcmFtcy5yYW5nZSA/PyBudWxsO1xuICAgIHRoaXMub3JkZXIgPSBwYXJhbXMub3JkZXIgPz8gJ2NyZWF0ZWRfYXQgZGVzYyc7XG4gICAgdGhpcy5vZmZzZXQgPSBwYXJhbXMub2Zmc2V0ID8/IDA7XG4gICAgdGhpcy5saW1pdCA9IHBhcmFtcy5saW1pdCA/PyBudWxsO1xuICAgIHRoaXMucGVyUGFnZSA9IHBhcmFtcy5wZXJQYWdlID8/IERFRkFVTFRfUEVSX1BBR0U7XG4gICAgdGhpcy5zZXBhcmF0ZSA9IHBhcmFtcy5zZXBhcmF0ZSA/PyAnbm8nO1xuICAgIHRoaXMud3JhcHBlciA9IHBhcmFtcy53cmFwcGVyID8/ICdubyc7XG4gIH1cblxuICAvKipcbiAgICog6L6e5pu45b2i5byP44Gr5aSJ5o+bXG4gICAqL1xuICBhc0RpY3QoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmICh0aGlzLnBhZ2V0eXBlICE9PSAnKicpIHJlc3VsdC5wYWdldHlwZSA9IHRoaXMucGFnZXR5cGU7XG4gICAgaWYgKHRoaXMuY2F0ZWdvcnkgIT09ICcqJykgcmVzdWx0LmNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeTtcbiAgICBpZiAodGhpcy50YWdzICE9PSBudWxsKSB7XG4gICAgICByZXN1bHQudGFncyA9IEFycmF5LmlzQXJyYXkodGhpcy50YWdzKSA/IHRoaXMudGFncy5qb2luKCcgJykgOiB0aGlzLnRhZ3M7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbCkgcmVzdWx0LnBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgIGlmICh0aGlzLmxpbmtUbyAhPT0gbnVsbCkgcmVzdWx0LmxpbmtfdG8gPSB0aGlzLmxpbmtUbztcbiAgICBpZiAodGhpcy5jcmVhdGVkQXQgIT09IG51bGwpIHJlc3VsdC5jcmVhdGVkX2F0ID0gdGhpcy5jcmVhdGVkQXQ7XG4gICAgaWYgKHRoaXMudXBkYXRlZEF0ICE9PSBudWxsKSByZXN1bHQudXBkYXRlZF9hdCA9IHRoaXMudXBkYXRlZEF0O1xuICAgIGlmICh0aGlzLmNyZWF0ZWRCeSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0LmNyZWF0ZWRfYnkgPSB0eXBlb2YgdGhpcy5jcmVhdGVkQnkgPT09ICdzdHJpbmcnID8gdGhpcy5jcmVhdGVkQnkgOiB0aGlzLmNyZWF0ZWRCeS5uYW1lO1xuICAgIH1cbiAgICBpZiAodGhpcy5yYXRpbmcgIT09IG51bGwpIHJlc3VsdC5yYXRpbmcgPSB0aGlzLnJhdGluZztcbiAgICBpZiAodGhpcy52b3RlcyAhPT0gbnVsbCkgcmVzdWx0LnZvdGVzID0gdGhpcy52b3RlcztcbiAgICBpZiAodGhpcy5uYW1lICE9PSBudWxsKSByZXN1bHQubmFtZSA9IHRoaXMubmFtZTtcbiAgICBpZiAodGhpcy5mdWxsbmFtZSAhPT0gbnVsbCkgcmVzdWx0LmZ1bGxuYW1lID0gdGhpcy5mdWxsbmFtZTtcbiAgICBpZiAodGhpcy5yYW5nZSAhPT0gbnVsbCkgcmVzdWx0LnJhbmdlID0gdGhpcy5yYW5nZTtcblxuICAgIHJlc3VsdC5vcmRlciA9IHRoaXMub3JkZXI7XG4gICAgcmVzdWx0Lm9mZnNldCA9IHRoaXMub2Zmc2V0O1xuICAgIGlmICh0aGlzLmxpbWl0ICE9PSBudWxsKSByZXN1bHQubGltaXQgPSB0aGlzLmxpbWl0O1xuICAgIHJlc3VsdC5wZXJQYWdlID0gdGhpcy5wZXJQYWdlO1xuICAgIHJlc3VsdC5zZXBhcmF0ZSA9IHRoaXMuc2VwYXJhdGU7XG4gICAgcmVzdWx0LndyYXBwZXIgPSB0aGlzLndyYXBwZXI7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgeyBOb0VsZW1lbnRFcnJvciwgVW5leHBlY3RlZEVycm9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VPZGF0ZSwgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHR5cGUgeyBTaXRlIH0gZnJvbSAnLi4vc2l0ZSc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciB9IGZyb20gJy4uL3VzZXInO1xuXG4vKipcbiAqIOOCteOCpOODiOWkieabtOWxpeattOODh+ODvOOCv1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpdGVDaGFuZ2VEYXRhIHtcbiAgc2l0ZTogU2l0ZTtcbiAgcGFnZUZ1bGxuYW1lOiBzdHJpbmc7XG4gIHBhZ2VUaXRsZTogc3RyaW5nO1xuICByZXZpc2lvbk5vOiBudW1iZXI7XG4gIGNoYW5nZWRCeTogQWJzdHJhY3RVc2VyIHwgbnVsbDtcbiAgY2hhbmdlZEF0OiBEYXRlIHwgbnVsbDtcbiAgZmxhZ3M6IHN0cmluZ1tdO1xuICBjb21tZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICog44K144Kk44OI5aSJ5pu05bGl5q20XG4gKi9cbmV4cG9ydCBjbGFzcyBTaXRlQ2hhbmdlIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlRnVsbG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmV2aXNpb25ObzogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlZEJ5OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlZEF0OiBEYXRlIHwgbnVsbDtcbiAgcHVibGljIHJlYWRvbmx5IGZsYWdzOiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1lbnQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTaXRlQ2hhbmdlRGF0YSkge1xuICAgIHRoaXMuc2l0ZSA9IGRhdGEuc2l0ZTtcbiAgICB0aGlzLnBhZ2VGdWxsbmFtZSA9IGRhdGEucGFnZUZ1bGxuYW1lO1xuICAgIHRoaXMucGFnZVRpdGxlID0gZGF0YS5wYWdlVGl0bGU7XG4gICAgdGhpcy5yZXZpc2lvbk5vID0gZGF0YS5yZXZpc2lvbk5vO1xuICAgIHRoaXMuY2hhbmdlZEJ5ID0gZGF0YS5jaGFuZ2VkQnk7XG4gICAgdGhpcy5jaGFuZ2VkQXQgPSBkYXRhLmNoYW5nZWRBdDtcbiAgICB0aGlzLmZsYWdzID0gZGF0YS5mbGFncztcbiAgICB0aGlzLmNvbW1lbnQgPSBkYXRhLmNvbW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICog44Oa44O844K4VVJMXG4gICAqL1xuICBnZXRQYWdlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2l0ZS5nZXRCYXNlVXJsKCl9LyR7dGhpcy5wYWdlRnVsbG5hbWV9YDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBTaXRlQ2hhbmdlKHBhZ2U9JHt0aGlzLnBhZ2VGdWxsbmFtZX0sIHJldj0ke3RoaXMucmV2aXNpb25Ob30sIGJ5PSR7dGhpcy5jaGFuZ2VkQnl9KWA7XG4gIH1cbn1cblxuLyoqXG4gKiDjgrXjgqTjg4jlpInmm7TlsaXmrbTjgrPjg6zjgq/jgrfjg6fjg7NcbiAqL1xuZXhwb3J0IGNsYXNzIFNpdGVDaGFuZ2VDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8U2l0ZUNoYW5nZT4ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcblxuICBjb25zdHJ1Y3RvcihzaXRlOiBTaXRlLCBjaGFuZ2VzPzogU2l0ZUNoYW5nZVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNpdGUgPSBzaXRlO1xuICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnB1c2goLi4uY2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOacgOi/keOBruWkieabtOWxpeattOOCkuWPluW+l+OBmeOCi1xuICAgKiBAcGFyYW0gc2l0ZSAtIOOCteOCpOODiFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIOOCquODl+OCt+ODp+ODs1xuICAgKiBAcmV0dXJucyDlpInmm7TlsaXmrbTjgrPjg6zjgq/jgrfjg6fjg7NcbiAgICovXG4gIHN0YXRpYyBhY3F1aXJlKFxuICAgIHNpdGU6IFNpdGUsXG4gICAgb3B0aW9ucz86IHsgcGVyUGFnZT86IG51bWJlcjsgcGFnZT86IG51bWJlcjsgbGltaXQ/OiBudW1iZXIgfVxuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8U2l0ZUNoYW5nZUNvbGxlY3Rpb24+IHtcbiAgICBjb25zdCBwZXJQYWdlID0gb3B0aW9ucz8ucGVyUGFnZSA/PyAyMDtcbiAgICBjb25zdCBwYWdlID0gb3B0aW9ucz8ucGFnZSA/PyAxO1xuICAgIGNvbnN0IGxpbWl0ID0gb3B0aW9ucz8ubGltaXQ7XG5cbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdjaGFuZ2VzL1NpdGVDaGFuZ2VzTGlzdE1vZHVsZScsXG4gICAgICAgICAgICBwZXJwYWdlOiBwZXJQYWdlLFxuICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignRW1wdHkgcmVzcG9uc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0bWwgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoaHRtbCk7XG4gICAgICAgIGNvbnN0IGNoYW5nZXM6IFNpdGVDaGFuZ2VbXSA9IFtdO1xuXG4gICAgICAgIC8vIOODhuODvOODluODq+ihjOOCkuODkeODvOOCuVxuICAgICAgICAkKCd0YWJsZS53aWtpLWNvbnRlbnQtdGFibGUgdHInKS5lYWNoKChfaSwgZWxlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0ICRyb3cgPSAkKGVsZW0pO1xuICAgICAgICAgIGNvbnN0ICRjZWxscyA9ICRyb3cuZmluZCgndGQnKTtcbiAgICAgICAgICBpZiAoJGNlbGxzLmxlbmd0aCA8IDQpIHJldHVybjtcblxuICAgICAgICAgIC8vIOODmuODvOOCuOODquODs+OCr1xuICAgICAgICAgIGNvbnN0IHBhZ2VMaW5rID0gJCgkY2VsbHNbMF0pLmZpbmQoJ2EnKTtcbiAgICAgICAgICBjb25zdCBocmVmID0gcGFnZUxpbmsuYXR0cignaHJlZicpID8/ICcnO1xuICAgICAgICAgIGNvbnN0IHBhZ2VGdWxsbmFtZSA9IGhyZWYucmVwbGFjZSgvXlxcLy8sICcnKS5zcGxpdCgnLycpWzBdID8/ICcnO1xuICAgICAgICAgIGNvbnN0IHBhZ2VUaXRsZSA9IHBhZ2VMaW5rLnRleHQoKS50cmltKCk7XG5cbiAgICAgICAgICAvLyDjg6rjg5Pjgrjjg6fjg7Pnlarlj7dcbiAgICAgICAgICBjb25zdCByZXZUZXh0ID0gJCgkY2VsbHNbMV0pLnRleHQoKS50cmltKCk7XG4gICAgICAgICAgY29uc3QgcmV2TWF0Y2ggPSByZXZUZXh0Lm1hdGNoKC8oXFxkKykvKTtcbiAgICAgICAgICBjb25zdCByZXZpc2lvbk5vID0gcmV2TWF0Y2g/LlsxXSA/IE51bWJlci5wYXJzZUludChyZXZNYXRjaFsxXSwgMTApIDogMDtcblxuICAgICAgICAgIC8vIOODleODqeOCsFxuICAgICAgICAgIGNvbnN0IGZsYWdzQ2VsbCA9ICQoJGNlbGxzWzJdKTtcbiAgICAgICAgICBjb25zdCBmbGFnczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBmbGFnc0NlbGwuZmluZCgnc3BhbicpLmVhY2goKF9qLCBmbGFnRWxlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmxhZ0NsYXNzID0gJChmbGFnRWxlbSkuYXR0cignY2xhc3MnKSA/PyAnJztcbiAgICAgICAgICAgIGlmIChmbGFnQ2xhc3MuaW5jbHVkZXMoJ3NwYW50aXAnKSkge1xuICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9ICQoZmxhZ0VsZW0pLmF0dHIoJ3RpdGxlJykgPz8gJyc7XG4gICAgICAgICAgICAgIGlmICh0aXRsZSkgZmxhZ3MucHVzaCh0aXRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyDjg6bjg7zjgrbjg7zjgajml6XmmYJcbiAgICAgICAgICBjb25zdCBpbmZvQ2VsbCA9ICQoJGNlbGxzWzNdKTtcbiAgICAgICAgICBjb25zdCB1c2VyRWxlbSA9IGluZm9DZWxsLmZpbmQoJ3NwYW4ucHJpbnR1c2VyJyk7XG4gICAgICAgICAgY29uc3QgY2hhbmdlZEJ5ID0gdXNlckVsZW0ubGVuZ3RoID4gMCA/IHBhcnNlVXNlcihzaXRlLmNsaWVudCwgdXNlckVsZW0pIDogbnVsbDtcblxuICAgICAgICAgIGNvbnN0IG9kYXRlRWxlbSA9IGluZm9DZWxsLmZpbmQoJ3NwYW4ub2RhdGUnKTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkQXQgPSBvZGF0ZUVsZW0ubGVuZ3RoID4gMCA/IHBhcnNlT2RhdGUob2RhdGVFbGVtKSA6IG51bGw7XG5cbiAgICAgICAgICAvLyDjgrPjg6Hjg7Pjg4hcbiAgICAgICAgICBjb25zdCBjb21tZW50RWxlbSA9IGluZm9DZWxsLmZpbmQoJ3NwYW4uY29tbWVudHMnKTtcbiAgICAgICAgICBjb25zdCBjb21tZW50ID0gY29tbWVudEVsZW1cbiAgICAgICAgICAgIC50ZXh0KClcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eW1wiXCJdfFtcIlwiXSQvZywgJycpO1xuXG4gICAgICAgICAgY2hhbmdlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFNpdGVDaGFuZ2Uoe1xuICAgICAgICAgICAgICBzaXRlLFxuICAgICAgICAgICAgICBwYWdlRnVsbG5hbWUsXG4gICAgICAgICAgICAgIHBhZ2VUaXRsZSxcbiAgICAgICAgICAgICAgcmV2aXNpb25ObyxcbiAgICAgICAgICAgICAgY2hhbmdlZEJ5LFxuICAgICAgICAgICAgICBjaGFuZ2VkQXQsXG4gICAgICAgICAgICAgIGZsYWdzLFxuICAgICAgICAgICAgICBjb21tZW50LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBsaW1pdOOBjOaMh+WumuOBleOCjOOBpuOBhOOCi+WgtOWQiOOBr+e1kOaenOOCkuWItumZkFxuICAgICAgICBjb25zdCBsaW1pdGVkQ2hhbmdlcyA9IGxpbWl0ICE9PSB1bmRlZmluZWQgPyBjaGFuZ2VzLnNsaWNlKDAsIGxpbWl0KSA6IGNoYW5nZXM7XG4gICAgICAgIHJldHVybiBuZXcgU2l0ZUNoYW5nZUNvbGxlY3Rpb24oc2l0ZSwgbGltaXRlZENoYW5nZXMpO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGFjcXVpcmUgc2l0ZSBjaGFuZ2VzOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi91dGlsL3BhcnNlcic7XG5pbXBvcnQge1xuICBQYWdlLFxuICBQYWdlQ29sbGVjdGlvbixcbiAgU2VhcmNoUGFnZXNRdWVyeSxcbiAgdHlwZSBTZWFyY2hQYWdlc1F1ZXJ5UGFyYW1zLFxuICBTaXRlQ2hhbmdlQ29sbGVjdGlvbixcbn0gZnJvbSAnLi4vLi4vcGFnZSc7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcblxuLyoqXG4gKiDjg5rjg7zjgrjkuIDopqfmk43kvZzjgqLjgq/jgrvjgrVcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VzQWNjZXNzb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcblxuICBjb25zdHJ1Y3RvcihzaXRlOiBTaXRlKSB7XG4gICAgdGhpcy5zaXRlID0gc2l0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmnaHku7bjgavlkIjjgYbjg5rjg7zjgrjjgpLmpJzntKLjgZnjgotcbiAgICogQHBhcmFtIHBhcmFtcyAtIOaknOe0ouadoeS7tlxuICAgKiBAcmV0dXJucyDjg5rjg7zjgrjjgrPjg6zjgq/jgrfjg6fjg7NcbiAgICovXG4gIHNlYXJjaChwYXJhbXM/OiBTZWFyY2hQYWdlc1F1ZXJ5UGFyYW1zKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgU2VhcmNoUGFnZXNRdWVyeShwYXJhbXMpO1xuICAgICAgICBjb25zdCB1c2VyUGFyc2VyID0gcGFyc2VVc2VyLmJpbmQobnVsbCwgdGhpcy5zaXRlLmNsaWVudCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUGFnZUNvbGxlY3Rpb24uc2VhcmNoUGFnZXModGhpcy5zaXRlLCB1c2VyUGFyc2VyLCBxdWVyeSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQudmFsdWU7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gc2VhcmNoIHBhZ2VzOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOWFqOODmuODvOOCuOOCkuWPluW+l+OBmeOCi1xuICAgKiBAcmV0dXJucyDjg5rjg7zjgrjjgrPjg6zjgq/jgrfjg6fjg7NcbiAgICovXG4gIGFsbCgpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2goe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIOacgOi/keOBruWkieabtOWxpeattOOCkuWPluW+l+OBmeOCi1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIOOCquODl+OCt+ODp+ODs1xuICAgKiBAcGFyYW0gb3B0aW9ucy5wZXJQYWdlIC0gMeODmuODvOOCuOOBguOBn+OCiuOBruS7tuaVsO+8iOODh+ODleOCqeODq+ODiDogMjDvvIlcbiAgICogQHBhcmFtIG9wdGlvbnMucGFnZSAtIOODmuODvOOCuOeVquWPt++8iOODh+ODleOCqeODq+ODiDogMe+8iVxuICAgKiBAcmV0dXJucyDlpInmm7TlsaXmrbTjgrPjg6zjgq/jgrfjg6fjg7NcbiAgICovXG4gIGdldFJlY2VudENoYW5nZXMob3B0aW9ucz86IHtcbiAgICBwZXJQYWdlPzogbnVtYmVyO1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gIH0pOiBXaWtpZG90UmVzdWx0QXN5bmM8U2l0ZUNoYW5nZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gU2l0ZUNoYW5nZUNvbGxlY3Rpb24uYWNxdWlyZSh0aGlzLnNpdGUsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCB7XG4gIFBhZ2UsXG4gIFBhZ2VDb2xsZWN0aW9uLFxuICBTZWFyY2hQYWdlc1F1ZXJ5LFxuICBTaXRlQ2hhbmdlQ29sbGVjdGlvbixcbiAgdHlwZSBTZWFyY2hQYWdlc1F1ZXJ5UGFyYW1zLFxufTtcbiIsCiAgICAiaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbmltcG9ydCB7IE5vRWxlbWVudEVycm9yLCBOb3RGb3VuZEV4Y2VwdGlvbiwgVW5leHBlY3RlZEVycm9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBTUNSZXF1ZXN0Qm9keSwgQU1DUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jb25uZWN0b3InO1xuaW1wb3J0IHR5cGUgeyBDbGllbnQgfSBmcm9tICcuLi9jbGllbnQvY2xpZW50JztcbmltcG9ydCB7IEZvcnVtQWNjZXNzb3IgfSBmcm9tICcuL2FjY2Vzc29ycy9mb3J1bS1hY2Nlc3Nvcic7XG5pbXBvcnQgeyBNZW1iZXJBY2Nlc3NvciB9IGZyb20gJy4vYWNjZXNzb3JzL21lbWJlci1hY2Nlc3Nvcic7XG5pbXBvcnQgeyBQYWdlQWNjZXNzb3IgfSBmcm9tICcuL2FjY2Vzc29ycy9wYWdlLWFjY2Vzc29yJztcbmltcG9ydCB7IFBhZ2VzQWNjZXNzb3IgfSBmcm9tICcuL2FjY2Vzc29ycy9wYWdlcy1hY2Nlc3Nvcic7XG5cbi8qKlxuICog44K144Kk44OI44OH44O844K/XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2l0ZURhdGEge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1bml4TmFtZTogc3RyaW5nO1xuICBkb21haW46IHN0cmluZztcbiAgc3NsU3VwcG9ydGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIOOCteOCpOODiOOCr+ODqeOCuVxuICovXG5leHBvcnQgY2xhc3MgU2l0ZSB7XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IENsaWVudDtcblxuICAvKiog44K144Kk44OISUQgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkOiBudW1iZXI7XG5cbiAgLyoqIOOCteOCpOODiOOCv+OCpOODiOODqyAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcblxuICAvKiogVU5JWOWQje+8iOS+izogc2NwLWpw77yJICovXG4gIHB1YmxpYyByZWFkb25seSB1bml4TmFtZTogc3RyaW5nO1xuXG4gIC8qKiDjg4njg6HjgqTjg7MgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbjogc3RyaW5nO1xuXG4gIC8qKiBTU0zlr77lv5zjg5Xjg6njgrAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNzbFN1cHBvcnRlZDogYm9vbGVhbjtcblxuICAvKiog44Oa44O844K444Ki44Kv44K744K1ICovXG4gIHByaXZhdGUgX3BhZ2U6IFBhZ2VBY2Nlc3NvciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiDjg5rjg7zjgrjkuIDopqfjgqLjgq/jgrvjgrUgKi9cbiAgcHJpdmF0ZSBfcGFnZXM6IFBhZ2VzQWNjZXNzb3IgfCBudWxsID0gbnVsbDtcblxuICAvKiog44OV44Kp44O844Op44Og44Ki44Kv44K744K1ICovXG4gIHByaXZhdGUgX2ZvcnVtOiBGb3J1bUFjY2Vzc29yIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIOODoeODs+ODkOODvOOCouOCr+OCu+OCtSAqL1xuICBwcml2YXRlIF9tZW1iZXI6IE1lbWJlckFjY2Vzc29yIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnQsIGRhdGE6IFNpdGVEYXRhKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy50aXRsZSA9IGRhdGEudGl0bGU7XG4gICAgdGhpcy51bml4TmFtZSA9IGRhdGEudW5peE5hbWU7XG4gICAgdGhpcy5kb21haW4gPSBkYXRhLmRvbWFpbjtcbiAgICB0aGlzLnNzbFN1cHBvcnRlZCA9IGRhdGEuc3NsU3VwcG9ydGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIOODmuODvOOCuOOCouOCr+OCu+OCteOCkuWPluW+l1xuICAgKi9cbiAgZ2V0IHBhZ2UoKTogUGFnZUFjY2Vzc29yIHtcbiAgICBpZiAoIXRoaXMuX3BhZ2UpIHtcbiAgICAgIHRoaXMuX3BhZ2UgPSBuZXcgUGFnZUFjY2Vzc29yKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg5rjg7zjgrjkuIDopqfjgqLjgq/jgrvjgrXjgpLlj5blvpdcbiAgICovXG4gIGdldCBwYWdlcygpOiBQYWdlc0FjY2Vzc29yIHtcbiAgICBpZiAoIXRoaXMuX3BhZ2VzKSB7XG4gICAgICB0aGlzLl9wYWdlcyA9IG5ldyBQYWdlc0FjY2Vzc29yKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFnZXM7XG4gIH1cblxuICAvKipcbiAgICog44OV44Kp44O844Op44Og44Ki44Kv44K744K144KS5Y+W5b6XXG4gICAqL1xuICBnZXQgZm9ydW0oKTogRm9ydW1BY2Nlc3NvciB7XG4gICAgaWYgKCF0aGlzLl9mb3J1bSkge1xuICAgICAgdGhpcy5fZm9ydW0gPSBuZXcgRm9ydW1BY2Nlc3Nvcih0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2ZvcnVtO1xuICB9XG5cbiAgLyoqXG4gICAqIOODoeODs+ODkOODvOOCouOCr+OCu+OCteOCkuWPluW+l1xuICAgKi9cbiAgZ2V0IG1lbWJlcigpOiBNZW1iZXJBY2Nlc3NvciB7XG4gICAgaWYgKCF0aGlzLl9tZW1iZXIpIHtcbiAgICAgIHRoaXMuX21lbWJlciA9IG5ldyBNZW1iZXJBY2Nlc3Nvcih0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX21lbWJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiDjgrXjgqTjg4jjga7jg5njg7zjgrlVUkzjgpLlj5blvpdcbiAgICovXG4gIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMuc3NsU3VwcG9ydGVkID8gJ2h0dHBzJyA6ICdodHRwJztcbiAgICByZXR1cm4gYCR7cHJvdG9jb2x9Oi8vJHt0aGlzLmRvbWFpbn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIOOCteOCpOODiOOBuOOBrkFNQ+ODquOCr+OCqOOCueODiOOCkuWun+ihjFxuICAgKiBAcGFyYW0gYm9kaWVzIC0g44Oq44Kv44Ko44K544OI44Oc44OH44Kj6YWN5YiXXG4gICAqIEByZXR1cm5zIEFNQ+ODrOOCueODneODs+OCuemFjeWIl1xuICAgKi9cbiAgYW1jUmVxdWVzdChib2RpZXM6IEFNQ1JlcXVlc3RCb2R5W10pOiBXaWtpZG90UmVzdWx0QXN5bmM8QU1DUmVzcG9uc2VbXT4ge1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5hbWNDbGllbnQucmVxdWVzdChib2RpZXMsIHRoaXMudW5peE5hbWUsIHRoaXMuc3NsU3VwcG9ydGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDljZjkuIDjga5BTUPjg6rjgq/jgqjjgrnjg4jjgpLlrp/ooYxcbiAgICogQHBhcmFtIGJvZHkgLSDjg6rjgq/jgqjjgrnjg4jjg5zjg4fjgqNcbiAgICogQHJldHVybnMgQU1D44Os44K544Od44Oz44K5XG4gICAqL1xuICBhbWNSZXF1ZXN0U2luZ2xlKGJvZHk6IEFNQ1JlcXVlc3RCb2R5KTogV2lraWRvdFJlc3VsdEFzeW5jPEFNQ1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hbWNSZXF1ZXN0KFtib2R5XSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ0FNQyByZXF1ZXN0IHJldHVybmVkIGVtcHR5IHJlc3BvbnNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBVbmV4cGVjdGVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEFNQyByZXF1ZXN0IGZhaWxlZDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVU5JWOWQjeOBi+OCieOCteOCpOODiOOCkuWPluW+l+OBmeOCi1xuICAgKiBAcGFyYW0gY2xpZW50IC0g44Kv44Op44Kk44Ki44Oz44OIXG4gICAqIEBwYXJhbSB1bml4TmFtZSAtIOOCteOCpOODiOOBrlVOSVjlkI3vvIjkvos6ICdzY3AtanAn77yJXG4gICAqIEByZXR1cm5zIOOCteOCpOODiFxuICAgKi9cbiAgc3RhdGljIGZyb21Vbml4TmFtZShjbGllbnQ6IENsaWVudCwgdW5peE5hbWU6IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzxTaXRlPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8g44K144Kk44OI44Oa44O844K444KS5Y+W5b6X77yISFRUUOOBp+ODquOCr+OCqOOCueODiOOBl+OAgeODquODgOOCpOODrOOCr+ODiOOBq+W+k+OBhu+8iVxuICAgICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7dW5peE5hbWV9Lndpa2lkb3QuY29tYDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBoZWFkZXJzOiBjbGllbnQuYW1jQ2xpZW50LmhlYWRlci5nZXRIZWFkZXJzKCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihgU2l0ZSBub3QgZm91bmQ6ICR7dW5peE5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBzaXRlOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoaHRtbCk7XG5cbiAgICAgICAgLy8gV0lLSVJFUVVFU1QuaW5mbyDjgpLop6PmnpBcbiAgICAgICAgY29uc3Qgc2NyaXB0cyA9ICQoJ3NjcmlwdCcpLnRvQXJyYXkoKTtcbiAgICAgICAgbGV0IHNpdGVJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBzaXRlVW5peE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgZG9tYWluOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgICAgICBmb3IgKGNvbnN0IHNjcmlwdCBvZiBzY3JpcHRzKSB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9ICQoc2NyaXB0KS5odG1sKCk7XG4gICAgICAgICAgaWYgKCFjb250ZW50IHx8ICFjb250ZW50LmluY2x1ZGVzKCdXSUtJUkVRVUVTVCcpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzaXRlSWRcbiAgICAgICAgICBjb25zdCBzaXRlSWRNYXRjaCA9IGNvbnRlbnQubWF0Y2goL1dJS0lSRVFVRVNUXFwuaW5mb1xcLnNpdGVJZFxccyo9XFxzKihcXGQrKS8pO1xuICAgICAgICAgIGlmIChzaXRlSWRNYXRjaD8uWzFdKSB7XG4gICAgICAgICAgICBzaXRlSWQgPSBOdW1iZXIucGFyc2VJbnQoc2l0ZUlkTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzaXRlVW5peE5hbWVcbiAgICAgICAgICBjb25zdCBzaXRlVW5peE5hbWVNYXRjaCA9IGNvbnRlbnQubWF0Y2goXG4gICAgICAgICAgICAvV0lLSVJFUVVFU1RcXC5pbmZvXFwuc2l0ZVVuaXhOYW1lXFxzKj1cXHMqW1wiJ10oW15cIiddKylbXCInXS9cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChzaXRlVW5peE5hbWVNYXRjaD8uWzFdKSB7XG4gICAgICAgICAgICBzaXRlVW5peE5hbWUgPSBzaXRlVW5peE5hbWVNYXRjaFsxXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBkb21haW5cbiAgICAgICAgICBjb25zdCBkb21haW5NYXRjaCA9IGNvbnRlbnQubWF0Y2goL1dJS0lSRVFVRVNUXFwuaW5mb1xcLmRvbWFpblxccyo9XFxzKltcIiddKFteXCInXSspW1wiJ10vKTtcbiAgICAgICAgICBpZiAoZG9tYWluTWF0Y2g/LlsxXSkge1xuICAgICAgICAgICAgZG9tYWluID0gZG9tYWluTWF0Y2hbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGl0bGUgZnJvbSA8dGl0bGU+IHRhZ1xuICAgICAgICB0aXRsZSA9ICQoJ3RpdGxlJykudGV4dCgpLnRyaW0oKSB8fCBudWxsO1xuICAgICAgICAvLyBSZW1vdmUgXCIgLSBXaWtpZG90XCIgc3VmZml4IGlmIHByZXNlbnRcbiAgICAgICAgaWYgKHRpdGxlPy5lbmRzV2l0aCgnIC0gV2lraWRvdCcpKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aXRsZS5zbGljZSgwLCAtMTApLnRyaW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaXRlSWQgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ1NpdGUgSUQgbm90IGZvdW5kIGluIFdJS0lSRVFVRVNUJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpdGVVbml4TmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHNpdGVVbml4TmFtZSA9IHVuaXhOYW1lOyAvLyBGYWxsYmFja1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb21haW4gPT09IG51bGwpIHtcbiAgICAgICAgICBkb21haW4gPSBgJHt1bml4TmFtZX0ud2lraWRvdC5jb21gOyAvLyBGYWxsYmFja1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRpdGxlID0gdW5peE5hbWU7IC8vIEZhbGxiYWNrXG4gICAgICAgIH1cblxuICAgICAgICAvLyBTU0zlr77lv5zjg4Hjgqfjg4Pjgq/vvIjjg6rjg4DjgqTjg6zjgq/jg4jlvozjga5VUkzjgYxodHRwc+OBp+Wni+OBvuOCi+OBi+OBqeOBhuOBi+OBp+WIpOaWre+8iVxuICAgICAgICBjb25zdCBzc2xTdXBwb3J0ZWQgPSByZXNwb25zZS51cmwuc3RhcnRzV2l0aCgnaHR0cHMnKTtcblxuICAgICAgICByZXR1cm4gbmV3IFNpdGUoY2xpZW50LCB7XG4gICAgICAgICAgaWQ6IHNpdGVJZCxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB1bml4TmFtZTogc2l0ZVVuaXhOYW1lLFxuICAgICAgICAgIGRvbWFpbixcbiAgICAgICAgICBzc2xTdXBwb3J0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbiB8fCBlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IHNpdGU6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFNpdGUoaWQ9JHt0aGlzLmlkfSwgdW5peE5hbWU9JHt0aGlzLnVuaXhOYW1lfSwgdGl0bGU9JHt0aGlzLnRpdGxlfSlgO1xuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFNpdGUgfSBmcm9tICcuLi8uLi9zaXRlJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcblxuLyoqXG4gKiDjgrXjgqTjg4jmk43kvZzjgqLjgq/jgrvjgrVcbiAqL1xuZXhwb3J0IGNsYXNzIFNpdGVBY2Nlc3NvciB7XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IENsaWVudDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFVOSVjlkI3jgYvjgonjgrXjgqTjg4jjgpLlj5blvpfjgZnjgotcbiAgICpcbiAgICogQHBhcmFtIHVuaXhOYW1lIC0g44K144Kk44OI44GuVU5JWOWQje+8iOS+izogJ3NjcC1qcCfvvIlcbiAgICogQHJldHVybnMgUmVzdWx05Z6L44Gn44Op44OD44OX44GV44KM44Gf44K144Kk44OI44Kq44OW44K444Kn44Kv44OIXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc2l0ZVJlc3VsdCA9IGF3YWl0IGNsaWVudC5zaXRlLmdldCgnc2NwLWpwJyk7XG4gICAqIGlmICghc2l0ZVJlc3VsdC5pc09rKCkpIHtcbiAgICogICB0aHJvdyBuZXcgRXJyb3IoJ+OCteOCpOODiOOBruWPluW+l+OBq+WkseaVl+OBl+OBvuOBl+OBnycpO1xuICAgKiB9XG4gICAqIGNvbnN0IHNpdGUgPSBzaXRlUmVzdWx0LnZhbHVlO1xuICAgKiBgYGBcbiAgICovXG4gIGdldCh1bml4TmFtZTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPFNpdGU+IHtcbiAgICByZXR1cm4gU2l0ZS5mcm9tVW5peE5hbWUodGhpcy5jbGllbnQsIHVuaXhOYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgeyBTaXRlIH07XG4iLAogICAgImltcG9ydCB7IE5vdEZvdW5kRXhjZXB0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYywgd2RFcnJBc3luYywgd2RPa0FzeW5jIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFVzZXIsIHR5cGUgVXNlckNvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi91c2VyJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcblxuLyoqXG4gKiDjg6bjg7zjgrbjg7zlj5blvpfjgqrjg5fjgrfjg6fjg7NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRVc2VyT3B0aW9ucyB7XG4gIC8qKiDjg6bjg7zjgrbjg7zjgYzopovjgaTjgYvjgonjgarjgYTloLTlkIjjgavjgqjjg6njg7zjgpLnmbrnlJ/jgZXjgZvjgovvvIjjg4fjg5Xjgqnjg6vjg4g6IGZhbHNl77yJICovXG4gIHJhaXNlV2hlbk5vdEZvdW5kPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiDjg6bjg7zjgrbjg7zmk43kvZzjgqLjgq/jgrvjgrVcbiAqL1xuZXhwb3J0IGNsYXNzIFVzZXJBY2Nlc3NvciB7XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IENsaWVudDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIOODpuODvOOCtuODvOWQjeOBi+OCieODpuODvOOCtuODvOOCkuWPluW+l+OBmeOCi1xuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIOODpuODvOOCtuODvOWQjVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIOWPluW+l+OCquODl+OCt+ODp+ODs1xuICAgKiBAcmV0dXJucyBSZXN1bHTlnovjgafjg6njg4Pjg5fjgZXjgozjgZ/jg6bjg7zjgrbjg7zvvIjlrZjlnKjjgZfjgarjgYTloLTlkIjjga9udWxs44CBcmFpc2VXaGVuTm90Rm91bmTjgYx0cnVl44Gu5aC05ZCI44Gv44Ko44Op44O877yJXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdXNlclJlc3VsdCA9IGF3YWl0IGNsaWVudC51c2VyLmdldCgndXNlcm5hbWUnKTtcbiAgICogaWYgKCF1c2VyUmVzdWx0LmlzT2soKSkge1xuICAgKiAgIHRocm93IG5ldyBFcnJvcign44Om44O844K244O844Gu5Y+W5b6X44Gr5aSx5pWX44GX44G+44GX44GfJyk7XG4gICAqIH1cbiAgICogY29uc3QgdXNlciA9IHVzZXJSZXN1bHQudmFsdWU7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZywgb3B0aW9uczogR2V0VXNlck9wdGlvbnMgPSB7fSk6IFdpa2lkb3RSZXN1bHRBc3luYzxVc2VyIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgcmFpc2VXaGVuTm90Rm91bmQgPSBmYWxzZSB9ID0gb3B0aW9ucztcblxuICAgIHJldHVybiBVc2VyLmZyb21OYW1lKHRoaXMuY2xpZW50LCBuYW1lKS5hbmRUaGVuKCh1c2VyKSA9PiB7XG4gICAgICBpZiAodXNlciA9PT0gbnVsbCAmJiByYWlzZVdoZW5Ob3RGb3VuZCkge1xuICAgICAgICByZXR1cm4gd2RFcnJBc3luYyhuZXcgTm90Rm91bmRFeGNlcHRpb24oYFVzZXIgbm90IGZvdW5kOiAke25hbWV9YCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdkT2tBc3luYyh1c2VyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDopIfmlbDjg6bjg7zjgrbjg7zlkI3jgYvjgonjg6bjg7zjgrbjg7zjgpLlj5blvpfjgZnjgotcbiAgICogQHBhcmFtIG5hbWVzIC0g44Om44O844K244O85ZCN6YWN5YiXXG4gICAqIEBwYXJhbSBvcHRpb25zIC0g5Y+W5b6X44Kq44OX44K344On44OzXG4gICAqIEByZXR1cm5zIOODpuODvOOCtuODvOOCs+ODrOOCr+OCt+ODp+ODs++8iOWtmOWcqOOBl+OBquOBhOODpuODvOOCtuODvOOBr251bGzjgIFyYWlzZVdoZW5Ob3RGb3VuZOOBjHRydWXjga7loLTlkIjjga/jgqjjg6njg7zvvIlcbiAgICovXG4gIGdldE1hbnkobmFtZXM6IHN0cmluZ1tdLCBvcHRpb25zOiBHZXRVc2VyT3B0aW9ucyA9IHt9KTogV2lraWRvdFJlc3VsdEFzeW5jPFVzZXJDb2xsZWN0aW9uPiB7XG4gICAgY29uc3QgeyByYWlzZVdoZW5Ob3RGb3VuZCA9IGZhbHNlIH0gPSBvcHRpb25zO1xuXG4gICAgcmV0dXJuIFVzZXIuZnJvbU5hbWVzKHRoaXMuY2xpZW50LCBuYW1lcykuYW5kVGhlbigoY29sbGVjdGlvbikgPT4ge1xuICAgICAgaWYgKHJhaXNlV2hlbk5vdEZvdW5kKSB7XG4gICAgICAgIGNvbnN0IG5vdEZvdW5kTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gbmFtZXNbaV07XG4gICAgICAgICAgaWYgKGNvbGxlY3Rpb25baV0gPT09IG51bGwgJiYgbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBub3RGb3VuZE5hbWVzLnB1c2gobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub3RGb3VuZE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gd2RFcnJBc3luYyhuZXcgTm90Rm91bmRFeGNlcHRpb24oYFVzZXJzIG5vdCBmb3VuZDogJHtub3RGb3VuZE5hbWVzLmpvaW4oJywgJyl9YCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gd2RPa0FzeW5jKGNvbGxlY3Rpb24pO1xuICAgIH0pO1xuICB9XG59XG4iLAogICAgImltcG9ydCB7IExvZ2luUmVxdWlyZWRFcnJvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHtcbiAgZnJvbVByb21pc2UsXG4gIHR5cGUgV2lraWRvdFJlc3VsdCxcbiAgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMsXG4gIHdkRXJyLFxuICB3ZE9rLFxuICB3ZE9rQXN5bmMsXG59IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBBTUNDbGllbnQsIHR5cGUgQU1DQ29uZmlnLCBsb2dpbiwgbG9nb3V0IH0gZnJvbSAnLi4vLi4vY29ubmVjdG9yJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi91c2VyL3VzZXInO1xuaW1wb3J0IHsgUHJpdmF0ZU1lc3NhZ2VBY2Nlc3NvciB9IGZyb20gJy4vYWNjZXNzb3JzL3BtLWFjY2Vzc29yJztcbmltcG9ydCB7IFNpdGVBY2Nlc3NvciB9IGZyb20gJy4vYWNjZXNzb3JzL3NpdGUtYWNjZXNzb3InO1xuaW1wb3J0IHsgVXNlckFjY2Vzc29yIH0gZnJvbSAnLi9hY2Nlc3NvcnMvdXNlci1hY2Nlc3Nvcic7XG5cbi8qKlxuICog44Kv44Op44Kk44Ki44Oz44OI5L2c5oiQ44Kq44OX44K344On44OzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50T3B0aW9ucyB7XG4gIC8qKiBXaWtpZG9044Om44O844K244O85ZCNICovXG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBXaWtpZG9044OR44K544Ov44O844OJICovXG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuXG4gIC8qKiDjg5njg7zjgrnjg4njg6HjgqTjg7PvvIjjg4fjg5Xjgqnjg6vjg4g6IHdpa2lkb3QuY29t77yJICovXG4gIGRvbWFpbj86IHN0cmluZztcblxuICAvKiogQU1D6Kit5a6a44Kq44O844OQ44O844Op44Kk44OJICovXG4gIGFtY0NvbmZpZz86IFBhcnRpYWw8QU1DQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBXaWtpZG9044Kv44Op44Kk44Ki44Oz44OIXG4gKiDjg6njgqTjg5bjg6njg6rjga7jg6HjgqTjg7Pjgqjjg7Pjg4jjg6rjg53jgqTjg7Pjg4hcbiAqL1xuZXhwb3J0IGNsYXNzIENsaWVudCB7XG4gIC8qKiBBTUPjgq/jg6njgqTjgqLjg7Pjg4ggKi9cbiAgcHVibGljIHJlYWRvbmx5IGFtY0NsaWVudDogQU1DQ2xpZW50O1xuXG4gIC8qKiDjg5njg7zjgrnjg4njg6HjgqTjg7MgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbjogc3RyaW5nO1xuXG4gIC8qKiDjg6bjg7zjgrbjg7zmk43kvZzjgqLjgq/jgrvjgrUgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXI6IFVzZXJBY2Nlc3NvcjtcblxuICAvKiog44K144Kk44OI5pON5L2c44Ki44Kv44K744K1ICovXG4gIHB1YmxpYyByZWFkb25seSBzaXRlOiBTaXRlQWNjZXNzb3I7XG5cbiAgLyoqIOODl+ODqeOCpOODmeODvOODiOODoeODg+OCu+ODvOOCuOaTjeS9nOOCouOCr+OCu+OCtSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZU1lc3NhZ2U6IFByaXZhdGVNZXNzYWdlQWNjZXNzb3I7XG5cbiAgLyoqIOODreOCsOOCpOODs+S4reOBruODpuODvOOCtuODvOWQjSAqL1xuICBwcml2YXRlIF91c2VybmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKiog44Ot44Kw44Kk44Oz5Lit44Gu44Om44O844K244O8ICovXG4gIHByaXZhdGUgX21lOiBVc2VyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIOODl+ODqeOCpOODmeODvOODiOOCs+ODs+OCueODiOODqeOCr+OCv1xuICAgKiBjcmVhdGXjg6Hjgr3jg4Pjg4njgpLkvb/nlKjjgZfjgabjgqTjg7Pjgrnjgr/jg7PjgrnjgpLkvZzmiJDjgZnjgotcbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IoYW1jQ2xpZW50OiBBTUNDbGllbnQsIGRvbWFpbjogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICB0aGlzLmFtY0NsaWVudCA9IGFtY0NsaWVudDtcbiAgICB0aGlzLmRvbWFpbiA9IGRvbWFpbjtcbiAgICB0aGlzLl91c2VybmFtZSA9IHVzZXJuYW1lO1xuXG4gICAgLy8g44Ki44Kv44K744K144KS5Yid5pyf5YyWXG4gICAgdGhpcy51c2VyID0gbmV3IFVzZXJBY2Nlc3Nvcih0aGlzKTtcbiAgICB0aGlzLnNpdGUgPSBuZXcgU2l0ZUFjY2Vzc29yKHRoaXMpO1xuICAgIHRoaXMucHJpdmF0ZU1lc3NhZ2UgPSBuZXcgUHJpdmF0ZU1lc3NhZ2VBY2Nlc3Nvcih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg63jgrDjgqTjg7PkuK3jga7jg6bjg7zjgrbjg7zlkI3jgpLlj5blvpdcbiAgICovXG4gIGdldCB1c2VybmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlcm5hbWU7XG4gIH1cblxuICAvKipcbiAgICog44Ot44Kw44Kk44Oz5Lit44Gu44Om44O844K244O844KS5Y+W5b6XXG4gICAqIOODreOCsOOCpOODs+OBl+OBpuOBhOOBquOBhOWgtOWQiOOBr251bGxcbiAgICovXG4gIGdldCBtZSgpOiBVc2VyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21lO1xuICB9XG5cbiAgLyoqXG4gICAqIOOCr+ODqeOCpOOCouODs+ODiOOCkuS9nOaIkOOBmeOCi1xuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIOOCr+ODqeOCpOOCouODs+ODiOOCquODl+OCt+ODp+ODs1xuICAgKiBAcmV0dXJucyBSZXN1bHTlnovjgafjg6njg4Pjg5fjgZXjgozjgZ/jgq/jg6njgqTjgqLjg7Pjg4jjgqTjg7Pjgrnjgr/jg7PjgrlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBDbGllbnQgfSBmcm9tICdAdWt3aGF0bi93aWtpZG90JztcbiAgICpcbiAgICogLy8g44Kv44Op44Kk44Ki44Oz44OI44KS5L2c5oiQXG4gICAqIGNvbnN0IGNsaWVudFJlc3VsdCA9IGF3YWl0IENsaWVudC5jcmVhdGUoe1xuICAgKiAgIHVzZXJuYW1lOiAneW91cl91c2VybmFtZScsXG4gICAqICAgcGFzc3dvcmQ6ICd5b3VyX3Bhc3N3b3JkJyxcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFJlc3VsdOWei+OBquOBruOBp2lzT2soKeOBp+ODgeOCp+ODg+OCr+W+jOOAgS52YWx1ZeOBp+WPluW+l1xuICAgKiBpZiAoIWNsaWVudFJlc3VsdC5pc09rKCkpIHtcbiAgICogICB0aHJvdyBuZXcgRXJyb3IoJ+OCr+ODqeOCpOOCouODs+ODiOOBruS9nOaIkOOBq+WkseaVl+OBl+OBvuOBl+OBnycpO1xuICAgKiB9XG4gICAqIGNvbnN0IGNsaWVudCA9IGNsaWVudFJlc3VsdC52YWx1ZTtcbiAgICpcbiAgICogLy8g44GT44KM44GnY2xpZW50LnNpdGXnrYnjgavjgqLjgq/jgrvjgrnlj6/og71cbiAgICogY29uc3Qgc2l0ZVJlc3VsdCA9IGF3YWl0IGNsaWVudC5zaXRlLmdldCgnc2NwLWpwJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZShvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30pOiBXaWtpZG90UmVzdWx0QXN5bmM8Q2xpZW50PiB7XG4gICAgY29uc3QgeyB1c2VybmFtZSwgcGFzc3dvcmQsIGRvbWFpbiA9ICd3aWtpZG90LmNvbScsIGFtY0NvbmZpZyA9IHt9IH0gPSBvcHRpb25zO1xuXG4gICAgLy8gQU1D44Kv44Op44Kk44Ki44Oz44OI44KS5L2c5oiQXG4gICAgY29uc3QgYW1jQ2xpZW50ID0gbmV3IEFNQ0NsaWVudChhbWNDb25maWcsIGRvbWFpbik7XG5cbiAgICAvLyDoqo3oqLzmg4XloLHjgYzjgYLjgovloLTlkIjjga/jg63jgrDjgqTjg7NcbiAgICBpZiAodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KGFtY0NsaWVudCwgZG9tYWluLCB1c2VybmFtZSk7XG4gICAgICAgICAgY29uc3QgbG9naW5SZXN1bHQgPSBhd2FpdCBsb2dpbihjbGllbnQsIHVzZXJuYW1lLCBwYXNzd29yZCk7XG4gICAgICAgICAgaWYgKGxvZ2luUmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgIHRocm93IGxvZ2luUmVzdWx0LmVycm9yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIOODreOCsOOCpOODs+S4reOBruODpuODvOOCtuODvOaDheWgseOCkuWPluW+l1xuICAgICAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSBhd2FpdCBVc2VyLmZyb21OYW1lKGNsaWVudCwgdXNlcm5hbWUpO1xuICAgICAgICAgIGlmICh1c2VyUmVzdWx0LmlzT2soKSAmJiB1c2VyUmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICBjbGllbnQuX21lID0gdXNlclJlc3VsdC52YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgICAgICB9KSgpLFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgY2xpZW50OiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8g6KqN6Ki844Gq44GX44Gu44Kv44Op44Kk44Ki44Oz44OI44KS6L+U44GZXG4gICAgcmV0dXJuIHdkT2tBc3luYyhuZXcgQ2xpZW50KGFtY0NsaWVudCwgZG9tYWluKSk7XG4gIH1cblxuICAvKipcbiAgICog5pyq6KqN6Ki844Kv44Op44Kk44Ki44Oz44OI44KS5L2c5oiQ44GZ44KLXG4gICAqIEBwYXJhbSBvcHRpb25zIC0g44Kv44Op44Kk44Ki44Oz44OI44Kq44OX44K344On44Oz77yI6KqN6Ki85oOF5aCx5Lul5aSW77yJXG4gICAqIEByZXR1cm5zIOOCr+ODqeOCpOOCouODs+ODiOOCpOODs+OCueOCv+ODs+OCuVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUFub255bW91cyhvcHRpb25zOiBPbWl0PENsaWVudE9wdGlvbnMsICd1c2VybmFtZScgfCAncGFzc3dvcmQnPiA9IHt9KTogQ2xpZW50IHtcbiAgICBjb25zdCB7IGRvbWFpbiA9ICd3aWtpZG90LmNvbScsIGFtY0NvbmZpZyA9IHt9IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGFtY0NsaWVudCA9IG5ldyBBTUNDbGllbnQoYW1jQ29uZmlnLCBkb21haW4pO1xuICAgIHJldHVybiBuZXcgQ2xpZW50KGFtY0NsaWVudCwgZG9tYWluKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDjg63jgrDjgqTjg7PnirbmhYvjgpLnorroqo3jgZnjgotcbiAgICogQHJldHVybnMg44Ot44Kw44Kk44Oz5riI44G/44Gq44KJdHJ1ZVxuICAgKi9cbiAgaXNMb2dnZWRJbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlcm5hbWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICog44Ot44Kw44Kk44Oz44KS6KaB5rGC44GZ44KLXG4gICAqIOODreOCsOOCpOODs+a4iOOBv+OBp+OBquOBhOWgtOWQiOOBr0xvZ2luUmVxdWlyZWRFcnJvcuOCkui/lOOBmVxuICAgKiBAcmV0dXJucyDmiJDlip/mmYLjga92b2lkXG4gICAqL1xuICByZXF1aXJlTG9naW4oKTogV2lraWRvdFJlc3VsdDx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzTG9nZ2VkSW4oKSkge1xuICAgICAgcmV0dXJuIHdkRXJyKG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoKSk7XG4gICAgfVxuICAgIHJldHVybiB3ZE9rKHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICog44Kv44Op44Kk44Ki44Oz44OI44KS44Kv44Ot44O844K644GZ44KLXG4gICAqIOOCu+ODg+OCt+ODp+ODs+OBjOOBguOCi+WgtOWQiOOBr+ODreOCsOOCouOCpuODiOOCkuippuOBv+OCi1xuICAgKi9cbiAgY2xvc2UoKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc0xvZ2dlZEluKCkpIHtcbiAgICAgIHJldHVybiBsb2dvdXQodGhpcykubWFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5fdXNlcm5hbWUgPSBudWxsO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3ZE9rQXN5bmModW5kZWZpbmVkKTtcbiAgfVxufVxuIiwKICAgICJleHBvcnQgKiBmcm9tICcuL2NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ZvcnVtJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3ByaXZhdGUtbWVzc2FnZSc7XG5leHBvcnQgKiBmcm9tICcuL3NpdGUnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3VzZXInO1xuIiwKICAgICJleHBvcnQgKiBmcm9tICcuL3BhcnNlcic7XG5leHBvcnQgKiBmcm9tICcuL3F1aWNrLW1vZHVsZSc7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFJc0IsY0FrQlQ7QUFBQTtBQUFBLEVBbEJTLGVBQWYsTUFBZSxxQkFBcUIsTUFBTTtBQUFBLElBRXRCO0FBQUEsSUFLekIsV0FBVyxDQUFDLFNBQWlCO0FBQUEsTUFDM0IsTUFBTSxPQUFPO0FBQUEsTUFDYixLQUFLLE9BQU8sS0FBSyxZQUFZO0FBQUEsTUFDN0IsT0FBTyxlQUFlLE1BQU0sV0FBVyxTQUFTO0FBQUE7QUFBQSxFQUVwRDtBQUFBLEVBTWEsa0JBQU4sTUFBTSx3QkFBd0IsYUFBYTtBQUFBLEVBQUM7QUFBQTs7O0lDakJ0QyxVQU1BLGNBa0JBLG9CQWtCQTtBQUFBO0FBQUEsRUEvQ2I7QUFBQSxFQUthLFdBQU4sTUFBTSxpQkFBaUIsYUFBYTtBQUFBLEVBQUM7QUFBQSxFQU0vQixlQUFOLE1BQU0scUJBQXFCLFNBQVM7QUFBQSxJQUV6QjtBQUFBLElBTWhCLFdBQVcsQ0FBQyxTQUFpQixZQUFvQjtBQUFBLE1BQy9DLE1BQU0sT0FBTztBQUFBLE1BQ2IsS0FBSyxhQUFhO0FBQUE7QUFBQSxFQUV0QjtBQUFBLEVBTWEscUJBQU4sTUFBTSwyQkFBMkIsU0FBUztBQUFBLElBRS9CO0FBQUEsSUFNaEIsV0FBVyxDQUFDLFNBQWlCLFlBQW9CO0FBQUEsTUFDL0MsTUFBTSxPQUFPO0FBQUEsTUFDYixLQUFLLGFBQWE7QUFBQTtBQUFBLEVBRXRCO0FBQUEsRUFNYSxvQkFBTixNQUFNLDBCQUEwQixTQUFTO0FBQUEsRUFBQztBQUFBOzs7SUMxQ3BDLGNBTUEsb0JBTUE7QUFBQTtBQUFBLEVBakJiO0FBQUEsRUFLYSxlQUFO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QUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJQUNWLEtBQVU7QUFBQSxJ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T0FBTyxLQUFLO0FBQUE7QUFBQSxTQTZCUCxNQUFNLENBQUMsVUFBeUIsQ0FBQyxHQUErQjtBQUFBLElBQ3JFLFFBQVEsVUFBVSxVQUFVLFNBQVMsZUFBZSxZQUFZLENBQUMsTUFBTTtBQUFBLElBR3ZFLE1BQU0sWUFBWSxJQUFJLFVBQVUsV0FBVyxNQUFNO0FBQUEsSUFHakQsSUFBSSxZQUFZLFVBQVU7QUFBQSxNQUN4QixPQUFPLGFBQ0osWUFBWTtBQUFBLFFBQ1gsTUFBTSxTQUFTLElBQUksT0FBTyxXQUFXLFFBQVEsUUFBUTtBQUFBLFFBQ3JELE1BQU0sY0FBYyxNQUFNLE1BQU0sUUFBUSxVQUFVLFFBQVE7QUFBQSxRQUMxRCxJQUFJLFlBQVksTUFBTSxHQUFHO0FBQUEsVUFDdkIsTUFBTSxZQUFZO0FBQUEsUUFDcEI7QUFBQSxRQUdBLE1BQU0sYUFBYSxNQUFNLEtBQUssU0FBUyxRQUFRLFFBQVE7QUFBQSxRQUN2RCxJQUFJLFdBQVcsS0FBSyxLQUFLLFdBQVcsT0FBTztBQUFBLFVBQ3pDLE9BQU8sTUFBTSxXQUFXO0FBQUEsUUFDMUI7QUFBQSxRQUVBLE9BQU87QUFBQSxTQUNOLEdBQ0gsQ0FBQyxVQUFVO0FBQUEsUUFDVCxJQUFJLGlCQUFpQixvQkFBb0I7QUFBQSxVQUN2QyxPQUFPO0FBQUEsUUFDVDtBQUFBLFFBQ0EsT0FBTyxJQUFJLG1CQUFtQiw0QkFBNEIsT0FBTyxLQUFLLEdBQUc7QUFBQSxPQUU3RTtBQUFBLElBQ0Y7QUFBQSxJQUdBLE9BQU8sVUFBVSxJQUFJLE9BQU8sV0FBVyxNQUFNLENBQUM7QUFBQTtBQUFBLFNBUXpDLGVBQWUsQ0FBQyxVQUF3RCxDQUFDLEdBQVc7QUFBQSxJQUN6RixRQUFRLFNBQVMsZUFBZSxZQUFZLENBQUMsTUFBTTtBQUFBLElBQ25ELE1BQU0sWUFBWSxJQUFJLFVBQVUsV0FBVyxNQUFNO0FBQUEsSUFDakQsT0FBTyxJQUFJLE9BQU8sV0FBVyxNQUFNO0FBQUE7QUFBQSxFQU9yQyxVQUFVLEdBQVk7QUFBQSxJQUNwQixPQUFPLEtBQUssY0FBYztBQUFBO0FBQUEsRUFRNUIsWUFBWSxHQUF3QjtBQUFBLElBQ2xDLElBQUksQ0FBQyxLQUFLLFdBQVcsR0FBRztBQUFBLE1BQ3RCLE9BQU8sTUFBTSxJQUFJLGtCQUFvQjtBQUFBLElBQ3ZDO0FBQUEsSUFDQSxPQUFPLEtBQUssU0FBUztBQUFBO0FBQUEsRUFPdkIsS0FBSyxHQUE2QjtBQUFBLElBQ2hDLElBQUksS0FBSyxXQUFXLEdBQUc7QUFBQSxNQUNyQixPQUFPLE9BQU8sSUFBSSxFQUFFLElBQUksTUFBTTtBQUFBLFFBQzVCLEtBQUssWUFBWTtBQUFBLFFBQ2pCO0FBQUEsT0FDRDtBQUFBLElBQ0g7QUFBQSxJQUNBLE9BQU8sVUFBVSxTQUFTO0FBQUE7QUFFOUI7O0FDbE1BO0FBS0E7O0FDTkE7IiwKICAiZGVidWdJZCI6ICJFNDg1RDUwMTBDREFEQTNDNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
4641
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2NvbW1vbi9lcnJvcnMvYmFzZS50cyIsICJzcmMvY29tbW9uL2Vycm9ycy9hbWMudHMiLCAic3JjL2NvbW1vbi9lcnJvcnMvc2Vzc2lvbi50cyIsICJzcmMvY29tbW9uL2Vycm9ycy90YXJnZXQudHMiLCAic3JjL2NvbW1vbi9lcnJvcnMvaW5kZXgudHMiLCAic3JjL2NvbW1vbi9sb2dnZXIudHMiLCAic3JjL2NvbW1vbi90eXBlcy9yZXN1bHQudHMiLCAic3JjL2NvbW1vbi90eXBlcy9pbmRleC50cyIsICJzcmMvY29ubmVjdG9yL2FtYy1jb25maWcudHMiLCAic3JjL21vZHVsZS91c2VyL2Fub255bW91cy11c2VyLnRzIiwgInNyYy9tb2R1bGUvdXNlci9kZWxldGVkLXVzZXIudHMiLCAic3JjL21vZHVsZS91c2VyL2d1ZXN0LXVzZXIudHMiLCAic3JjL3V0aWwvdGFibGUvY2hhci10YWJsZS50cyIsICJzcmMvdXRpbC9zdHJpbmctdXRpbC50cyIsICJzcmMvbW9kdWxlL3VzZXIvdXNlci1jb2xsZWN0aW9uLnRzIiwgInNyYy9tb2R1bGUvdXNlci91c2VyLnRzIiwgInNyYy9tb2R1bGUvdXNlci93aWtpZG90LXVzZXIudHMiLCAic3JjL21vZHVsZS91c2VyL2luZGV4LnRzIiwgInNyYy91dGlsL3BhcnNlci91c2VyLnRzIiwgInNyYy91dGlsL3BhcnNlci9pbmRleC50cyIsICJzcmMvY29tbW9uL2RlY29yYXRvcnMudHMiLCAic3JjL21vZHVsZS9mb3J1bS9mb3J1bS1wb3N0LnRzIiwgInNyYy9tb2R1bGUvZm9ydW0vZm9ydW0tdGhyZWFkLnRzIiwgInNyYy9tb2R1bGUvZm9ydW0vZm9ydW0tY2F0ZWdvcnkudHMiLCAic3JjL21vZHVsZS9mb3J1bS9pbmRleC50cyIsICJzcmMvaW5kZXgudHMiLCAic3JjL2Nvbm5lY3Rvci9hbWMtY2xpZW50LnRzIiwgInNyYy9jb25uZWN0b3IvYW1jLWhlYWRlci50cyIsICJzcmMvY29ubmVjdG9yL2FtYy10eXBlcy50cyIsICJzcmMvY29ubmVjdG9yL2luZGV4LnRzIiwgInNyYy9jb25uZWN0b3IvYXV0aC50cyIsICJzcmMvbW9kdWxlL3ByaXZhdGUtbWVzc2FnZS9wcml2YXRlLW1lc3NhZ2UudHMiLCAic3JjL21vZHVsZS9jbGllbnQvYWNjZXNzb3JzL3BtLWFjY2Vzc29yLnRzIiwgInNyYy9tb2R1bGUvc2l0ZS9hY2Nlc3NvcnMvZm9ydW0tYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9zaXRlL2FjY2Vzc29ycy9tZW1iZXItYWNjZXNzb3IudHMiLCAic3JjL3V0aWwvcXVpY2stbW9kdWxlLnRzIiwgInNyYy9tb2R1bGUvc2l0ZS9zaXRlLWFwcGxpY2F0aW9uLnRzIiwgInNyYy9tb2R1bGUvc2l0ZS9zaXRlLW1lbWJlci50cyIsICJzcmMvbW9kdWxlL3NpdGUvYWNjZXNzb3JzL3BhZ2UtYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9wYWdlL3BhZ2UudHMiLCAic3JjL21vZHVsZS9wYWdlL3BhZ2UtZmlsZS50cyIsICJzcmMvbW9kdWxlL3BhZ2UvcGFnZS1tZXRhLnRzIiwgInNyYy9tb2R1bGUvcGFnZS9wYWdlLXJldmlzaW9uLnRzIiwgInNyYy9tb2R1bGUvcGFnZS9wYWdlLXNvdXJjZS50cyIsICJzcmMvbW9kdWxlL3BhZ2UvcGFnZS12b3RlLnRzIiwgInNyYy9tb2R1bGUvcGFnZS9zZWFyY2gtcXVlcnkudHMiLCAic3JjL21vZHVsZS9wYWdlL3NpdGUtY2hhbmdlLnRzIiwgInNyYy9tb2R1bGUvc2l0ZS9hY2Nlc3NvcnMvcGFnZXMtYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9zaXRlL3NpdGUudHMiLCAic3JjL21vZHVsZS9jbGllbnQvYWNjZXNzb3JzL3NpdGUtYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9jbGllbnQvYWNjZXNzb3JzL3VzZXItYWNjZXNzb3IudHMiLCAic3JjL21vZHVsZS9jbGllbnQvY2xpZW50LnRzIiwgInNyYy9tb2R1bGUvaW5kZXgudHMiLCAic3JjL3V0aWwvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLyoqXG4gKiBCYXNlIGVycm9yIGNsYXNzIGZvciB0aGUgV2lraWRvdCBsaWJyYXJ5XG4gKiBBbGwgY3VzdG9tIGVycm9ycyBpbmhlcml0IGZyb20gdGhpcyBjbGFzc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV2lraWRvdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogRXJyb3IgbmFtZSAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpO1xuICB9XG59XG5cbi8qKlxuICogVW5leHBlY3RlZCBlcnJvclxuICogUmVwcmVzZW50cyBpbnRlcm5hbCBpbmNvbnNpc3RlbmNpZXMgb3IgYnVnc1xuICovXG5leHBvcnQgY2xhc3MgVW5leHBlY3RlZEVycm9yIGV4dGVuZHMgV2lraWRvdEVycm9yIHt9XG4iLAogICAgImltcG9ydCB7IFdpa2lkb3RFcnJvciB9IGZyb20gJy4vYmFzZSc7XG5cbi8qKlxuICogQmFzZSBlcnJvciBmb3IgQWpheCBNb2R1bGUgQ29ubmVjdG9yIHJlbGF0ZWQgaXNzdWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBBTUNFcnJvciBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuXG4vKipcbiAqIEhUVFAgc3RhdHVzIGNvZGUgZXJyb3JcbiAqIFRocm93biB3aGVuIGFuIEFNQyByZXF1ZXN0IGZhaWxzIHdpdGggYW4gSFRUUCBlcnJvclxuICovXG5leHBvcnQgY2xhc3MgQU1DSHR0cEVycm9yIGV4dGVuZHMgQU1DRXJyb3Ige1xuICAvKiogSFRUUCBzdGF0dXMgY29kZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2VcbiAgICogQHBhcmFtIHN0YXR1c0NvZGUgLSBIVFRQIHN0YXR1cyBjb2RlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gIH1cbn1cblxuLyoqXG4gKiBXaWtpZG90IHN0YXR1cyBjb2RlIGVycm9yXG4gKiBUaHJvd24gd2hlbiBBTUMgcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCBva1xuICovXG5leHBvcnQgY2xhc3MgV2lraWRvdFN0YXR1c0Vycm9yIGV4dGVuZHMgQU1DRXJyb3Ige1xuICAvKiogV2lraWRvdCBzdGF0dXMgY29kZSBzdHJpbmcgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU6IHN0cmluZztcblxuICAvKipcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBFcnJvciBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdGF0dXNDb2RlIC0gU3RhdHVzIGNvZGUgKGUuZy4sICdub3Rfb2snLCAndHJ5X2FnYWluJylcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzQ29kZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc3BvbnNlIGRhdGEgZXJyb3JcbiAqIFRocm93biB3aGVuIHJlc3BvbnNlIHBhcnNpbmcgZmFpbHNcbiAqL1xuZXhwb3J0IGNsYXNzIFJlc3BvbnNlRGF0YUVycm9yIGV4dGVuZHMgQU1DRXJyb3Ige31cbiIsCiAgICAiaW1wb3J0IHsgV2lraWRvdEVycm9yIH0gZnJvbSAnLi9iYXNlJztcblxuLyoqXG4gKiBCYXNlIGVycm9yIGZvciBzZXNzaW9uIHJlbGF0ZWQgaXNzdWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uRXJyb3IgZXh0ZW5kcyBXaWtpZG90RXJyb3Ige31cblxuLyoqXG4gKiBTZXNzaW9uIGNyZWF0aW9uIGZhaWx1cmUgZXJyb3JcbiAqIFRocm93biB3aGVuIGEgbG9naW4gYXR0ZW1wdCBmYWlsc1xuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbkNyZWF0ZUVycm9yIGV4dGVuZHMgU2Vzc2lvbkVycm9yIHt9XG5cbi8qKlxuICogTG9naW4gcmVxdWlyZWQgZXJyb3JcbiAqIFRocm93biB3aGVuIGFuIGF1dGhlbnRpY2F0ZWQgb3BlcmF0aW9uIGlzIGF0dGVtcHRlZCB3aXRob3V0IGxvZ2luXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dpblJlcXVpcmVkRXJyb3IgZXh0ZW5kcyBTZXNzaW9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0xvZ2luIGlzIHJlcXVpcmVkIGZvciB0aGlzIG9wZXJhdGlvbicpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyBXaWtpZG90RXJyb3IgfSBmcm9tICcuL2Jhc2UnO1xuXG4vKipcbiAqIFJlc291cmNlIG5vdCBmb3VuZCBlcnJvclxuICogVGhyb3duIHdoZW4gdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBkb2VzIG5vdCBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBXaWtpZG90RXJyb3Ige31cblxuLyoqXG4gKiBSZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBlcnJvclxuICogVGhyb3duIHdoZW4gYXR0ZW1wdGluZyB0byBjcmVhdGUgYSByZXNvdXJjZSB0aGF0IGFscmVhZHkgZXhpc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXJnZXRFeGlzdHNFcnJvciBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuXG4vKipcbiAqIFRhcmdldCBzdGF0ZSBlcnJvclxuICogVGhyb3duIHdoZW4gYSByZXNvdXJjZSBpcyBpbiBhbiBpbm9wZXJhYmxlIHN0YXRlIChlLmcuLCBsb2NrZWQpXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXJnZXRFcnJvciBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuXG4vKipcbiAqIEFjY2VzcyBkZW5pZWQgZXJyb3JcbiAqIFRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBkZW5pZWQgZHVlIHRvIGluc3VmZmljaWVudCBwZXJtaXNzaW9uc1xuICovXG5leHBvcnQgY2xhc3MgRm9yYmlkZGVuRXJyb3IgZXh0ZW5kcyBXaWtpZG90RXJyb3Ige31cblxuLyoqXG4gKiBIVE1MIGVsZW1lbnQgbm90IGZvdW5kIGVycm9yXG4gKiBUaHJvd24gd2hlbiBhIHJlcXVpcmVkIGVsZW1lbnQgaXMgbm90IGZvdW5kIGR1cmluZyBwYXJzaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBOb0VsZW1lbnRFcnJvciBleHRlbmRzIFdpa2lkb3RFcnJvciB7fVxuIiwKICAgICIvLyBCYXNlIGVycm9yc1xuXG4vLyBBTUMgZXJyb3JzXG5leHBvcnQgeyBBTUNFcnJvciwgQU1DSHR0cEVycm9yLCBSZXNwb25zZURhdGFFcnJvciwgV2lraWRvdFN0YXR1c0Vycm9yIH0gZnJvbSAnLi9hbWMnO1xuZXhwb3J0IHsgVW5leHBlY3RlZEVycm9yLCBXaWtpZG90RXJyb3IgfSBmcm9tICcuL2Jhc2UnO1xuLy8gU2Vzc2lvbiBlcnJvcnNcbmV4cG9ydCB7IExvZ2luUmVxdWlyZWRFcnJvciwgU2Vzc2lvbkNyZWF0ZUVycm9yLCBTZXNzaW9uRXJyb3IgfSBmcm9tICcuL3Nlc3Npb24nO1xuXG4vLyBUYXJnZXQgZXJyb3JzXG5leHBvcnQge1xuICBGb3JiaWRkZW5FcnJvcixcbiAgTm9FbGVtZW50RXJyb3IsXG4gIE5vdEZvdW5kRXhjZXB0aW9uLFxuICBUYXJnZXRFcnJvcixcbiAgVGFyZ2V0RXhpc3RzRXJyb3IsXG59IGZyb20gJy4vdGFyZ2V0JztcbiIsCiAgICAiLyoqXG4gKiBNb2R1bGUgcHJvdmlkaW5nIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eVxuICpcbiAqIFRoaXMgbW9kdWxlIGNvbmZpZ3VyZXMgYW5kIHByb3ZpZGVzIGxvZ2dlcnMgdXNlZCB0aHJvdWdob3V0IHRoZSBsaWJyYXJ5LlxuICogQnkgZGVmYXVsdCwgaXQgZG9lcyBub3Qgb3V0cHV0IGFueXRoaW5nLCBhbGxvd2luZyBhcHBsaWNhdGlvbi1zaWRlIGxvZyBjb250cm9sLlxuICovXG5cbi8qKlxuICogTG9nIGxldmVsXG4gKi9cbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG5cbi8qKlxuICogTG9nIGxldmVsIHByaW9yaXR5IChoaWdoZXIgbnVtYmVyID0gbW9yZSBpbXBvcnRhbnQpXG4gKi9cbmNvbnN0IExPR19MRVZFTF9QUklPUklUWTogUmVjb3JkPExvZ0xldmVsLCBudW1iZXI+ID0ge1xuICBkZWJ1ZzogMCxcbiAgaW5mbzogMSxcbiAgd2FybjogMixcbiAgZXJyb3I6IDMsXG59O1xuXG4vKipcbiAqIExvZ2dlciBoYW5kbGVyXG4gKi9cbmV4cG9ydCB0eXBlIExvZ0hhbmRsZXIgPSAoXG4gIGxldmVsOiBMb2dMZXZlbCxcbiAgbmFtZTogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIC4uLmFyZ3M6IHVua25vd25bXVxuKSA9PiB2b2lkO1xuXG4vKipcbiAqIE51bGxIYW5kbGVyOiBPdXRwdXRzIG5vdGhpbmcgKGRlZmF1bHQpXG4gKi9cbmV4cG9ydCBjb25zdCBudWxsSGFuZGxlcjogTG9nSGFuZGxlciA9ICgpID0+IHtcbiAgLy8gRG8gbm90aGluZ1xufTtcblxuLyoqXG4gKiBDb25zb2xlSGFuZGxlcjogT3V0cHV0cyB0byBjb25zb2xlXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zb2xlSGFuZGxlcjogTG9nSGFuZGxlciA9IChcbiAgbGV2ZWw6IExvZ0xldmVsLFxuICBuYW1lOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbiAgLi4uYXJnczogdW5rbm93bltdXG4pID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gYCR7dGltZXN0YW1wfSBbJHtuYW1lfS8ke2xldmVsLnRvVXBwZXJDYXNlKCl9XSAke21lc3NhZ2V9YDtcblxuICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgY2FzZSAnZGVidWcnOlxuICAgICAgY29uc29sZS5kZWJ1Zyhmb3JtYXR0ZWRNZXNzYWdlLCAuLi5hcmdzKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2luZm8nOlxuICAgICAgY29uc29sZS5pbmZvKGZvcm1hdHRlZE1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnd2Fybic6XG4gICAgICBjb25zb2xlLndhcm4oZm9ybWF0dGVkTWVzc2FnZSwgLi4uYXJncyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdHRlZE1lc3NhZ2UsIC4uLmFyZ3MpO1xuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbi8qKlxuICogTG9nZ2VyIGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBoYW5kbGVyOiBMb2dIYW5kbGVyO1xuICBwcml2YXRlIGxldmVsOiBMb2dMZXZlbDtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGhhbmRsZXI6IExvZ0hhbmRsZXIgPSBudWxsSGFuZGxlciwgbGV2ZWw6IExvZ0xldmVsID0gJ3dhcm4nKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaGFuZGxlclxuICAgKi9cbiAgc2V0SGFuZGxlcihoYW5kbGVyOiBMb2dIYW5kbGVyKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbG9nIGxldmVsXG4gICAqL1xuICBzZXRMZXZlbChsZXZlbDogTG9nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBsZXZlbCBzaG91bGQgYmUgbG9nZ2VkXG4gICAqL1xuICBwcml2YXRlIHNob3VsZExvZyhsZXZlbDogTG9nTGV2ZWwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTE9HX0xFVkVMX1BSSU9SSVRZW2xldmVsXSA+PSBMT0dfTEVWRUxfUFJJT1JJVFlbdGhpcy5sZXZlbF07XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGxvZ1xuICAgKi9cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3VsZExvZyhsZXZlbCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlcihsZXZlbCwgdGhpcy5uYW1lLCBtZXNzYWdlLCAuLi5hcmdzKTtcbiAgICB9XG4gIH1cblxuICBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdkZWJ1ZycsIG1lc3NhZ2UsIC4uLmFyZ3MpO1xuICB9XG5cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSwgLi4uYXJncyk7XG4gIH1cblxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5sb2coJ3dhcm4nLCBtZXNzYWdlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgdGhpcy5sb2coJ2Vycm9yJywgbWVzc2FnZSwgLi4uYXJncyk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgbG9nZ2VyXG4gKiBAcGFyYW0gbmFtZSAtIExvZ2dlciBuYW1lIChkZWZhdWx0OiBcIndpa2lkb3RcIilcbiAqIEByZXR1cm5zIExvZ2dlciBpbnN0YW5jZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9nZ2VyKG5hbWUgPSAnd2lraWRvdCcpOiBMb2dnZXIge1xuICByZXR1cm4gbmV3IExvZ2dlcihuYW1lKTtcbn1cblxuLyoqXG4gKiBTZXR1cCBjb25zb2xlIG91dHB1dCBoYW5kbGVyXG4gKiBAcGFyYW0gbG9nZ2VyIC0gTG9nZ2VyIHRvIGNvbmZpZ3VyZVxuICogQHBhcmFtIGxldmVsIC0gTG9nIGxldmVsIChkZWZhdWx0OiBcIndhcm5cIilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwQ29uc29sZUhhbmRsZXIobG9nZ2VyOiBMb2dnZXIsIGxldmVsOiBMb2dMZXZlbCA9ICd3YXJuJyk6IHZvaWQge1xuICBsb2dnZXIuc2V0SGFuZGxlcihjb25zb2xlSGFuZGxlcik7XG4gIGxvZ2dlci5zZXRMZXZlbChsZXZlbCk7XG59XG5cbi8qKlxuICogRGVmYXVsdCBsb2dnZXIgdXNlZCB0aHJvdWdob3V0IHRoZSBwYWNrYWdlXG4gKi9cbmV4cG9ydCBjb25zdCBsb2dnZXI6IExvZ2dlciA9IGdldExvZ2dlcigpO1xuIiwKICAgICJpbXBvcnQgeyBlcnIsIGVyckFzeW5jLCBvaywgb2tBc3luYywgdHlwZSBSZXN1bHQsIFJlc3VsdEFzeW5jIH0gZnJvbSAnbmV2ZXJ0aHJvdyc7XG5pbXBvcnQgdHlwZSB7IFdpa2lkb3RFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbi8qKiBTeW5jaHJvbm91cyBSZXN1bHQgdHlwZSBhbGlhcyAqL1xuZXhwb3J0IHR5cGUgV2lraWRvdFJlc3VsdDxUPiA9IFJlc3VsdDxULCBXaWtpZG90RXJyb3I+O1xuXG4vKiogQXN5bmNocm9ub3VzIFJlc3VsdCB0eXBlIGFsaWFzICovXG5leHBvcnQgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmM8VD4gPSBSZXN1bHRBc3luYzxULCBXaWtpZG90RXJyb3I+O1xuXG4vKiogQ3JlYXRlIHN1Y2Nlc3MgUmVzdWx0ICovXG5leHBvcnQgY29uc3Qgd2RPayA9IDxUPih2YWx1ZTogVCk6IFdpa2lkb3RSZXN1bHQ8VD4gPT4gb2sodmFsdWUpO1xuXG4vKiogQ3JlYXRlIGVycm9yIFJlc3VsdCAqL1xuZXhwb3J0IGNvbnN0IHdkRXJyID0gPEUgZXh0ZW5kcyBXaWtpZG90RXJyb3I+KGVycm9yOiBFKTogV2lraWRvdFJlc3VsdDxuZXZlcj4gPT4gZXJyKGVycm9yKTtcblxuLyoqIENyZWF0ZSBzdWNjZXNzIFJlc3VsdEFzeW5jICovXG5leHBvcnQgY29uc3Qgd2RPa0FzeW5jID0gPFQ+KHZhbHVlOiBUKTogV2lraWRvdFJlc3VsdEFzeW5jPFQ+ID0+IG9rQXN5bmModmFsdWUpO1xuXG4vKiogQ3JlYXRlIGVycm9yIFJlc3VsdEFzeW5jICovXG5leHBvcnQgY29uc3Qgd2RFcnJBc3luYyA9IDxFIGV4dGVuZHMgV2lraWRvdEVycm9yPihlcnJvcjogRSk6IFdpa2lkb3RSZXN1bHRBc3luYzxuZXZlcj4gPT5cbiAgZXJyQXN5bmMoZXJyb3IpO1xuXG4vKiogQ29udmVydCBmcm9tIFByb21pc2UgKi9cbmV4cG9ydCBjb25zdCBmcm9tUHJvbWlzZSA9IDxUPihcbiAgcHJvbWlzZTogUHJvbWlzZTxUPixcbiAgZXJyb3JNYXBwZXI6IChlcnJvcjogdW5rbm93bikgPT4gV2lraWRvdEVycm9yXG4pOiBXaWtpZG90UmVzdWx0QXN5bmM8VD4gPT4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocHJvbWlzZSwgZXJyb3JNYXBwZXIpO1xuXG4vKiogQ29tYmluZSBtdWx0aXBsZSBSZXN1bHRBc3luYyAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVSZXN1bHRzID0gPFQ+KHJlc3VsdHM6IFdpa2lkb3RSZXN1bHRBc3luYzxUPltdKTogV2lraWRvdFJlc3VsdEFzeW5jPFRbXT4gPT5cbiAgUmVzdWx0QXN5bmMuY29tYmluZShyZXN1bHRzKTtcbiIsCiAgICAiZXhwb3J0ICogZnJvbSAnLi9jb21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9yZXN1bHQnO1xuIiwKICAgICIvKipcbiAqIEFqYXggTW9kdWxlIENvbm5lY3RvciBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQU1DQ29uZmlnIHtcbiAgLyoqIFJlcXVlc3QgdGltZW91dCAobWlsbGlzZWNvbmRzKSAqL1xuICB0aW1lb3V0OiBudW1iZXI7XG5cbiAgLyoqIE1heGltdW0gcmV0cnkgY291bnQgKi9cbiAgcmV0cnlMaW1pdDogbnVtYmVyO1xuXG4gIC8qKiBCYXNlIHJldHJ5IGludGVydmFsIChtaWxsaXNlY29uZHMpICovXG4gIHJldHJ5SW50ZXJ2YWw6IG51bWJlcjtcblxuICAvKiogTWF4aW11bSBiYWNrb2ZmIChtaWxsaXNlY29uZHMpICovXG4gIG1heEJhY2tvZmY6IG51bWJlcjtcblxuICAvKiogQmFja29mZiBmYWN0b3IgKi9cbiAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuXG4gIC8qKiBNYXhpbXVtIGNvbmN1cnJlbnQgcmVxdWVzdHMgKi9cbiAgc2VtYXBob3JlTGltaXQ6IG51bWJlcjtcbn1cblxuLyoqIERlZmF1bHQgQU1DIGNvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FNQ19DT05GSUc6IEFNQ0NvbmZpZyA9IHtcbiAgdGltZW91dDogMjAwMDAsXG4gIHJldHJ5TGltaXQ6IDUsXG4gIHJldHJ5SW50ZXJ2YWw6IDEwMDAsXG4gIG1heEJhY2tvZmY6IDYwMDAwLFxuICBiYWNrb2ZmRmFjdG9yOiAyLjAsXG4gIHNlbWFwaG9yZUxpbWl0OiAxMCxcbn07XG5cbi8qKlxuICogRml4ZWQgdG9rZW4gdmFsdWUgcmVxdWlyZWQgYnkgV2lraWRvdFxuICogVGhpcyBpcyBhIGZpeGVkIHZhbHVlIG9idGFpbmVkIGZyb20gV2lraWRvdCdzIGZyb250ZW5kLFxuICogdXNlZCBhcyBhbiBpZGVudGlmaWVyIHJhdGhlciB0aGFuIGEgc2VjdXJpdHkgdG9rZW5cbiAqL1xuZXhwb3J0IGNvbnN0IFdJS0lET1RfVE9LRU43ID0gJzEyMzQ1Nic7XG5cbi8qKlxuICogRmFsbGJhY2sgSFRUUCBzdGF0dXMgY29kZSBmb3IgSFRUUCBlcnJvcnNcbiAqIFVzZWQgd2hlbiBzdGF0dXMgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkIGZyb20gcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSFRUUF9TVEFUVVNfQ09ERSA9IDk5OTtcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGllbnRSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciwgVXNlclR5cGUgfSBmcm9tICcuL2Fic3RyYWN0LXVzZXInO1xuXG4vKipcbiAqIEFub255bW91cyB1c2VyXG4gKi9cbmV4cG9ydCBjbGFzcyBBbm9ueW1vdXNVc2VyIGltcGxlbWVudHMgQWJzdHJhY3RVc2VyIHtcbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50UmVmO1xuXG4gIC8qKiBVc2VyIElEICgwIGZvciBhbm9ueW1vdXMpICovXG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyID0gMDtcblxuICAvKiogVXNlcm5hbWUgKFwiQW5vbnltb3VzXCIgZm9yIGFub255bW91cyB1c2VycykgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyA9ICdBbm9ueW1vdXMnO1xuXG4gIC8qKiBVTklYIGZvcm1hdCB1c2VybmFtZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdW5peE5hbWU6IHN0cmluZyA9ICdhbm9ueW1vdXMnO1xuXG4gIC8qKiBBdmF0YXIgVVJMIChudWxsIGZvciBhbm9ueW1vdXMpICovXG4gIHB1YmxpYyByZWFkb25seSBhdmF0YXJVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBJUCBhZGRyZXNzICovXG4gIHB1YmxpYyByZWFkb25seSBpcDogc3RyaW5nO1xuXG4gIC8qKiBVc2VyIHR5cGUgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJUeXBlOiBVc2VyVHlwZSA9ICdhbm9ueW1vdXMnO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogQ2xpZW50UmVmLCBpcDogc3RyaW5nKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5pcCA9IGlwO1xuICB9XG5cbiAgLy8gQWJzdHJhY3RVc2VyIGltcGxlbWVudGF0aW9uXG4gIGlzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNEZWxldGVkVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNBbm9ueW1vdXNVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlzR3Vlc3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc1dpa2lkb3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBBbm9ueW1vdXNVc2VyKG5hbWU9JHt0aGlzLm5hbWV9LCB1bml4TmFtZT0ke3RoaXMudW5peE5hbWV9LCBpcD0ke3RoaXMuaXB9KWA7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGllbnRSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciwgVXNlclR5cGUgfSBmcm9tICcuL2Fic3RyYWN0LXVzZXInO1xuXG4vKipcbiAqIERlbGV0ZWQgdXNlclxuICovXG5leHBvcnQgY2xhc3MgRGVsZXRlZFVzZXIgaW1wbGVtZW50cyBBYnN0cmFjdFVzZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnRSZWY7XG5cbiAgLyoqIERlbGV0ZWQgdXNlciBJRCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IG51bWJlcjtcblxuICAvKiogVXNlcm5hbWUgKFwiYWNjb3VudCBkZWxldGVkXCIgZm9yIGRlbGV0ZWQgdXNlcnMpICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcgPSAnYWNjb3VudCBkZWxldGVkJztcblxuICAvKiogVU5JWCBmb3JtYXQgdXNlcm5hbWUgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVuaXhOYW1lOiBzdHJpbmcgPSAnYWNjb3VudF9kZWxldGVkJztcblxuICAvKiogQXZhdGFyIFVSTCAobnVsbCBmb3IgZGVsZXRlZCkgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF2YXRhclVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIElQIGFkZHJlc3MgKG51bGwgZm9yIGRlbGV0ZWQpICovXG4gIHB1YmxpYyByZWFkb25seSBpcDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFVzZXIgdHlwZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlclR5cGU6IFVzZXJUeXBlID0gJ2RlbGV0ZWQnO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogQ2xpZW50UmVmLCBpZDogbnVtYmVyKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5pZCA9IGlkO1xuICB9XG5cbiAgLy8gQWJzdHJhY3RVc2VyIGltcGxlbWVudGF0aW9uXG4gIGlzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNEZWxldGVkVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpc0Fub255bW91c1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzR3Vlc3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc1dpa2lkb3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBEZWxldGVkVXNlcihpZD0ke3RoaXMuaWR9LCBuYW1lPSR7dGhpcy5uYW1lfSwgdW5peE5hbWU9JHt0aGlzLnVuaXhOYW1lfSlgO1xuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2xpZW50UmVmIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIsIFVzZXJUeXBlIH0gZnJvbSAnLi9hYnN0cmFjdC11c2VyJztcblxuLyoqXG4gKiBHdWVzdCB1c2VyXG4gKi9cbmV4cG9ydCBjbGFzcyBHdWVzdFVzZXIgaW1wbGVtZW50cyBBYnN0cmFjdFVzZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnRSZWY7XG5cbiAgLyoqIFVzZXIgSUQgKDAgZm9yIGd1ZXN0KSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IG51bWJlciA9IDA7XG5cbiAgLyoqIEd1ZXN0IG5hbWUgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogVU5JWCBmb3JtYXQgdXNlcm5hbWUgKG51bGwgZm9yIGd1ZXN0KSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdW5peE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBBdmF0YXIgVVJMIChtYXkgYmUgR3JhdmF0YXIpICovXG4gIHB1YmxpYyByZWFkb25seSBhdmF0YXJVcmw6IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqIElQIGFkZHJlc3MgKG51bGwgZm9yIGd1ZXN0KSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXA6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBVc2VyIHR5cGUgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJUeXBlOiBVc2VyVHlwZSA9ICdndWVzdCc7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnRSZWYsIG5hbWU6IHN0cmluZywgYXZhdGFyVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5hdmF0YXJVcmwgPSBhdmF0YXJVcmw7XG4gIH1cblxuICAvLyBBYnN0cmFjdFVzZXIgaW1wbGVtZW50YXRpb25cbiAgaXNVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc0RlbGV0ZWRVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc0Fub255bW91c1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzR3Vlc3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlzV2lraWRvdFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEd1ZXN0VXNlcihuYW1lPSR7dGhpcy5uYW1lfSlgO1xuICB9XG59XG4iLAogICAgIi8qKlxuICogTWFwcGluZyB0YWJsZSBmb3IgY29udmVydGluZyBzcGVjaWFsIHN5bWJvbHMgYW5kIG5vbi1FbmdsaXNoIGFscGhhYmV0cyB0byBFbmdsaXNoIGFscGhhYmV0c1xuICpcbiAqIFByb3ZpZGVzIG1hcHBpbmcgZm9yIGNvbnZlcnRpbmcgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgdG8gY29ycmVzcG9uZGluZyBBU0NJSSBjaGFyYWN0ZXJzLlxuICogTWFpbmx5IHVzZWQgZm9yIFVSTCBnZW5lcmF0aW9uIGFuZCBwYWdlIG5hbWUgY29udmVyc2lvbiB0byB1bml4IGZvcm1hdC5cbiAqL1xuXG5leHBvcnQgY29uc3Qgc3BlY2lhbENoYXJNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdcXHUwMEMwJzogJ2EnLFxuICAnXFx1MDBDMSc6ICdhJyxcbiAgJ1xcdTAwQzInOiAnYScsXG4gICdcXHUwMEMzJzogJ2EnLFxuICAnXFx1MDBDNCc6ICdhZScsXG4gICdcXHUwMEM1JzogJ2EnLFxuICAnXFx1MDBDNic6ICdhZScsXG4gICdcXHUwMEM3JzogJ2MnLFxuICAnXFx1MDBDOCc6ICdlJyxcbiAgJ1xcdTAwQzknOiAnZScsXG4gICdcXHUwMENBJzogJ2UnLFxuICAnXFx1MDBDQic6ICdlJyxcbiAgJ1xcdTAwQ0MnOiAnaScsXG4gICdcXHUwMENEJzogJ2knLFxuICAnXFx1MDBDRSc6ICdpJyxcbiAgJ1xcdTAwQ0YnOiAnaScsXG4gICdcXHUwMEQwJzogJ2QnLFxuICAnXFx1MDBEMSc6ICduJyxcbiAgJ1xcdTAwRDInOiAnbycsXG4gICdcXHUwMEQzJzogJ28nLFxuICAnXFx1MDBENCc6ICdvJyxcbiAgJ1xcdTAwRDUnOiAnbycsXG4gICdcXHUwMEQ2JzogJ29lJyxcbiAgJ1xcdTAwRDgnOiAnbycsXG4gICdcXHUwMEQ5JzogJ3UnLFxuICAnXFx1MDBEQSc6ICd1JyxcbiAgJ1xcdTAwREInOiAndScsXG4gICdcXHUwMERDJzogJ3VlJyxcbiAgJ1xcdTAwREQnOiAneScsXG4gICdcXHUwMERFJzogJ3QnLFxuICAnXFx1MDBERic6ICdzcycsXG4gICdcXHUwMEUwJzogJ2EnLFxuICAnXFx1MDBFMSc6ICdhJyxcbiAgJ1xcdTAwRTInOiAnYScsXG4gICdcXHUwMEUzJzogJ2EnLFxuICAnXFx1MDBFNCc6ICdhZScsXG4gICdcXHUwMEU1JzogJ2EnLFxuICAnXFx1MDBFNic6ICdhZScsXG4gICdcXHUwMEU3JzogJ2MnLFxuICAnXFx1MDBFOCc6ICdlJyxcbiAgJ1xcdTAwRTknOiAnZScsXG4gICdcXHUwMEVBJzogJ2UnLFxuICAnXFx1MDBFQic6ICdlJyxcbiAgJ1xcdTAwRUMnOiAnaScsXG4gICdcXHUwMEVEJzogJ2knLFxuICAnXFx1MDBFRSc6ICdpJyxcbiAgJ1xcdTAwRUYnOiAnaScsXG4gICdcXHUwMEYwJzogJ2QnLFxuICAnXFx1MDBGMSc6ICduJyxcbiAgJ1xcdTAwRjInOiAnbycsXG4gICdcXHUwMEYzJzogJ28nLFxuICAnXFx1MDBGNCc6ICdvJyxcbiAgJ1xcdTAwRjUnOiAnbycsXG4gICdcXHUwMEY2JzogJ29lJyxcbiAgJ1xcdTAwRjgnOiAnbycsXG4gICdcXHUwMEY5JzogJ3UnLFxuICAnXFx1MDBGQSc6ICd1JyxcbiAgJ1xcdTAwRkInOiAndScsXG4gICdcXHUwMEZDJzogJ3VlJyxcbiAgJ1xcdTAwRkQnOiAneScsXG4gICdcXHUwMEZFJzogJ3QnLFxuICAnXFx1MDBGRic6ICd5JyxcbiAgJ1xcdTAxMDAnOiAnYScsXG4gICdcXHUwMTAxJzogJ2EnLFxuICAnXFx1MDEwMic6ICdhJyxcbiAgJ1xcdTAxMDMnOiAnYScsXG4gICdcXHUwMTA0JzogJ2EnLFxuICAnXFx1MDEwNSc6ICdhJyxcbiAgJ1xcdTAxMDYnOiAnYycsXG4gICdcXHUwMTA3JzogJ2MnLFxuICAnXFx1MDEwOCc6ICdjJyxcbiAgJ1xcdTAxMDknOiAnYycsXG4gICdcXHUwMTBBJzogJ2MnLFxuICAnXFx1MDEwQic6ICdjJyxcbiAgJ1xcdTAxMEMnOiAnYycsXG4gICdcXHUwMTBEJzogJ2MnLFxuICAnXFx1MDEwRSc6ICdkJyxcbiAgJ1xcdTAxMEYnOiAnZCcsXG4gICdcXHUwMTEwJzogJ2QnLFxuICAnXFx1MDExMSc6ICdkJyxcbiAgJ1xcdTAxMTInOiAnZScsXG4gICdcXHUwMTEzJzogJ2UnLFxuICAnXFx1MDExNCc6ICdlJyxcbiAgJ1xcdTAxMTUnOiAnZScsXG4gICdcXHUwMTE2JzogJ2UnLFxuICAnXFx1MDExNyc6ICdlJyxcbiAgJ1xcdTAxMTgnOiAnZScsXG4gICdcXHUwMTE5JzogJ2UnLFxuICAnXFx1MDExQSc6ICdlJyxcbiAgJ1xcdTAxMUInOiAnZScsXG4gICdcXHUwMTFDJzogJ2cnLFxuICAnXFx1MDExRCc6ICdnJyxcbiAgJ1xcdTAxMUUnOiAnZycsXG4gICdcXHUwMTFGJzogJ2cnLFxuICAnXFx1MDEyMCc6ICdnJyxcbiAgJ1xcdTAxMjEnOiAnZycsXG4gICdcXHUwMTIyJzogJ2cnLFxuICAnXFx1MDEyMyc6ICdnJyxcbiAgJ1xcdTAxMjQnOiAnaCcsXG4gICdcXHUwMTI1JzogJ2gnLFxuICAnXFx1MDEyNic6ICdoJyxcbiAgJ1xcdTAxMjcnOiAnaCcsXG4gICdcXHUwMTI4JzogJ2knLFxuICAnXFx1MDEyOSc6ICdpJyxcbiAgJ1xcdTAxMkEnOiAnaScsXG4gICdcXHUwMTJCJzogJ2knLFxuICAnXFx1MDEyQyc6ICdpJyxcbiAgJ1xcdTAxMkQnOiAnaScsXG4gICdcXHUwMTJFJzogJ2knLFxuICAnXFx1MDEyRic6ICdpJyxcbiAgJ1xcdTAxMzAnOiAnaScsXG4gICdcXHUwMTMxJzogJ2knLFxuICAnXFx1MDEzMic6ICdpaicsXG4gICdcXHUwMTMzJzogJ2lqJyxcbiAgJ1xcdTAxMzQnOiAnaicsXG4gICdcXHUwMTM1JzogJ2onLFxuICAnXFx1MDEzNic6ICdrJyxcbiAgJ1xcdTAxMzcnOiAnaycsXG4gICdcXHUwMTM4JzogJ2snLFxuICAnXFx1MDEzOSc6ICdsJyxcbiAgJ1xcdTAxM0EnOiAnbCcsXG4gICdcXHUwMTNCJzogJ2wnLFxuICAnXFx1MDEzQyc6ICdsJyxcbiAgJ1xcdTAxM0QnOiAnbCcsXG4gICdcXHUwMTNFJzogJ2wnLFxuICAnXFx1MDEzRic6ICdsJyxcbiAgJ1xcdTAxNDAnOiAnbCcsXG4gICdcXHUwMTQxJzogJ2wnLFxuICAnXFx1MDE0Mic6ICdsJyxcbiAgJ1xcdTAxNDMnOiAnbicsXG4gICdcXHUwMTQ0JzogJ24nLFxuICAnXFx1MDE0NSc6ICduJyxcbiAgJ1xcdTAxNDYnOiAnbicsXG4gICdcXHUwMTQ3JzogJ24nLFxuICAnXFx1MDE0OCc6ICduJyxcbiAgJ1xcdTAxNDknOiAnbicsXG4gICdcXHUwMTRBJzogJ24nLFxuICAnXFx1MDE0Qic6ICduJyxcbiAgJ1xcdTAxNEMnOiAnbycsXG4gICdcXHUwMTREJzogJ28nLFxuICAnXFx1MDE0RSc6ICdvJyxcbiAgJ1xcdTAxNEYnOiAnbycsXG4gICdcXHUwMTUwJzogJ28nLFxuICAnXFx1MDE1MSc6ICdvJyxcbiAgJ1xcdTAxNTInOiAnb2UnLFxuICAnXFx1MDE1Myc6ICdvZScsXG4gICdcXHUwMTU0JzogJ3InLFxuICAnXFx1MDE1NSc6ICdyJyxcbiAgJ1xcdTAxNTYnOiAncicsXG4gICdcXHUwMTU3JzogJ3InLFxuICAnXFx1MDE1OCc6ICdyJyxcbiAgJ1xcdTAxNTknOiAncicsXG4gICdcXHUwMTVBJzogJ3MnLFxuICAnXFx1MDE1Qic6ICdzJyxcbiAgJ1xcdTAxNUMnOiAncycsXG4gICdcXHUwMTVEJzogJ3MnLFxuICAnXFx1MDE1RSc6ICdzJyxcbiAgJ1xcdTAxNUYnOiAncycsXG4gICdcXHUwMTYwJzogJ3MnLFxuICAnXFx1MDE2MSc6ICdzJyxcbiAgJ1xcdTAxNjInOiAndCcsXG4gICdcXHUwMTYzJzogJ3QnLFxuICAnXFx1MDE2NCc6ICd0JyxcbiAgJ1xcdTAxNjUnOiAndCcsXG4gICdcXHUwMTY2JzogJ3QnLFxuICAnXFx1MDE2Nyc6ICd0JyxcbiAgJ1xcdTAxNjgnOiAndScsXG4gICdcXHUwMTY5JzogJ3UnLFxuICAnXFx1MDE2QSc6ICd1JyxcbiAgJ1xcdTAxNkInOiAndScsXG4gICdcXHUwMTZDJzogJ3UnLFxuICAnXFx1MDE2RCc6ICd1JyxcbiAgJ1xcdTAxNkUnOiAndScsXG4gICdcXHUwMTZGJzogJ3UnLFxuICAnXFx1MDE3MCc6ICd1JyxcbiAgJ1xcdTAxNzEnOiAndScsXG4gICdcXHUwMTcyJzogJ3UnLFxuICAnXFx1MDE3Myc6ICd1JyxcbiAgJ1xcdTAxNzQnOiAndycsXG4gICdcXHUwMTc1JzogJ3cnLFxuICAnXFx1MDE3Nic6ICd5JyxcbiAgJ1xcdTAxNzcnOiAneScsXG4gICdcXHUwMTc4JzogJ3knLFxuICAnXFx1MDE3OSc6ICd6JyxcbiAgJ1xcdTAxN0EnOiAneicsXG4gICdcXHUwMTdCJzogJ3onLFxuICAnXFx1MDE3Qyc6ICd6JyxcbiAgJ1xcdTAxN0QnOiAneicsXG4gICdcXHUwMTdFJzogJ3onLFxuICAnXFx1MDE3Ric6ICdzcycsXG4gICdcXHUwMTkxJzogJ2YnLFxuICAnXFx1MDE5Mic6ICdmJyxcbiAgJ1xcdTAyMTgnOiAncycsXG4gICdcXHUwMjE5JzogJ3MnLFxuICAnXFx1MDIxQSc6ICd0JyxcbiAgJ1xcdTAyMUInOiAndCcsXG4gICdcXHUwMzg2JzogJ2EnLFxuICAnXFx1MDM4OCc6ICdlJyxcbiAgJ1xcdTAzODknOiAnaScsXG4gICdcXHUwMzhBJzogJ2knLFxuICAnXFx1MDM4Qyc6ICdvJyxcbiAgJ1xcdTAzOEUnOiAneScsXG4gICdcXHUwMzhGJzogJ28nLFxuICAnXFx1MDM5MCc6ICdpJyxcbiAgJ1xcdTAzOTEnOiAnYScsXG4gICdcXHUwMzkyJzogJ3YnLFxuICAnXFx1MDM5Myc6ICdnJyxcbiAgJ1xcdTAzOTQnOiAnZCcsXG4gICdcXHUwMzk1JzogJ2UnLFxuICAnXFx1MDM5Nic6ICd6JyxcbiAgJ1xcdTAzOTcnOiAnaScsXG4gICdcXHUwMzk4JzogJ3RoJyxcbiAgJ1xcdTAzOTknOiAnaScsXG4gICdcXHUwMzlBJzogJ2snLFxuICAnXFx1MDM5Qic6ICdsJyxcbiAgJ1xcdTAzOUMnOiAnbScsXG4gICdcXHUwMzlEJzogJ24nLFxuICAnXFx1MDM5RSc6ICd4JyxcbiAgJ1xcdTAzOUYnOiAnbycsXG4gICdcXHUwM0EwJzogJ3AnLFxuICAnXFx1MDNBMSc6ICdyJyxcbiAgJ1xcdTAzQTMnOiAncycsXG4gICdcXHUwM0E0JzogJ3QnLFxuICAnXFx1MDNBNSc6ICd5JyxcbiAgJ1xcdTAzQTYnOiAnZicsXG4gICdcXHUwM0E3JzogJ2NoJyxcbiAgJ1xcdTAzQTgnOiAncHMnLFxuICAnXFx1MDNBOSc6ICdvJyxcbiAgJ1xcdTAzQUEnOiAnaScsXG4gICdcXHUwM0FCJzogJ3knLFxuICAnXFx1MDNBQyc6ICdhJyxcbiAgJ1xcdTAzQUQnOiAnZScsXG4gICdcXHUwM0FFJzogJ2knLFxuICAnXFx1MDNBRic6ICdpJyxcbiAgJ1xcdTAzQjAnOiAneScsXG4gICdcXHUwM0IxJzogJ2EnLFxuICAnXFx1MDNCMic6ICd2JyxcbiAgJ1xcdTAzQjMnOiAnZycsXG4gICdcXHUwM0I0JzogJ2QnLFxuICAnXFx1MDNCNSc6ICdlJyxcbiAgJ1xcdTAzQjYnOiAneicsXG4gICdcXHUwM0I3JzogJ2knLFxuICAnXFx1MDNCOCc6ICd0aCcsXG4gICdcXHUwM0I5JzogJ2knLFxuICAnXFx1MDNCQSc6ICdrJyxcbiAgJ1xcdTAzQkInOiAnbCcsXG4gICdcXHUwM0JDJzogJ20nLFxuICAnXFx1MDNCRCc6ICduJyxcbiAgJ1xcdTAzQkUnOiAneCcsXG4gICdcXHUwM0JGJzogJ28nLFxuICAnXFx1MDNDMCc6ICdwJyxcbiAgJ1xcdTAzQzEnOiAncicsXG4gICdcXHUwM0MyJzogJ3MnLFxuICAnXFx1MDNDMyc6ICdzJyxcbiAgJ1xcdTAzQzQnOiAndCcsXG4gICdcXHUwM0M1JzogJ3knLFxuICAnXFx1MDNDNic6ICdmJyxcbiAgJ1xcdTAzQzcnOiAnY2gnLFxuICAnXFx1MDNDOCc6ICdwcycsXG4gICdcXHUwM0M5JzogJ28nLFxuICAnXFx1MDNDQSc6ICdpJyxcbiAgJ1xcdTAzQ0InOiAneScsXG4gICdcXHUwM0NDJzogJ28nLFxuICAnXFx1MDNDRCc6ICd5JyxcbiAgJ1xcdTAzQ0UnOiAnbycsXG4gICdcXHUwM0QxJzogJ3RoJyxcbiAgJ1xcdTA0MDEnOiAnZScsXG4gICdcXHUwNDAyJzogJ2QnLFxuICAnXFx1MDQwMyc6ICdnJyxcbiAgJ1xcdTA0MDQnOiAnZScsXG4gICdcXHUwNDA1JzogJ3onLFxuICAnXFx1MDQwNic6ICdpJyxcbiAgJ1xcdTA0MDcnOiAnaScsXG4gICdcXHUwNDA4JzogJ2onLFxuICAnXFx1MDQwOSc6ICdsJyxcbiAgJ1xcdTA0MEEnOiAnbicsXG4gICdcXHUwNDBCJzogJ2MnLFxuICAnXFx1MDQwQyc6ICdrJyxcbiAgJ1xcdTA0MEUnOiAndScsXG4gICdcXHUwNDBGJzogJ2QnLFxuICAnXFx1MDQxMCc6ICdhJyxcbiAgJ1xcdTA0MTEnOiAnYicsXG4gICdcXHUwNDEyJzogJ3YnLFxuICAnXFx1MDQxMyc6ICdnJyxcbiAgJ1xcdTA0MTQnOiAnZCcsXG4gICdcXHUwNDE1JzogJ2UnLFxuICAnXFx1MDQxNic6ICd6JyxcbiAgJ1xcdTA0MTcnOiAneicsXG4gICdcXHUwNDE4JzogJ2knLFxuICAnXFx1MDQxOSc6ICdqJyxcbiAgJ1xcdTA0MUEnOiAnaycsXG4gICdcXHUwNDFCJzogJ2wnLFxuICAnXFx1MDQxQyc6ICdtJyxcbiAgJ1xcdTA0MUQnOiAnbicsXG4gICdcXHUwNDFFJzogJ28nLFxuICAnXFx1MDQxRic6ICdwJyxcbiAgJ1xcdTA0MjAnOiAncicsXG4gICdcXHUwNDIxJzogJ3MnLFxuICAnXFx1MDQyMic6ICd0JyxcbiAgJ1xcdTA0MjMnOiAndScsXG4gICdcXHUwNDI0JzogJ2YnLFxuICAnXFx1MDQyNSc6ICdoJyxcbiAgJ1xcdTA0MjYnOiAnYycsXG4gICdcXHUwNDI3JzogJ2MnLFxuICAnXFx1MDQyOCc6ICdzJyxcbiAgJ1xcdTA0MjknOiAncycsXG4gICdcXHUwNDJCJzogJ3knLFxuICAnXFx1MDQyRCc6ICdlJyxcbiAgJ1xcdTA0MkUnOiAndScsXG4gICdcXHUwNDJGJzogJ2EnLFxuICAnXFx1MDQzMCc6ICdhJyxcbiAgJ1xcdTA0MzEnOiAnYicsXG4gICdcXHUwNDMyJzogJ3YnLFxuICAnXFx1MDQzMyc6ICdnJyxcbiAgJ1xcdTA0MzQnOiAnZCcsXG4gICdcXHUwNDM1JzogJ2UnLFxuICAnXFx1MDQzNic6ICd6JyxcbiAgJ1xcdTA0MzcnOiAneicsXG4gICdcXHUwNDM4JzogJ2knLFxuICAnXFx1MDQzOSc6ICdqJyxcbiAgJ1xcdTA0M0EnOiAnaycsXG4gICdcXHUwNDNCJzogJ2wnLFxuICAnXFx1MDQzQyc6ICdtJyxcbiAgJ1xcdTA0M0QnOiAnbicsXG4gICdcXHUwNDNFJzogJ28nLFxuICAnXFx1MDQzRic6ICdwJyxcbiAgJ1xcdTA0NDAnOiAncicsXG4gICdcXHUwNDQxJzogJ3MnLFxuICAnXFx1MDQ0Mic6ICd0JyxcbiAgJ1xcdTA0NDMnOiAndScsXG4gICdcXHUwNDQ0JzogJ2YnLFxuICAnXFx1MDQ0NSc6ICdoJyxcbiAgJ1xcdTA0NDYnOiAnYycsXG4gICdcXHUwNDQ3JzogJ2MnLFxuICAnXFx1MDQ0OCc6ICdzJyxcbiAgJ1xcdTA0NDknOiAncycsXG4gICdcXHUwNDRCJzogJ3knLFxuICAnXFx1MDQ0RCc6ICdlJyxcbiAgJ1xcdTA0NEUnOiAndScsXG4gICdcXHUwNDRGJzogJ2EnLFxuICAnXFx1MDQ1MSc6ICdlJyxcbiAgJ1xcdTA0NTInOiAnZCcsXG4gICdcXHUwNDUzJzogJ2cnLFxuICAnXFx1MDQ1NCc6ICdlJyxcbiAgJ1xcdTA0NTUnOiAneicsXG4gICdcXHUwNDU2JzogJ2knLFxuICAnXFx1MDQ1Nyc6ICdpJyxcbiAgJ1xcdTA0NTgnOiAnaicsXG4gICdcXHUwNDU5JzogJ2wnLFxuICAnXFx1MDQ1QSc6ICduJyxcbiAgJ1xcdTA0NUInOiAnYycsXG4gICdcXHUwNDVDJzogJ2snLFxuICAnXFx1MDQ1RSc6ICd1JyxcbiAgJ1xcdTA0NUYnOiAnZCcsXG4gICdcXHUwNDYyJzogJ2UnLFxuICAnXFx1MDQ2Myc6ICdlJyxcbiAgJ1xcdTA0NkEnOiAnYScsXG4gICdcXHUwNDZCJzogJ2EnLFxuICAnXFx1MDQ3Mic6ICdmJyxcbiAgJ1xcdTA0NzMnOiAnZicsXG4gICdcXHUwNDc0JzogJ3knLFxuICAnXFx1MDQ3NSc6ICd5JyxcbiAgJ1xcdTA0OTAnOiAnZycsXG4gICdcXHUwNDkxJzogJ2cnLFxuICAnXFx1MDQ5Mic6ICdnJyxcbiAgJ1xcdTA0OTMnOiAnZycsXG4gICdcXHUwNDk0JzogJ2cnLFxuICAnXFx1MDQ5NSc6ICdnJyxcbiAgJ1xcdTA0OTYnOiAneicsXG4gICdcXHUwNDk3JzogJ3onLFxuICAnXFx1MDQ5QSc6ICdrJyxcbiAgJ1xcdTA0OUInOiAnaycsXG4gICdcXHUwNDlDJzogJ2snLFxuICAnXFx1MDQ5RCc6ICdrJyxcbiAgJ1xcdTA0OUUnOiAnaycsXG4gICdcXHUwNDlGJzogJ2snLFxuICAnXFx1MDRBMCc6ICdrJyxcbiAgJ1xcdTA0QTEnOiAnaycsXG4gICdcXHUwNEEyJzogJ24nLFxuICAnXFx1MDRBMyc6ICduJyxcbiAgJ1xcdTA0QTQnOiAnbicsXG4gICdcXHUwNEE1JzogJ24nLFxuICAnXFx1MDRBNic6ICdwJyxcbiAgJ1xcdTA0QTcnOiAncCcsXG4gICdcXHUwNEE4JzogJ28nLFxuICAnXFx1MDRBOSc6ICdvJyxcbiAgJ1xcdTA0QUEnOiAncycsXG4gICdcXHUwNEFCJzogJ3MnLFxuICAnXFx1MDRBQyc6ICd0JyxcbiAgJ1xcdTA0QUQnOiAndCcsXG4gICdcXHUwNEFFJzogJ3UnLFxuICAnXFx1MDRBRic6ICd1JyxcbiAgJ1xcdTA0QjAnOiAndScsXG4gICdcXHUwNEIxJzogJ3UnLFxuICAnXFx1MDRCMic6ICdoJyxcbiAgJ1xcdTA0QjMnOiAnaCcsXG4gICdcXHUwNEI0JzogJ2MnLFxuICAnXFx1MDRCNSc6ICdjJyxcbiAgJ1xcdTA0QjYnOiAnYycsXG4gICdcXHUwNEI3JzogJ2MnLFxuICAnXFx1MDRCOCc6ICdjJyxcbiAgJ1xcdTA0QjknOiAnYycsXG4gICdcXHUwNEJBJzogJ2gnLFxuICAnXFx1MDRCQic6ICdoJyxcbiAgJ1xcdTA0QkMnOiAnYycsXG4gICdcXHUwNEJEJzogJ2MnLFxuICAnXFx1MDRCRSc6ICdjJyxcbiAgJ1xcdTA0QkYnOiAnYycsXG4gICdcXHUwNEMxJzogJ3onLFxuICAnXFx1MDRDMic6ICd6JyxcbiAgJ1xcdTA0QzMnOiAnaycsXG4gICdcXHUwNEM0JzogJ2snLFxuICAnXFx1MDRDNSc6ICdsJyxcbiAgJ1xcdTA0QzYnOiAnbCcsXG4gICdcXHUwNEM3JzogJ24nLFxuICAnXFx1MDRDOCc6ICduJyxcbiAgJ1xcdTA0QzknOiAnbicsXG4gICdcXHUwNENBJzogJ24nLFxuICAnXFx1MDRDQic6ICdjJyxcbiAgJ1xcdTA0Q0MnOiAnYycsXG4gICdcXHUwNEQwJzogJ2EnLFxuICAnXFx1MDREMSc6ICdhJyxcbiAgJ1xcdTA0RDInOiAnYScsXG4gICdcXHUwNEQzJzogJ2EnLFxuICAnXFx1MDRENCc6ICdhZScsXG4gICdcXHUwNEQ1JzogJ2FlJyxcbiAgJ1xcdTA0RDYnOiAnZScsXG4gICdcXHUwNEQ3JzogJ2UnLFxuICAnXFx1MDREOCc6ICdhJyxcbiAgJ1xcdTA0RDknOiAnYScsXG4gICdcXHUwNERBJzogJ2EnLFxuICAnXFx1MDREQic6ICdhJyxcbiAgJ1xcdTA0REMnOiAneicsXG4gICdcXHUwNEREJzogJ3onLFxuICAnXFx1MDRERSc6ICd6JyxcbiAgJ1xcdTA0REYnOiAneicsXG4gICdcXHUwNEUwJzogJ3onLFxuICAnXFx1MDRFMSc6ICd6JyxcbiAgJ1xcdTA0RTInOiAnaScsXG4gICdcXHUwNEUzJzogJ2knLFxuICAnXFx1MDRFNCc6ICdpJyxcbiAgJ1xcdTA0RTUnOiAnaScsXG4gICdcXHUwNEU2JzogJ28nLFxuICAnXFx1MDRFNyc6ICdvJyxcbiAgJ1xcdTA0RTgnOiAnbycsXG4gICdcXHUwNEU5JzogJ28nLFxuICAnXFx1MDRFQSc6ICdvJyxcbiAgJ1xcdTA0RUInOiAnbycsXG4gICdcXHUwNEVFJzogJ3UnLFxuICAnXFx1MDRFRic6ICd1JyxcbiAgJ1xcdTA0RjAnOiAndScsXG4gICdcXHUwNEYxJzogJ3UnLFxuICAnXFx1MDRGMic6ICd1JyxcbiAgJ1xcdTA0RjMnOiAndScsXG4gICdcXHUwNEY0JzogJ2MnLFxuICAnXFx1MDRGNSc6ICdjJyxcbiAgJ1xcdTA0RjgnOiAneScsXG4gICdcXHUwNEY5JzogJ3knLFxuICAnXFx1MDUwQSc6ICduJyxcbiAgJ1xcdTA1MEInOiAnbicsXG4gICdcXHUwNTBFJzogJ3QnLFxuICAnXFx1MDUwRic6ICd0JyxcbiAgJ1xcdTA1MUEnOiAncScsXG4gICdcXHUwNTFCJzogJ3EnLFxuICAnXFx1MDUxQyc6ICd3JyxcbiAgJ1xcdTA1MUQnOiAndycsXG59O1xuIiwKICAgICIvKipcbiAqIFN0cmluZyB1dGlsaXRpZXNcbiAqL1xuXG5pbXBvcnQgeyBzcGVjaWFsQ2hhck1hcCB9IGZyb20gJy4vdGFibGUvY2hhci10YWJsZSc7XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgdG8gVW5peCBmb3JtYXRcbiAqXG4gKiBQZXJmb3JtcyBjb252ZXJzaW9uIGZvbGxvd2luZyBsZWdhY3kgd2lraWRvdCBpbXBsZW1lbnRhdGlvbi5cbiAqIC0gQ29udmVydHMgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIEFTQ0lJIGNoYXJhY3RlcnNcbiAqIC0gQ29udmVydHMgdG8gbG93ZXJjYXNlXG4gKiAtIENvbnZlcnRzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIHRvIGh5cGhlbnNcbiAqIC0gUmVkdWNlcyBjb25zZWN1dGl2ZSBoeXBoZW5zL2NvbG9ucyB0byBzaW5nbGVcbiAqIC0gUmVtb3ZlcyBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnMvY29sb25zXG4gKlxuICogQHBhcmFtIHRhcmdldFN0ciAtIFN0cmluZyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBDb252ZXJ0ZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VuaXgodGFyZ2V0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBDb252ZXJ0IHNwZWNpYWwgY2hhcmFjdGVyc1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGZvciAoY29uc3QgY2hhciBvZiB0YXJnZXRTdHIpIHtcbiAgICBjb25zdCBtYXBwZWQgPSBzcGVjaWFsQ2hhck1hcFtjaGFyXTtcbiAgICByZXN1bHQgKz0gbWFwcGVkICE9PSB1bmRlZmluZWQgPyBtYXBwZWQgOiBjaGFyO1xuICB9XG5cbiAgLy8gQ29udmVydCB0byBsb3dlcmNhc2VcbiAgcmVzdWx0ID0gcmVzdWx0LnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gUmVtb3ZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzXG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bXmEtejAtOVxcLTpfXS9nLCAnLScpO1xuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXl8vLCAnOl8nKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLyg/PCE6KV8vZywgJy0nKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL14tKi8sICcnKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLy0qJC8sICcnKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLy17Mix9L2csICctJyk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC86ezIsfS9nLCAnOicpO1xuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvOi0vZywgJzonKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLy06L2csICc6Jyk7XG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9fLS9nLCAnXycpO1xuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvLV8vZywgJ18nKTtcblxuICAvLyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgY29sb25zXG4gIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9eOi8sICcnKTtcbiAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLzokLywgJycpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogU3RyaW5nVXRpbCBjbGFzcyAoUHl0aG9uIGNvbXBhdGlibGUpXG4gKi9cbmV4cG9ydCBjb25zdCBTdHJpbmdVdGlsID0ge1xuICB0b1VuaXgsXG59O1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IFVzZXIgfSBmcm9tICcuL3VzZXInO1xuXG4vKipcbiAqIFVzZXIgY29sbGVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVXNlckNvbGxlY3Rpb24gZXh0ZW5kcyBBcnJheTxVc2VyIHwgbnVsbD4ge1xuICBjb25zdHJ1Y3Rvcih1c2Vycz86IChVc2VyIHwgbnVsbClbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKHVzZXJzKSB7XG4gICAgICB0aGlzLnB1c2goLi4udXNlcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGJ5IHVzZXJuYW1lXG4gICAqIEBwYXJhbSBuYW1lIC0gVXNlcm5hbWVcbiAgICogQHJldHVybnMgVXNlciBvciB1bmRlZmluZWRcbiAgICovXG4gIGZpbmRCeU5hbWUobmFtZTogc3RyaW5nKTogVXNlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG93ZXJOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGZvciAoY29uc3QgdXNlciBvZiB0aGlzKSB7XG4gICAgICBpZiAodXNlciAmJiB1c2VyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbG93ZXJOYW1lKSB7XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgdXNlciBJRFxuICAgKiBAcGFyYW0gaWQgLSBVc2VyIElEXG4gICAqIEByZXR1cm5zIFVzZXIgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBmaW5kQnlJZChpZDogbnVtYmVyKTogVXNlciB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCB1c2VyIG9mIHRoaXMpIHtcbiAgICAgIGlmICh1c2VyICYmIHVzZXIuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBvbmx5IG5vbi1udWxsIHVzZXJzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIG5vbi1udWxsIHVzZXJzXG4gICAqL1xuICBmaWx0ZXJOb25OdWxsKCk6IFVzZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyKCh1c2VyKTogdXNlciBpcyBVc2VyID0+IHVzZXIgIT09IG51bGwpO1xuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgcExpbWl0IGZyb20gJ3AtbGltaXQnO1xuaW1wb3J0IHsgTm9FbGVtZW50RXJyb3IsIE5vdEZvdW5kRXhjZXB0aW9uLCBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBERUZBVUxUX0FNQ19DT05GSUcgfSBmcm9tICcuLi8uLi9jb25uZWN0b3IvYW1jLWNvbmZpZyc7XG5pbXBvcnQgeyB0b1VuaXggfSBmcm9tICcuLi8uLi91dGlsL3N0cmluZy11dGlsJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50UmVmIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIsIFVzZXJUeXBlIH0gZnJvbSAnLi9hYnN0cmFjdC11c2VyJztcbmltcG9ydCB7IFVzZXJDb2xsZWN0aW9uIH0gZnJvbSAnLi91c2VyLWNvbGxlY3Rpb24nO1xuXG4vKipcbiAqIFVzZXIgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEYXRhIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkaXNwbGF5TmFtZT86IHN0cmluZyB8IG51bGw7XG4gIGF2YXRhclVybD86IHN0cmluZyB8IG51bGw7XG4gIHVuaXhOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZ3VsYXIgdXNlclxuICovXG5leHBvcnQgY2xhc3MgVXNlciBpbXBsZW1lbnRzIEFic3RyYWN0VXNlciB7XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IENsaWVudFJlZjtcblxuICAvKiogVXNlciBJRCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IG51bWJlcjtcblxuICAvKiogVXNlcm5hbWUgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBuYW1lICovXG4gIHB1YmxpYyByZWFkb25seSBkaXNwbGF5TmFtZTogc3RyaW5nIHwgbnVsbDtcblxuICAvKiogQXZhdGFyIFVSTCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhdGFyVXJsOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKiBVTklYIGZvcm1hdCB1c2VybmFtZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdW5peE5hbWU6IHN0cmluZztcblxuICAvKiogSVAgYWRkcmVzcyAobnVsbCBmb3IgcmVndWxhciB1c2VycykgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiogVXNlciB0eXBlICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyVHlwZTogVXNlclR5cGUgPSAndXNlcic7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnRSZWYsIGRhdGE6IFVzZXJEYXRhKSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMuZGlzcGxheU5hbWUgPSBkYXRhLmRpc3BsYXlOYW1lID8/IG51bGw7XG4gICAgdGhpcy5hdmF0YXJVcmwgPSBkYXRhLmF2YXRhclVybCA/PyBgaHR0cHM6Ly93d3cud2lraWRvdC5jb20vYXZhdGFyLnBocD91c2VyaWQ9JHtkYXRhLmlkfWA7XG4gICAgdGhpcy51bml4TmFtZSA9IGRhdGEudW5peE5hbWUgPz8gdG9Vbml4KGRhdGEubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXIgZnJvbSB1c2VybmFtZVxuICAgKiBAcGFyYW0gY2xpZW50IC0gQ2xpZW50XG4gICAqIEBwYXJhbSBuYW1lIC0gVXNlcm5hbWVcbiAgICogQHJldHVybnMgVXNlciAobnVsbCBpZiBub3QgZm91bmQpXG4gICAqL1xuICBzdGF0aWMgZnJvbU5hbWUoY2xpZW50OiBDbGllbnRSZWYsIG5hbWU6IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzxVc2VyIHwgbnVsbD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVuaXhOYW1lID0gdG9Vbml4KG5hbWUpO1xuICAgICAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly93d3cud2lraWRvdC5jb20vdXNlcjppbmZvLyR7dW5peE5hbWV9YDtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggdXNlciBpbmZvOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoaHRtbCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZXhpc3RlbmNlXG4gICAgICAgIGlmICgkKCdkaXYuZXJyb3ItYmxvY2snKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgaWRcbiAgICAgICAgY29uc3QgdXNlcklkRWxlbSA9ICQoJ2EuYnRuLmJ0bi1kZWZhdWx0LmJ0bi14cycpO1xuICAgICAgICBpZiAodXNlcklkRWxlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ1VzZXIgSUQgZWxlbWVudCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBocmVmID0gdXNlcklkRWxlbS5hdHRyKCdocmVmJyk7XG4gICAgICAgIGlmICghaHJlZikge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignVXNlciBJRCBocmVmIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVzZXJJZCA9IE51bWJlci5wYXJzZUludChocmVmLnNwbGl0KCcvJykucG9wKCkgPz8gJzAnLCAxMCk7XG5cbiAgICAgICAgLy8gR2V0IG5hbWVcbiAgICAgICAgY29uc3QgbmFtZUVsZW0gPSAkKCdoMS5wcm9maWxlLXRpdGxlJyk7XG4gICAgICAgIGlmIChuYW1lRWxlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ1VzZXIgbmFtZSBlbGVtZW50IG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVzZXJOYW1lID0gbmFtZUVsZW0udGV4dCgpLnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gbmV3IFVzZXIoY2xpZW50LCB7XG4gICAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgICBuYW1lOiB1c2VyTmFtZSxcbiAgICAgICAgICB1bml4TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXhjZXB0aW9uIHx8IGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgdXNlcjogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXJzIGZyb20gbXVsdGlwbGUgdXNlcm5hbWVzXG4gICAqIEBwYXJhbSBjbGllbnQgLSBDbGllbnRcbiAgICogQHBhcmFtIG5hbWVzIC0gQXJyYXkgb2YgdXNlcm5hbWVzXG4gICAqIEByZXR1cm5zIFVzZXIgY29sbGVjdGlvblxuICAgKi9cbiAgc3RhdGljIGZyb21OYW1lcyhjbGllbnQ6IENsaWVudFJlZiwgbmFtZXM6IHN0cmluZ1tdKTogV2lraWRvdFJlc3VsdEFzeW5jPFVzZXJDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gTGltaXQgY29uY3VycmVudCBjb25uZWN0aW9uc1xuICAgICAgICBjb25zdCBsaW1pdCA9IHBMaW1pdChERUZBVUxUX0FNQ19DT05GSUcuc2VtYXBob3JlTGltaXQpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBuYW1lcy5tYXAoKG5hbWUpID0+XG4gICAgICAgICAgICBsaW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFVzZXIuZnJvbU5hbWUoY2xpZW50LCBuYW1lKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pc09rKCkgPyByZXN1bHQudmFsdWUgOiBudWxsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXcgVXNlckNvbGxlY3Rpb24ocmVzdWx0cyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IHVzZXJzOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLy8gQWJzdHJhY3RVc2VyIGltcGxlbWVudGF0aW9uXG4gIGlzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpc0RlbGV0ZWRVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc0Fub255bW91c1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzR3Vlc3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpc1dpa2lkb3RVc2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBVc2VyKGlkPSR7dGhpcy5pZH0sIG5hbWU9JHt0aGlzLm5hbWV9LCB1bml4TmFtZT0ke3RoaXMudW5peE5hbWV9KWA7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGllbnRSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciwgVXNlclR5cGUgfSBmcm9tICcuL2Fic3RyYWN0LXVzZXInO1xuXG4vKipcbiAqIFdpa2lkb3Qgc3lzdGVtIHVzZXJcbiAqL1xuZXhwb3J0IGNsYXNzIFdpa2lkb3RVc2VyIGltcGxlbWVudHMgQWJzdHJhY3RVc2VyIHtcbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50UmVmO1xuXG4gIC8qKiBVc2VyIElEICgwIGZvciBXaWtpZG90IHN5c3RlbSkgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlkOiBudW1iZXIgPSAwO1xuXG4gIC8qKiBVc2VybmFtZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nID0gJ1dpa2lkb3QnO1xuXG4gIC8qKiBVTklYIGZvcm1hdCB1c2VybmFtZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdW5peE5hbWU6IHN0cmluZyA9ICd3aWtpZG90JztcblxuICAvKiogQXZhdGFyIFVSTCAobnVsbCBmb3Igc3lzdGVtIHVzZXIpICovXG4gIHB1YmxpYyByZWFkb25seSBhdmF0YXJVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBJUCBhZGRyZXNzIChudWxsIGZvciBzeXN0ZW0gdXNlcikgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiogVXNlciB0eXBlICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyVHlwZTogVXNlclR5cGUgPSAnd2lraWRvdCc7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnRSZWYpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgfVxuXG4gIC8vIEFic3RyYWN0VXNlciBpbXBsZW1lbnRhdGlvblxuICBpc1VzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzRGVsZXRlZFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzQW5vbnltb3VzVXNlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaXNHdWVzdFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlzV2lraWRvdFVzZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgV2lraWRvdFVzZXIobmFtZT0ke3RoaXMubmFtZX0sIHVuaXhOYW1lPSR7dGhpcy51bml4TmFtZX0pYDtcbiAgfVxufVxuIiwKICAgICJleHBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciwgVXNlclR5cGUgfSBmcm9tICcuL2Fic3RyYWN0LXVzZXInO1xuZXhwb3J0IHsgQW5vbnltb3VzVXNlciB9IGZyb20gJy4vYW5vbnltb3VzLXVzZXInO1xuZXhwb3J0IHsgRGVsZXRlZFVzZXIgfSBmcm9tICcuL2RlbGV0ZWQtdXNlcic7XG5leHBvcnQgeyBHdWVzdFVzZXIgfSBmcm9tICcuL2d1ZXN0LXVzZXInO1xuZXhwb3J0IHsgVXNlciwgdHlwZSBVc2VyRGF0YSB9IGZyb20gJy4vdXNlcic7XG5leHBvcnQgeyBVc2VyQ29sbGVjdGlvbiB9IGZyb20gJy4vdXNlci1jb2xsZWN0aW9uJztcbmV4cG9ydCB7IFdpa2lkb3RVc2VyIH0gZnJvbSAnLi93aWtpZG90LXVzZXInO1xuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgdHlwZSB7IEFueU5vZGUgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uL2NvbW1vbi9sb2dnZXInO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRSZWYgfSBmcm9tICcuLi8uLi9tb2R1bGUvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIgfSBmcm9tICcuLi8uLi9tb2R1bGUvdXNlcic7XG5pbXBvcnQgeyBBbm9ueW1vdXNVc2VyLCBEZWxldGVkVXNlciwgR3Vlc3RVc2VyLCBVc2VyLCBXaWtpZG90VXNlciB9IGZyb20gJy4uLy4uL21vZHVsZS91c2VyJztcblxuLyoqXG4gKiBQYXJzZSBwcmludHVzZXIgZWxlbWVudCBhbmQgcmV0dXJuIHVzZXIgb2JqZWN0XG4gKlxuICogQHBhcmFtIGNsaWVudCAtIFdpa2lkb3QgY2xpZW50XG4gKiBAcGFyYW0gZWxlbSAtIEVsZW1lbnQgdG8gcGFyc2UgKGVsZW1lbnQgd2l0aCBwcmludHVzZXIgY2xhc3MpXG4gKiBAcmV0dXJucyBQYXJzZWQgdXNlciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXNlcihjbGllbnQ6IENsaWVudFJlZiwgZWxlbTogY2hlZXJpby5DaGVlcmlvPEFueU5vZGU+KTogQWJzdHJhY3RVc2VyIHtcbiAgY29uc3QgY2xhc3NBdHRyID0gZWxlbS5hdHRyKCdjbGFzcycpID8/ICcnO1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NBdHRyLnNwbGl0KC9cXHMrLyk7XG5cbiAgLy8gQ2hlY2sgZm9yIGRlbGV0ZWQgdXNlclxuICBpZiAoY2xhc3Nlcy5pbmNsdWRlcygnZGVsZXRlZCcpKSB7XG4gICAgY29uc3QgZGF0YUlkID0gZWxlbS5hdHRyKCdkYXRhLWlkJyk7XG4gICAgY29uc3QgdXNlcklkID0gZGF0YUlkID8gTnVtYmVyLnBhcnNlSW50KGRhdGFJZCwgMTApIDogMDtcbiAgICByZXR1cm4gbmV3IERlbGV0ZWRVc2VyKGNsaWVudCwgdXNlcklkKTtcbiAgfVxuXG4gIC8vIElmIHRleHQgaXMgXCIodXNlciBkZWxldGVkKVwiXG4gIGNvbnN0IHRleHQgPSBlbGVtLnRleHQoKS50cmltKCk7XG4gIGlmICh0ZXh0ID09PSAnKHVzZXIgZGVsZXRlZCknKSB7XG4gICAgcmV0dXJuIG5ldyBEZWxldGVkVXNlcihjbGllbnQsIDApO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGFub255bW91cyB1c2VyXG4gIGlmIChjbGFzc2VzLmluY2x1ZGVzKCdhbm9ueW1vdXMnKSkge1xuICAgIGNvbnN0IGlwRWxlbSA9IGVsZW0uZmluZCgnc3Bhbi5pcCcpO1xuICAgIGlmIChpcEVsZW0ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXAgPSBpcEVsZW0udGV4dCgpLnJlcGxhY2UoL1soKV0vZywgJycpLnRyaW0oKTtcbiAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzVXNlcihjbGllbnQsIGlwKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNVc2VyKGNsaWVudCwgJycpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIGd1ZXN0IHVzZXIgKGhhcyBHcmF2YXRhciBhdmF0YXIpXG4gIGNvbnN0IGltZ0VsZW0gPSBlbGVtLmZpbmQoJ2ltZycpO1xuICBpZiAoaW1nRWxlbS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc3JjID0gaW1nRWxlbS5hdHRyKCdzcmMnKSA/PyAnJztcbiAgICBpZiAoc3JjLmluY2x1ZGVzKCdncmF2YXRhci5jb20nKSkge1xuICAgICAgY29uc3QgZ3Vlc3ROYW1lID0gdGV4dC5zcGxpdCgnICcpWzBdID8/ICdHdWVzdCc7XG4gICAgICByZXR1cm4gbmV3IEd1ZXN0VXNlcihjbGllbnQsIGd1ZXN0TmFtZSwgc3JjKTtcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBmb3IgV2lraWRvdCBzeXN0ZW0gdXNlclxuICBpZiAodGV4dCA9PT0gJ1dpa2lkb3QnKSB7XG4gICAgcmV0dXJuIG5ldyBXaWtpZG90VXNlcihjbGllbnQpO1xuICB9XG5cbiAgLy8gUmVndWxhciB1c2VyXG4gIGNvbnN0IGxpbmtzID0gZWxlbS5maW5kKCdhJyk7XG4gIGlmIChsaW5rcy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBUcmVhdCBhcyBEZWxldGVkVXNlciBpZiBubyBsaW5rXG4gICAgcmV0dXJuIG5ldyBEZWxldGVkVXNlcihjbGllbnQsIDApO1xuICB9XG5cbiAgLy8gTGFzdCBsaW5rIGlzIHRoZSB1c2VyIGxpbmtcbiAgY29uc3QgdXNlckxpbmsgPSBsaW5rcy5sYXN0KCk7XG4gIGNvbnN0IHVzZXJOYW1lID0gdXNlckxpbmsudGV4dCgpLnRyaW0oKTtcbiAgY29uc3QgaHJlZiA9IHVzZXJMaW5rLmF0dHIoJ2hyZWYnKSA/PyAnJztcbiAgY29uc3Qgb25jbGljayA9IHVzZXJMaW5rLmF0dHIoJ29uY2xpY2snKSA/PyAnJztcblxuICAvLyBFeHRyYWN0IHVuaXhfbmFtZSBmcm9tIGhyZWZcbiAgY29uc3QgdW5peE5hbWUgPSBocmVmLnJlcGxhY2UoL14uKlxcL3VzZXI6aW5mb1xcLy8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEV4dHJhY3QgdXNlcl9pZCBmcm9tIG9uY2xpY2tcbiAgLy8gUGF0dGVybjogXCJXSUtJRE9ULnBhZ2UubGlzdGVuZXJzLnVzZXJJbmZvKDEyMzQ1Nik7IHJldHVybiBmYWxzZTtcIlxuICBjb25zdCB1c2VySWRNYXRjaCA9IG9uY2xpY2subWF0Y2goL3VzZXJJbmZvXFwoKFxcZCspXFwpLyk7XG4gIGNvbnN0IHVzZXJJZCA9IHVzZXJJZE1hdGNoPy5bMV0gPyBOdW1iZXIucGFyc2VJbnQodXNlcklkTWF0Y2hbMV0sIDEwKSA6IDA7XG5cbiAgLy8gR2VuZXJhdGUgYXZhdGFyIFVSTFxuICBjb25zdCBhdmF0YXJVcmwgPSB1c2VySWQgPiAwID8gYGh0dHA6Ly93d3cud2lraWRvdC5jb20vYXZhdGFyLnBocD91c2VyaWQ9JHt1c2VySWR9YCA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gbmV3IFVzZXIoY2xpZW50LCB7XG4gICAgaWQ6IHVzZXJJZCxcbiAgICBuYW1lOiB1c2VyTmFtZSxcbiAgICB1bml4TmFtZSxcbiAgICBhdmF0YXJVcmwsXG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIGRhdGUgZnJvbSBvZGF0ZSBlbGVtZW50XG4gKlxuICogQHBhcmFtIGVsZW0gLSBFbGVtZW50IHRvIHBhcnNlIChvZGF0ZSBlbGVtZW50KVxuICogQHJldHVybnMgUGFyc2VkIERhdGUsIG9yIG51bGwgb24gcGFyc2UgZmFpbHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPZGF0ZShlbGVtOiBjaGVlcmlvLkNoZWVyaW88QW55Tm9kZT4pOiBEYXRlIHwgbnVsbCB7XG4gIGNvbnN0IGNsYXNzQXR0ciA9IGVsZW0uYXR0cignY2xhc3MnKSA/PyAnJztcblxuICAvLyBFeHRyYWN0IFVuaXggdGltZXN0YW1wIGZyb20gY2xhc3NcbiAgLy8gUGF0dGVybjogXCJvZGF0ZSB0aW1lXzEyMzQ1Njc4OTAgZm9ybWF0Xy4uLlwiIGZvcm1hdFxuICBjb25zdCB0aW1lTWF0Y2ggPSBjbGFzc0F0dHIubWF0Y2goL3RpbWVfKFxcZCspLyk7XG4gIGlmICh0aW1lTWF0Y2g/LlsxXSkge1xuICAgIGNvbnN0IHVuaXhUaW1lID0gTnVtYmVyLnBhcnNlSW50KHRpbWVNYXRjaFsxXSwgMTApO1xuICAgIHJldHVybiBuZXcgRGF0ZSh1bml4VGltZSAqIDEwMDApO1xuICB9XG5cbiAgLy8gRmFsbGJhY2s6IHBhcnNlIGZyb20gdGV4dFxuICBjb25zdCB0ZXh0ID0gZWxlbS50ZXh0KCkudHJpbSgpO1xuICBjb25zdCBwYXJzZWQgPSBEYXRlLnBhcnNlKHRleHQpO1xuICBpZiAoIU51bWJlci5pc05hTihwYXJzZWQpKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlZCk7XG4gIH1cblxuICAvLyBSZXR1cm4gbnVsbCBhbmQgbG9nIHdhcm5pbmcgaWYgcGFyc2luZyBmYWlsc1xuICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIG9kYXRlIGVsZW1lbnQ6IGNsYXNzPVwiJHtjbGFzc0F0dHJ9XCIsIHRleHQ9XCIke3RleHR9XCJgKTtcbiAgcmV0dXJuIG51bGw7XG59XG4iLAogICAgImV4cG9ydCB7IHBhcnNlT2RhdGUsIHBhcnNlVXNlciB9IGZyb20gJy4vdXNlcic7XG4iLAogICAgIi8qKlxuICogRGVjb3JhdG9yIHV0aWxpdGllc1xuICovXG5cbmltcG9ydCB7IExvZ2luUmVxdWlyZWRFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYywgd2RFcnJBc3luYyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFR5cGUgZm9yIG9iamVjdHMgdGhhdCBoYXZlIGEgY2xpZW50IHJlZmVyZW5jZVxuICovXG5pbnRlcmZhY2UgSGFzQ2xpZW50IHtcbiAgY2xpZW50PzogeyByZXF1aXJlTG9naW4oKTogeyBpc0VycigpOiBib29sZWFuOyBlcnJvcj86IEVycm9yIH0gfTtcbiAgc2l0ZT86IHsgY2xpZW50OiB7IHJlcXVpcmVMb2dpbigpOiB7IGlzRXJyKCk6IGJvb2xlYW47IGVycm9yPzogRXJyb3IgfSB9IH07XG4gIHRocmVhZD86IHsgc2l0ZTogeyBjbGllbnQ6IHsgcmVxdWlyZUxvZ2luKCk6IHsgaXNFcnIoKTogYm9vbGVhbjsgZXJyb3I/OiBFcnJvciB9IH0gfSB9O1xufVxuXG4vKipcbiAqIEdldCBjbGllbnQgcmVmZXJlbmNlIGZyb20gYW4gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGdldENsaWVudFJlZihcbiAgb2JqOiBIYXNDbGllbnRcbik6IHsgcmVxdWlyZUxvZ2luKCk6IHsgaXNFcnIoKTogYm9vbGVhbjsgZXJyb3I/OiBFcnJvciB9IH0gfCBudWxsIHtcbiAgaWYgKG9iai5jbGllbnQpIHJldHVybiBvYmouY2xpZW50O1xuICBpZiAob2JqLnNpdGU/LmNsaWVudCkgcmV0dXJuIG9iai5zaXRlLmNsaWVudDtcbiAgaWYgKG9iai50aHJlYWQ/LnNpdGU/LmNsaWVudCkgcmV0dXJuIG9iai50aHJlYWQuc2l0ZS5jbGllbnQ7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIExvZ2luIHJlcXVpcmVkIG1ldGhvZCBkZWNvcmF0b3JcbiAqXG4gKiBNZXRob2RzIGRlY29yYXRlZCB3aXRoIHRoaXMgd2lsbCBjaGVjayBsb2dpbiBzdGF0dXMgYmVmb3JlIGV4ZWN1dGlvbi5cbiAqIFJldHVybnMgTG9naW5SZXF1aXJlZEVycm9yIGlmIG5vdCBsb2dnZWQgaW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGNsYXNzIFBhZ2Uge1xuICogICBAUmVxdWlyZUxvZ2luXG4gKiAgIGRlc3Ryb3koKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAqICAgICByZXR1cm4gZnJvbVByb21pc2UoYXN5bmMgKCkgPT4geyAuLi4gfSwgKGUpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoLi4uKSk7XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlcXVpcmVMb2dpbjxcbiAgVGhpcyBleHRlbmRzIEhhc0NsaWVudCxcbiAgQXJncyBleHRlbmRzIHVua25vd25bXSxcbiAgUmV0dXJuIGV4dGVuZHMgV2lraWRvdFJlc3VsdEFzeW5jPHVua25vd24+LFxuPihcbiAgdGFyZ2V0OiAodGhpczogVGhpcywgLi4uYXJnczogQXJncykgPT4gUmV0dXJuLFxuICBfY29udGV4dDogQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0PFRoaXMsICh0aGlzOiBUaGlzLCAuLi5hcmdzOiBBcmdzKSA9PiBSZXR1cm4+XG4pOiAodGhpczogVGhpcywgLi4uYXJnczogQXJncykgPT4gUmV0dXJuIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGlzOiBUaGlzLCAuLi5hcmdzOiBBcmdzKTogUmV0dXJuIHtcbiAgICBjb25zdCBjbGllbnRSZWYgPSBnZXRDbGllbnRSZWYodGhpcyk7XG4gICAgaWYgKCFjbGllbnRSZWYpIHtcbiAgICAgIHJldHVybiB3ZEVyckFzeW5jKG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0NsaWVudCByZWZlcmVuY2Ugbm90IGZvdW5kJykpIGFzIHVua25vd24gYXMgUmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gY2xpZW50UmVmLnJlcXVpcmVMb2dpbigpO1xuICAgIGlmIChsb2dpblJlc3VsdC5pc0VycigpKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAgIFByb21pc2UucmVqZWN0KGxvZ2luUmVzdWx0LmVycm9yKSxcbiAgICAgICAgKCkgPT4gbmV3IExvZ2luUmVxdWlyZWRFcnJvcignTG9naW4gcmVxdWlyZWQnKVxuICAgICAgKSBhcyB1bmtub3duIGFzIFJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0LmNhbGwodGhpcywgLi4uYXJncyk7XG4gIH07XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2hlZXJpbywgQ2hlZXJpb0FQSSB9IGZyb20gJ2NoZWVyaW8nO1xuaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbmltcG9ydCB0eXBlIHsgQW55Tm9kZSwgRWxlbWVudCB9IGZyb20gJ2RvbWhhbmRsZXInO1xuaW1wb3J0IHsgUmVxdWlyZUxvZ2luIH0gZnJvbSAnLi4vLi4vY29tbW9uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgTG9naW5SZXF1aXJlZEVycm9yLCBOb0VsZW1lbnRFcnJvciwgVW5leHBlY3RlZEVycm9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VPZGF0ZSwgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHR5cGUgeyBDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBGb3J1bVRocmVhZFJlZiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5cbi8qKlxuICogRm9ydW0gcG9zdCBkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ydW1Qb3N0RGF0YSB7XG4gIHRocmVhZDogRm9ydW1UaHJlYWRSZWY7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgZWxlbWVudDogRWxlbWVudDtcbiAgY3JlYXRlZEJ5OiBBYnN0cmFjdFVzZXI7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgZWRpdGVkQnk/OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBlZGl0ZWRBdD86IERhdGUgfCBudWxsO1xuICBwYXJlbnRJZD86IG51bWJlciB8IG51bGw7XG59XG5cbi8qKlxuICogRm9ydW0gcG9zdFxuICovXG5leHBvcnQgY2xhc3MgRm9ydW1Qb3N0IHtcbiAgcHVibGljIHJlYWRvbmx5IHRocmVhZDogRm9ydW1UaHJlYWRSZWY7XG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnQ7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQnk6IEFic3RyYWN0VXNlcjtcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdDogRGF0ZTtcbiAgcHVibGljIHJlYWRvbmx5IGVkaXRlZEJ5OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBwdWJsaWMgcmVhZG9ubHkgZWRpdGVkQXQ6IERhdGUgfCBudWxsO1xuICBwcml2YXRlIF9wYXJlbnRJZDogbnVtYmVyIHwgbnVsbDtcbiAgcHJpdmF0ZSBfc291cmNlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBGb3J1bVBvc3REYXRhKSB7XG4gICAgdGhpcy50aHJlYWQgPSBkYXRhLnRocmVhZDtcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICB0aGlzLnRpdGxlID0gZGF0YS50aXRsZTtcbiAgICB0aGlzLnRleHQgPSBkYXRhLnRleHQ7XG4gICAgdGhpcy5lbGVtZW50ID0gZGF0YS5lbGVtZW50O1xuICAgIHRoaXMuY3JlYXRlZEJ5ID0gZGF0YS5jcmVhdGVkQnk7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBkYXRhLmNyZWF0ZWRBdDtcbiAgICB0aGlzLmVkaXRlZEJ5ID0gZGF0YS5lZGl0ZWRCeSA/PyBudWxsO1xuICAgIHRoaXMuZWRpdGVkQXQgPSBkYXRhLmVkaXRlZEF0ID8/IG51bGw7XG4gICAgdGhpcy5fcGFyZW50SWQgPSBkYXRhLnBhcmVudElkID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUGFyZW50IHBvc3QgSURcbiAgICovXG4gIGdldCBwYXJlbnRJZCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvdXJjZSBjb2RlIChXaWtpZG90IHN5bnRheClcbiAgICovXG4gIGdldFNvdXJjZSgpOiBXaWtpZG90UmVzdWx0QXN5bmM8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuX3NvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFByb21pc2UucmVzb2x2ZSh0aGlzLl9zb3VyY2UpLCAoZSkgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihTdHJpbmcoZSkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnRocmVhZC5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdmb3J1bS9zdWIvRm9ydW1FZGl0UG9zdEZvcm1Nb2R1bGUnLFxuICAgICAgICAgICAgdGhyZWFkSWQ6IHRoaXMudGhyZWFkLmlkLFxuICAgICAgICAgICAgcG9zdElkOiB0aGlzLmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJykpO1xuICAgICAgICBjb25zdCBzb3VyY2VFbGVtID0gJChcInRleHRhcmVhW25hbWU9J3NvdXJjZSddXCIpO1xuICAgICAgICBpZiAoc291cmNlRWxlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ1NvdXJjZSB0ZXh0YXJlYSBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBzb3VyY2VFbGVtLnRleHQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHJldHVybiBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgcG9zdCBzb3VyY2U6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXQgcG9zdFxuICAgKiBAcGFyYW0gc291cmNlIC0gTmV3IHNvdXJjZSAoV2lraWRvdCBzeW50YXgpXG4gICAqIEBwYXJhbSB0aXRsZSAtIE5ldyB0aXRsZSAoa2VlcHMgY3VycmVudCB0aXRsZSBpZiBvbWl0dGVkKVxuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICBlZGl0KHNvdXJjZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR2V0IGN1cnJlbnQgcmV2aXNpb24gSURcbiAgICAgICAgY29uc3QgZm9ybVJlc3VsdCA9IGF3YWl0IHRoaXMudGhyZWFkLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2ZvcnVtL3N1Yi9Gb3J1bUVkaXRQb3N0Rm9ybU1vZHVsZScsXG4gICAgICAgICAgICB0aHJlYWRJZDogdGhpcy50aHJlYWQuaWQsXG4gICAgICAgICAgICBwb3N0SWQ6IHRoaXMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKGZvcm1SZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGZvcm1SZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtUmVzcG9uc2UgPSBmb3JtUmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIWZvcm1SZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignRW1wdHkgZm9ybSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChTdHJpbmcoZm9ybVJlc3BvbnNlLmJvZHkgPz8gJycpKTtcbiAgICAgICAgY29uc3QgcmV2aXNpb25JbnB1dCA9ICQoXCJpbnB1dFtuYW1lPSdjdXJyZW50UmV2aXNpb25JZCddXCIpO1xuICAgICAgICBpZiAocmV2aXNpb25JbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0N1cnJlbnQgcmV2aXNpb24gSUQgaW5wdXQgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXZpc2lvblZhbHVlID0gcmV2aXNpb25JbnB1dC52YWwoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFJldmlzaW9uSWQgPSBOdW1iZXIucGFyc2VJbnQoU3RyaW5nKHJldmlzaW9uVmFsdWUgPz8gJycpLCAxMCk7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4oY3VycmVudFJldmlzaW9uSWQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdJbnZhbGlkIHJldmlzaW9uIElEIHZhbHVlJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIGVkaXRcbiAgICAgICAgY29uc3QgZWRpdFJlc3VsdCA9IGF3YWl0IHRoaXMudGhyZWFkLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnRm9ydW1BY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdzYXZlRWRpdFBvc3QnLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgICAgIHBvc3RJZDogdGhpcy5pZCxcbiAgICAgICAgICAgIGN1cnJlbnRSZXZpc2lvbklkLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlID8/IHRoaXMudGl0bGUsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKGVkaXRSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGVkaXRSZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgbG9jYWwgc3RhdGVcbiAgICAgICAgaWYgKHRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIExvZ2luUmVxdWlyZWRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGVkaXQgcG9zdDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgRm9ydW1Qb3N0KGlkPSR7dGhpcy5pZH0sIHRpdGxlPSR7dGhpcy50aXRsZX0pYDtcbiAgfVxufVxuXG4vKipcbiAqIEZvcnVtIHBvc3QgY29sbGVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgRm9ydW1Qb3N0Q29sbGVjdGlvbiBleHRlbmRzIEFycmF5PEZvcnVtUG9zdD4ge1xuICBwdWJsaWMgcmVhZG9ubHkgdGhyZWFkOiBGb3J1bVRocmVhZFJlZjtcblxuICBjb25zdHJ1Y3Rvcih0aHJlYWQ6IEZvcnVtVGhyZWFkUmVmLCBwb3N0cz86IEZvcnVtUG9zdFtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnRocmVhZCA9IHRocmVhZDtcbiAgICBpZiAocG9zdHMpIHtcbiAgICAgIHRoaXMucHVzaCguLi5wb3N0cyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgSURcbiAgICogQHBhcmFtIGlkIC0gUG9zdCBJRFxuICAgKiBAcmV0dXJucyBQb3N0ICh1bmRlZmluZWQgaWYgbm90IGZvdW5kKVxuICAgKi9cbiAgZmluZEJ5SWQoaWQ6IG51bWJlcik6IEZvcnVtUG9zdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgocG9zdCkgPT4gcG9zdC5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHBvc3RzIGZyb20gSFRNTCAoaW50ZXJuYWwgbWV0aG9kKVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX3BhcnNlKHRocmVhZDogRm9ydW1UaHJlYWRSZWYsICQ6IENoZWVyaW9BUEkpOiBGb3J1bVBvc3RbXSB7XG4gICAgY29uc3QgcG9zdHM6IEZvcnVtUG9zdFtdID0gW107XG5cbiAgICAkKCdkaXYucG9zdCcpLmVhY2goKF9pLCBwb3N0RWxlbSkgPT4ge1xuICAgICAgY29uc3QgJHBvc3QgPSAkKHBvc3RFbGVtKTtcbiAgICAgIGNvbnN0IHBvc3RJZEF0dHIgPSAkcG9zdC5hdHRyKCdpZCcpO1xuICAgICAgaWYgKCFwb3N0SWRBdHRyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBvc3RJZCA9IE51bWJlci5wYXJzZUludChwb3N0SWRBdHRyLnJlcGxhY2UoJ3Bvc3QtJywgJycpLCAxMCk7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHBvc3RJZCkpIHJldHVybjtcblxuICAgICAgLy8gR2V0IHBhcmVudCBwb3N0IElEXG4gICAgICBsZXQgcGFyZW50SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgY29uc3QgJHBhcmVudENvbnRhaW5lciA9ICRwb3N0LnBhcmVudCgpO1xuICAgICAgaWYgKCRwYXJlbnRDb250YWluZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCAkZ3JhbmRwYXJlbnQgPSAkcGFyZW50Q29udGFpbmVyLnBhcmVudCgpO1xuICAgICAgICBpZiAoJGdyYW5kcGFyZW50Lmxlbmd0aCA+IDAgJiYgJGdyYW5kcGFyZW50WzBdPy5uYW1lICE9PSAnYm9keScpIHtcbiAgICAgICAgICBjb25zdCBncmFuZHBhcmVudENsYXNzZXMgPSAkZ3JhbmRwYXJlbnQuYXR0cignY2xhc3MnKSA/PyAnJztcbiAgICAgICAgICBpZiAoZ3JhbmRwYXJlbnRDbGFzc2VzLmluY2x1ZGVzKCdwb3N0LWNvbnRhaW5lcicpKSB7XG4gICAgICAgICAgICBjb25zdCAkcGFyZW50UG9zdCA9ICRncmFuZHBhcmVudC5maW5kKCc+IGRpdi5wb3N0Jyk7XG4gICAgICAgICAgICBpZiAoJHBhcmVudFBvc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJlbnRQb3N0SWRBdHRyID0gJHBhcmVudFBvc3QuYXR0cignaWQnKTtcbiAgICAgICAgICAgICAgaWYgKHBhcmVudFBvc3RJZEF0dHIpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRJZCA9IE51bWJlci5wYXJzZUludChwYXJlbnRQb3N0SWRBdHRyLnJlcGxhY2UoJ3Bvc3QtJywgJycpLCAxMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRpdGxlIGFuZCBjb250ZW50XG4gICAgICBjb25zdCAkd3JhcHBlciA9ICRwb3N0LmZpbmQoJ2Rpdi5sb25nJyk7XG4gICAgICBpZiAoJHdyYXBwZXIubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgIGNvbnN0ICRoZWFkID0gJHdyYXBwZXIuZmluZCgnZGl2LmhlYWQnKTtcbiAgICAgIGlmICgkaGVhZC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgY29uc3QgJHRpdGxlID0gJGhlYWQuZmluZCgnZGl2LnRpdGxlJyk7XG4gICAgICBjb25zdCB0aXRsZSA9ICR0aXRsZS50ZXh0KCkudHJpbSgpO1xuXG4gICAgICBjb25zdCAkY29udGVudCA9ICR3cmFwcGVyLmZpbmQoJ2Rpdi5jb250ZW50Jyk7XG4gICAgICBjb25zdCB0ZXh0ID0gJGNvbnRlbnQuaHRtbCgpID8/ICcnO1xuXG4gICAgICAvLyBBdXRob3IgYW5kIHRpbWVzdGFtcFxuICAgICAgY29uc3QgJGluZm8gPSAkaGVhZC5maW5kKCdkaXYuaW5mbycpO1xuICAgICAgaWYgKCRpbmZvLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCAkdXNlckVsZW0gPSAkaW5mby5maW5kKCdzcGFuLnByaW50dXNlcicpO1xuICAgICAgaWYgKCR1c2VyRWxlbS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgY29uc3QgY3JlYXRlZEJ5ID0gcGFyc2VVc2VyKHRocmVhZC5zaXRlLmNsaWVudCBhcyBDbGllbnQsICR1c2VyRWxlbSBhcyBDaGVlcmlvPEFueU5vZGU+KTtcblxuICAgICAgY29uc3QgJG9kYXRlRWxlbSA9ICRpbmZvLmZpbmQoJ3NwYW4ub2RhdGUnKTtcbiAgICAgIGlmICgkb2RhdGVFbGVtLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBjcmVhdGVkQXQgPSBwYXJzZU9kYXRlKCRvZGF0ZUVsZW0gYXMgQ2hlZXJpbzxBbnlOb2RlPikgPz8gbmV3IERhdGUoKTtcblxuICAgICAgLy8gRWRpdCBpbmZvIChpZiBleGlzdHMpXG4gICAgICBsZXQgZWRpdGVkQnk6IEFic3RyYWN0VXNlciB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IGVkaXRlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgICBjb25zdCAkY2hhbmdlcyA9ICR3cmFwcGVyLmZpbmQoJ2Rpdi5jaGFuZ2VzJyk7XG4gICAgICBpZiAoJGNoYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCAkZWRpdFVzZXJFbGVtID0gJGNoYW5nZXMuZmluZCgnc3Bhbi5wcmludHVzZXInKTtcbiAgICAgICAgY29uc3QgJGVkaXRPZGF0ZUVsZW0gPSAkY2hhbmdlcy5maW5kKCdzcGFuLm9kYXRlJyk7XG4gICAgICAgIGlmICgkZWRpdFVzZXJFbGVtLmxlbmd0aCA+IDAgJiYgJGVkaXRPZGF0ZUVsZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGVkaXRlZEJ5ID0gcGFyc2VVc2VyKHRocmVhZC5zaXRlLmNsaWVudCBhcyBDbGllbnQsICRlZGl0VXNlckVsZW0gYXMgQ2hlZXJpbzxBbnlOb2RlPik7XG4gICAgICAgICAgZWRpdGVkQXQgPSBwYXJzZU9kYXRlKCRlZGl0T2RhdGVFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBvc3RzLnB1c2goXG4gICAgICAgIG5ldyBGb3J1bVBvc3Qoe1xuICAgICAgICAgIHRocmVhZCxcbiAgICAgICAgICBpZDogcG9zdElkLFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZWxlbWVudDogcG9zdEVsZW0gYXMgRWxlbWVudCxcbiAgICAgICAgICBjcmVhdGVkQnksXG4gICAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICAgIGVkaXRlZEJ5LFxuICAgICAgICAgIGVkaXRlZEF0LFxuICAgICAgICAgIHBhcmVudElkLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwb3N0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBvc3RzIGluIGEgdGhyZWFkXG4gICAqL1xuICBzdGF0aWMgYWNxdWlyZUFsbEluVGhyZWFkKHRocmVhZDogRm9ydW1UaHJlYWRSZWYpOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1Qb3N0Q29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc3RzOiBGb3J1bVBvc3RbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGZpcnN0UmVzdWx0ID0gYXdhaXQgdGhyZWFkLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2ZvcnVtL0ZvcnVtVmlld1RocmVhZFBvc3RzTW9kdWxlJyxcbiAgICAgICAgICAgIHBhZ2VObzogJzEnLFxuICAgICAgICAgICAgdDogU3RyaW5nKHRocmVhZC5pZCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKGZpcnN0UmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyBmaXJzdFJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0UmVzcG9uc2UgPSBmaXJzdFJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFmaXJzdFJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RCb2R5ID0gU3RyaW5nKGZpcnN0UmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgIGNvbnN0ICRmaXJzdCA9IGNoZWVyaW8ubG9hZChmaXJzdEJvZHkpO1xuXG4gICAgICAgIHBvc3RzLnB1c2goLi4uRm9ydW1Qb3N0Q29sbGVjdGlvbi5fcGFyc2UodGhyZWFkLCAkZmlyc3QpKTtcblxuICAgICAgICAvLyBDaGVjayBwYWdpbmF0aW9uXG4gICAgICAgIGNvbnN0ICRwYWdlciA9ICRmaXJzdCgnZGl2LnBhZ2VyJyk7XG4gICAgICAgIGlmICgkcGFnZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVBvc3RDb2xsZWN0aW9uKHRocmVhZCwgcG9zdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgJHBhZ2VyVGFyZ2V0cyA9ICRwYWdlci5maW5kKCdzcGFuLnRhcmdldCcpO1xuICAgICAgICBpZiAoJHBhZ2VyVGFyZ2V0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVBvc3RDb2xsZWN0aW9uKHRocmVhZCwgcG9zdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGxhc3QgcGFnZSBudW1iZXIgZnJvbSBzZWNvbmQgdG8gbGFzdCBwYWdlIGxpbmtcbiAgICAgICAgY29uc3QgbGFzdFBhZ2VUZXh0ID0gJHBhZ2VyVGFyZ2V0c1xuICAgICAgICAgIC5lcSgkcGFnZXJUYXJnZXRzLmxlbmd0aCAtIDIpXG4gICAgICAgICAgLnRleHQoKVxuICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTnVtYmVyLnBhcnNlSW50KGxhc3RQYWdlVGV4dCwgMTApO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGxhc3RQYWdlKSB8fCBsYXN0UGFnZSA8PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVBvc3RDb2xsZWN0aW9uKHRocmVhZCwgcG9zdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IHJlbWFpbmluZyBwYWdlc1xuICAgICAgICBjb25zdCBib2RpZXM6IHsgbW9kdWxlTmFtZTogc3RyaW5nOyBwYWdlTm86IHN0cmluZzsgdDogc3RyaW5nIH1bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBsYXN0UGFnZTsgcGFnZSsrKSB7XG4gICAgICAgICAgYm9kaWVzLnB1c2goe1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2ZvcnVtL0ZvcnVtVmlld1RocmVhZFBvc3RzTW9kdWxlJyxcbiAgICAgICAgICAgIHBhZ2VObzogU3RyaW5nKHBhZ2UpLFxuICAgICAgICAgICAgdDogU3RyaW5nKHRocmVhZC5pZCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUmVzdWx0cyA9IGF3YWl0IHRocmVhZC5zaXRlLmFtY1JlcXVlc3QoYm9kaWVzKTtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxSZXN1bHRzLmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyBhZGRpdGlvbmFsUmVzdWx0cy5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgYWRkaXRpb25hbFJlc3VsdHMudmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gU3RyaW5nKHJlc3BvbnNlPy5ib2R5ID8/ICcnKTtcbiAgICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGJvZHkpO1xuICAgICAgICAgIHBvc3RzLnB1c2goLi4uRm9ydW1Qb3N0Q29sbGVjdGlvbi5fcGFyc2UodGhyZWFkLCAkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEZvcnVtUG9zdENvbGxlY3Rpb24odGhyZWFkLCBwb3N0cyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBwb3N0czogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDaGVlcmlvIH0gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgKiBhcyBjaGVlcmlvIGZyb20gJ2NoZWVyaW8nO1xuaW1wb3J0IHR5cGUgeyBBbnlOb2RlIH0gZnJvbSAnZG9taGFuZGxlcic7XG5pbXBvcnQgeyBSZXF1aXJlTG9naW4gfSBmcm9tICcuLi8uLi9jb21tb24vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBOb0VsZW1lbnRFcnJvciwgVW5leHBlY3RlZEVycm9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VPZGF0ZSwgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHR5cGUgeyBTaXRlIH0gZnJvbSAnLi4vc2l0ZSc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciB9IGZyb20gJy4uL3VzZXInO1xuaW1wb3J0IHR5cGUgeyBGb3J1bUNhdGVnb3J5IH0gZnJvbSAnLi9mb3J1bS1jYXRlZ29yeSc7XG5pbXBvcnQgeyBGb3J1bVBvc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9mb3J1bS1wb3N0JztcblxuLyoqXG4gKiBGb3J1bSB0aHJlYWQgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcnVtVGhyZWFkRGF0YSB7XG4gIHNpdGU6IFNpdGU7XG4gIGlkOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRCeTogQWJzdHJhY3RVc2VyIHwgbnVsbDtcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICBwb3N0Q291bnQ6IG51bWJlcjtcbiAgY2F0ZWdvcnk/OiBGb3J1bUNhdGVnb3J5IHwgbnVsbDtcbn1cblxuLyoqXG4gKiBGb3J1bSB0aHJlYWRcbiAqL1xuZXhwb3J0IGNsYXNzIEZvcnVtVGhyZWFkIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQnk6IEFic3RyYWN0VXNlciB8IG51bGw7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ6IERhdGU7XG4gIHB1YmxpYyBwb3N0Q291bnQ6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGNhdGVnb3J5OiBGb3J1bUNhdGVnb3J5IHwgbnVsbDtcbiAgcHJpdmF0ZSBfcG9zdHM6IEZvcnVtUG9zdENvbGxlY3Rpb24gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBGb3J1bVRocmVhZERhdGEpIHtcbiAgICB0aGlzLnNpdGUgPSBkYXRhLnNpdGU7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy50aXRsZSA9IGRhdGEudGl0bGU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkYXRhLmNyZWF0ZWRCeTtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IGRhdGEuY3JlYXRlZEF0O1xuICAgIHRoaXMucG9zdENvdW50ID0gZGF0YS5wb3N0Q291bnQ7XG4gICAgdGhpcy5jYXRlZ29yeSA9IGRhdGEuY2F0ZWdvcnkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhyZWFkIFVSTFxuICAgKi9cbiAgZ2V0VXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2l0ZS5nZXRCYXNlVXJsKCl9L2ZvcnVtL3QtJHt0aGlzLmlkfS9gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwb3N0IGxpc3RcbiAgICovXG4gIGdldFBvc3RzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bVBvc3RDb2xsZWN0aW9uPiB7XG4gICAgaWYgKHRoaXMuX3Bvc3RzICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3Bvc3RzKSwgKGUpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoU3RyaW5nKGUpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEZvcnVtUG9zdENvbGxlY3Rpb24uYWNxdWlyZUFsbEluVGhyZWFkKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGx5IHRvIHRocmVhZFxuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICByZXBseShcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICB0aXRsZSA9ICcnLFxuICAgIHBhcmVudFBvc3RJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPEZvcnVtVGhyZWFkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocmVhZElkOiBTdHJpbmcodGhpcy5pZCksXG4gICAgICAgICAgICBwYXJlbnRJZDogcGFyZW50UG9zdElkICE9PSBudWxsID8gU3RyaW5nKHBhcmVudFBvc3RJZCkgOiAnJyxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgYWN0aW9uOiAnRm9ydW1BY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdzYXZlUG9zdCcsXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcG9zdHMgPSBudWxsO1xuICAgICAgICB0aGlzLnBvc3RDb3VudCArPSAxO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byByZXBseTogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBGb3J1bVRocmVhZChpZD0ke3RoaXMuaWR9LCB0aXRsZT0ke3RoaXMudGl0bGV9KWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRocmVhZCBieSBJRFxuICAgKi9cbiAgc3RhdGljIGdldEZyb21JZChcbiAgICBzaXRlOiBTaXRlLFxuICAgIHRocmVhZElkOiBudW1iZXIsXG4gICAgY2F0ZWdvcnk6IEZvcnVtQ2F0ZWdvcnkgfCBudWxsID0gbnVsbFxuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBGb3J1bVRocmVhZENvbGxlY3Rpb24uYWNxdWlyZUZyb21UaHJlYWRJZHMoc2l0ZSwgW3RocmVhZElkXSwgY2F0ZWdvcnkpO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGhyZWFkID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXRocmVhZCkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcihgVGhyZWFkIG5vdCBmb3VuZDogJHt0aHJlYWRJZH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyZWFkO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCB0aHJlYWQ6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRm9ydW0gdGhyZWFkIGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEZvcnVtVGhyZWFkQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PEZvcnVtVGhyZWFkPiB7XG4gIHB1YmxpYyByZWFkb25seSBzaXRlOiBTaXRlO1xuXG4gIGNvbnN0cnVjdG9yKHNpdGU6IFNpdGUsIHRocmVhZHM/OiBGb3J1bVRocmVhZFtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNpdGUgPSBzaXRlO1xuICAgIGlmICh0aHJlYWRzKSB7XG4gICAgICB0aGlzLnB1c2goLi4udGhyZWFkcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgSURcbiAgICovXG4gIGZpbmRCeUlkKGlkOiBudW1iZXIpOiBGb3J1bVRocmVhZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgodGhyZWFkKSA9PiB0aHJlYWQuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRocmVhZHMgaW4gY2F0ZWdvcnlcbiAgICovXG4gIHN0YXRpYyBhY3F1aXJlQWxsSW5DYXRlZ29yeShjYXRlZ29yeTogRm9ydW1DYXRlZ29yeSk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bVRocmVhZENvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0aHJlYWRzOiBGb3J1bVRocmVhZFtdID0gW107XG5cbiAgICAgICAgY29uc3QgZmlyc3RSZXN1bHQgPSBhd2FpdCBjYXRlZ29yeS5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHA6IDEsXG4gICAgICAgICAgICBjOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdmb3J1bS9Gb3J1bVZpZXdDYXRlZ29yeU1vZHVsZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKGZpcnN0UmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyBmaXJzdFJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0UmVzcG9uc2UgPSBmaXJzdFJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFmaXJzdFJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RCb2R5ID0gU3RyaW5nKGZpcnN0UmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgIGNvbnN0ICRmaXJzdCA9IGNoZWVyaW8ubG9hZChmaXJzdEJvZHkpO1xuXG4gICAgICAgICRmaXJzdCgndGFibGUudGFibGUgdHIuaGVhZH50cicpLmVhY2goKF9pLCBlbGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgJHJvdyA9ICRmaXJzdChlbGVtKTtcbiAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSAkcm93LmZpbmQoJ2Rpdi50aXRsZSBhJyk7XG4gICAgICAgICAgY29uc3QgaHJlZiA9IHRpdGxlRWxlbS5hdHRyKCdocmVmJykgPz8gJyc7XG4gICAgICAgICAgY29uc3QgdGhyZWFkSWRNYXRjaCA9IGhyZWYubWF0Y2goL3QtKFxcZCspLyk7XG4gICAgICAgICAgaWYgKCF0aHJlYWRJZE1hdGNoPy5bMV0pIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IHRocmVhZElkID0gTnVtYmVyLnBhcnNlSW50KHRocmVhZElkTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IHRpdGxlRWxlbS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gJHJvdy5maW5kKCdkaXYuZGVzY3JpcHRpb24nKS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHBvc3RDb3VudCA9IE51bWJlci5wYXJzZUludCgkcm93LmZpbmQoJ3RkLnBvc3RzJykudGV4dCgpLnRyaW0oKSwgMTApIHx8IDA7XG5cbiAgICAgICAgICAvLyBQYXJzZSB1c2VyIGFuZCB0aW1lc3RhbXBcbiAgICAgICAgICBjb25zdCAkdXNlckVsZW0gPSAkcm93LmZpbmQoJ3RkLnN0YXJ0ZWQgc3Bhbi5wcmludHVzZXInKTtcbiAgICAgICAgICBjb25zdCAkb2RhdGVFbGVtID0gJHJvdy5maW5kKCd0ZC5zdGFydGVkIHNwYW4ub2RhdGUnKTtcblxuICAgICAgICAgIGNvbnN0IGNyZWF0ZWRCeSA9XG4gICAgICAgICAgICAkdXNlckVsZW0ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IHBhcnNlVXNlcihjYXRlZ29yeS5zaXRlLmNsaWVudCwgJHVzZXJFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBjb25zdCBjcmVhdGVkQXQgPVxuICAgICAgICAgICAgJG9kYXRlRWxlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gKHBhcnNlT2RhdGUoJG9kYXRlRWxlbSBhcyBDaGVlcmlvPEFueU5vZGU+KSA/PyBuZXcgRGF0ZSgpKVxuICAgICAgICAgICAgICA6IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgICB0aHJlYWRzLnB1c2goXG4gICAgICAgICAgICBuZXcgRm9ydW1UaHJlYWQoe1xuICAgICAgICAgICAgICBzaXRlOiBjYXRlZ29yeS5zaXRlLFxuICAgICAgICAgICAgICBpZDogdGhyZWFkSWQsXG4gICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgY3JlYXRlZEJ5LFxuICAgICAgICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgICAgICAgIHBvc3RDb3VudCxcbiAgICAgICAgICAgICAgY2F0ZWdvcnksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIHBhZ2luYXRpb25cbiAgICAgICAgY29uc3QgcGFnZXIgPSAkZmlyc3QoJ2Rpdi5wYWdlcicpO1xuICAgICAgICBpZiAocGFnZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVRocmVhZENvbGxlY3Rpb24oY2F0ZWdvcnkuc2l0ZSwgdGhyZWFkcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYWdlckxpbmtzID0gcGFnZXIuZmluZCgnYScpO1xuICAgICAgICBpZiAocGFnZXJMaW5rcy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVRocmVhZENvbGxlY3Rpb24oY2F0ZWdvcnkuc2l0ZSwgdGhyZWFkcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UGFnZUxpbmsgPSBwYWdlckxpbmtzW3BhZ2VyTGlua3MubGVuZ3RoIC0gMl07XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlVGV4dCA9IGxhc3RQYWdlTGluayA/ICRmaXJzdChsYXN0UGFnZUxpbmspLnRleHQoKS50cmltKCkgOiAnMSc7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTnVtYmVyLnBhcnNlSW50KGxhc3RQYWdlVGV4dCwgMTApIHx8IDE7XG5cbiAgICAgICAgaWYgKGxhc3RQYWdlIDw9IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEZvcnVtVGhyZWFkQ29sbGVjdGlvbihjYXRlZ29yeS5zaXRlLCB0aHJlYWRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZldGNoIHJlbWFpbmluZyBwYWdlc1xuICAgICAgICBjb25zdCBib2RpZXM6IHsgcDogbnVtYmVyOyBjOiBudW1iZXI7IG1vZHVsZU5hbWU6IHN0cmluZyB9W10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gbGFzdFBhZ2U7IHBhZ2UrKykge1xuICAgICAgICAgIGJvZGllcy5wdXNoKHtcbiAgICAgICAgICAgIHA6IHBhZ2UsXG4gICAgICAgICAgICBjOiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdmb3J1bS9Gb3J1bVZpZXdDYXRlZ29yeU1vZHVsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUmVzdWx0cyA9IGF3YWl0IGNhdGVnb3J5LnNpdGUuYW1jUmVxdWVzdChib2RpZXMpO1xuICAgICAgICBpZiAoYWRkaXRpb25hbFJlc3VsdHMuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGFkZGl0aW9uYWxSZXN1bHRzLmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZXNwb25zZSBvZiBhZGRpdGlvbmFsUmVzdWx0cy52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2U/LmJvZHkgPz8gJycpO1xuICAgICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoYm9keSk7XG5cbiAgICAgICAgICAkKCd0YWJsZS50YWJsZSB0ci5oZWFkfnRyJykuZWFjaCgoX2ksIGVsZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRyb3cgPSAkKGVsZW0pO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gJHJvdy5maW5kKCdkaXYudGl0bGUgYScpO1xuICAgICAgICAgICAgY29uc3QgaHJlZiA9IHRpdGxlRWxlbS5hdHRyKCdocmVmJykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCB0aHJlYWRJZE1hdGNoID0gaHJlZi5tYXRjaCgvdC0oXFxkKykvKTtcbiAgICAgICAgICAgIGlmICghdGhyZWFkSWRNYXRjaD8uWzFdKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHRocmVhZElkID0gTnVtYmVyLnBhcnNlSW50KHRocmVhZElkTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGl0bGVFbGVtLnRleHQoKS50cmltKCk7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9ICRyb3cuZmluZCgnZGl2LmRlc2NyaXB0aW9uJykudGV4dCgpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IHBvc3RDb3VudCA9IE51bWJlci5wYXJzZUludCgkcm93LmZpbmQoJ3RkLnBvc3RzJykudGV4dCgpLnRyaW0oKSwgMTApIHx8IDA7XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHVzZXIgYW5kIHRpbWVzdGFtcFxuICAgICAgICAgICAgY29uc3QgJHVzZXJFbGVtID0gJHJvdy5maW5kKCd0ZC5zdGFydGVkIHNwYW4ucHJpbnR1c2VyJyk7XG4gICAgICAgICAgICBjb25zdCAkb2RhdGVFbGVtID0gJHJvdy5maW5kKCd0ZC5zdGFydGVkIHNwYW4ub2RhdGUnKTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEJ5ID1cbiAgICAgICAgICAgICAgJHVzZXJFbGVtLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHBhcnNlVXNlcihjYXRlZ29yeS5zaXRlLmNsaWVudCwgJHVzZXJFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0ID1cbiAgICAgICAgICAgICAgJG9kYXRlRWxlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyAocGFyc2VPZGF0ZSgkb2RhdGVFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pID8/IG5ldyBEYXRlKCkpXG4gICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSgpO1xuXG4gICAgICAgICAgICB0aHJlYWRzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBGb3J1bVRocmVhZCh7XG4gICAgICAgICAgICAgICAgc2l0ZTogY2F0ZWdvcnkuc2l0ZSxcbiAgICAgICAgICAgICAgICBpZDogdGhyZWFkSWQsXG4gICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgY3JlYXRlZEJ5LFxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdCxcbiAgICAgICAgICAgICAgICBwb3N0Q291bnQsXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3J1bVRocmVhZENvbGxlY3Rpb24oY2F0ZWdvcnkuc2l0ZSwgdGhyZWFkcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSB0aHJlYWRzOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgdGhyZWFkIGJ5IHRocmVhZCBJRFxuICAgKiBAcGFyYW0gc2l0ZSAtIFNpdGUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHRocmVhZElkIC0gVGhyZWFkIElEXG4gICAqL1xuICBzdGF0aWMgZnJvbUlkKHNpdGU6IFNpdGUsIHRocmVhZElkOiBudW1iZXIpOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBGb3J1bVRocmVhZENvbGxlY3Rpb24uYWNxdWlyZUZyb21UaHJlYWRJZHMoc2l0ZSwgW3RocmVhZElkXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0aHJlYWQgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghdGhyZWFkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKGBUaHJlYWQgbm90IGZvdW5kOiAke3RocmVhZElkfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJlYWQ7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IHRocmVhZDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRocmVhZHMgYnkgdGhyZWFkIElEc1xuICAgKi9cbiAgc3RhdGljIGFjcXVpcmVGcm9tVGhyZWFkSWRzKFxuICAgIHNpdGU6IFNpdGUsXG4gICAgdGhyZWFkSWRzOiBudW1iZXJbXSxcbiAgICBjYXRlZ29yeTogRm9ydW1DYXRlZ29yeSB8IG51bGwgPSBudWxsXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bVRocmVhZENvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzaXRlLmFtY1JlcXVlc3QoXG4gICAgICAgICAgdGhyZWFkSWRzLm1hcCgodGhyZWFkSWQpID0+ICh7XG4gICAgICAgICAgICB0OiB0aHJlYWRJZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdmb3J1bS9Gb3J1bVZpZXdUaHJlYWRNb2R1bGUnLFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRocmVhZHM6IEZvcnVtVGhyZWFkW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocmVhZElkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlW2ldO1xuICAgICAgICAgIGNvbnN0IHRocmVhZElkID0gdGhyZWFkSWRzW2ldO1xuICAgICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXRocmVhZElkKSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChib2R5KTtcblxuICAgICAgICAgIC8vIFBhcnNlIHRocmVhZCBpbmZvIGZyb20gcGFnZVxuICAgICAgICAgIGNvbnN0IGJjRWxlbSA9ICQoJ2Rpdi5mb3J1bS1icmVhZGNydW1icycpO1xuICAgICAgICAgIGlmIChiY0VsZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0JyZWFkY3J1bWJzIG5vdCBmb3VuZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBiY1BhcnRzID0gYmNFbGVtLnRleHQoKS5zcGxpdCgnwrsnKTtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IGJjUGFydHMubGVuZ3RoID4gMCA/IChiY1BhcnRzW2JjUGFydHMubGVuZ3RoIC0gMV0/LnRyaW0oKSA/PyAnJykgOiAnJztcblxuICAgICAgICAgIGNvbnN0IGRlc2NCbG9ja0VsZW0gPSAkKCdkaXYuZGVzY3JpcHRpb24tYmxvY2snKTtcbiAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGRlc2NCbG9ja0VsZW0udGV4dCgpLnRyaW0oKTtcblxuICAgICAgICAgIGNvbnN0IHBvc3RDb3VudE1hdGNoID0gJCgnZGl2LnN0YXRpc3RpY3MnKS50ZXh0KCkubWF0Y2goLyhcXGQrKS8pO1xuICAgICAgICAgIGNvbnN0IHBvc3RDb3VudCA9IHBvc3RDb3VudE1hdGNoPy5bMV0gPyBOdW1iZXIucGFyc2VJbnQocG9zdENvdW50TWF0Y2hbMV0sIDEwKSA6IDA7XG5cbiAgICAgICAgICB0aHJlYWRzLnB1c2goXG4gICAgICAgICAgICBuZXcgRm9ydW1UaHJlYWQoe1xuICAgICAgICAgICAgICBzaXRlLFxuICAgICAgICAgICAgICBpZDogdGhyZWFkSWQsXG4gICAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgY3JlYXRlZEJ5OiBudWxsLFxuICAgICAgICAgICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIHBvc3RDb3VudCxcbiAgICAgICAgICAgICAgY2F0ZWdvcnksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEZvcnVtVGhyZWFkQ29sbGVjdGlvbihzaXRlLCB0aHJlYWRzKTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHJldHVybiBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBhY3F1aXJlIHRocmVhZHM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgeyBSZXF1aXJlTG9naW4gfSBmcm9tICcuLi8uLi9jb21tb24vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBMb2dpblJlcXVpcmVkRXJyb3IsIE5vRWxlbWVudEVycm9yLCBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcbmltcG9ydCB7IEZvcnVtVGhyZWFkLCBGb3J1bVRocmVhZENvbGxlY3Rpb24gfSBmcm9tICcuL2ZvcnVtLXRocmVhZCc7XG5cbi8qKlxuICogRm9ydW0gY2F0ZWdvcnkgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcnVtQ2F0ZWdvcnlEYXRhIHtcbiAgc2l0ZTogU2l0ZTtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGhyZWFkc0NvdW50OiBudW1iZXI7XG4gIHBvc3RzQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGb3J1bSBjYXRlZ29yeVxuICovXG5leHBvcnQgY2xhc3MgRm9ydW1DYXRlZ29yeSB7XG4gIHB1YmxpYyByZWFkb25seSBzaXRlOiBTaXRlO1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdGhyZWFkc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBwb3N0c0NvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgX3RocmVhZHM6IEZvcnVtVGhyZWFkQ29sbGVjdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IEZvcnVtQ2F0ZWdvcnlEYXRhKSB7XG4gICAgdGhpcy5zaXRlID0gZGF0YS5zaXRlO1xuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgIHRoaXMudGl0bGUgPSBkYXRhLnRpdGxlO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkYXRhLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMudGhyZWFkc0NvdW50ID0gZGF0YS50aHJlYWRzQ291bnQ7XG4gICAgdGhpcy5wb3N0c0NvdW50ID0gZGF0YS5wb3N0c0NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aHJlYWQgbGlzdFxuICAgKi9cbiAgZ2V0VGhyZWFkcygpOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWRDb2xsZWN0aW9uPiB7XG4gICAgaWYgKHRoaXMuX3RocmVhZHMgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShQcm9taXNlLnJlc29sdmUodGhpcy5fdGhyZWFkcyksIChlKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKFN0cmluZyhlKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEZvcnVtVGhyZWFkQ29sbGVjdGlvbi5hY3F1aXJlQWxsSW5DYXRlZ29yeSh0aGlzKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RocmVhZHMgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLl90aHJlYWRzO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCB0aHJlYWRzOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbG9hZCB0aHJlYWQgbGlzdFxuICAgKi9cbiAgcmVsb2FkVGhyZWFkcygpOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWRDb2xsZWN0aW9uPiB7XG4gICAgdGhpcy5fdGhyZWFkcyA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGhyZWFkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aHJlYWRcbiAgICovXG4gIEBSZXF1aXJlTG9naW5cbiAgY3JlYXRlVGhyZWFkKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBzb3VyY2U6IHN0cmluZ1xuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgICAgIGFjdGlvbjogJ0ZvcnVtQWN0aW9uJyxcbiAgICAgICAgICAgIGV2ZW50OiAnbmV3VGhyZWFkJyxcbiAgICAgICAgICAgIGNhdGVnb3J5X2lkOiB0aGlzLmlkLFxuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCB0eXBlb2YgcmVzcG9uc2UudGhyZWFkSWQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdUaHJlYWQgSUQgbm90IGZvdW5kIGluIHJlc3BvbnNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aHJlYWRJZCA9IHJlc3BvbnNlLnRocmVhZElkIGFzIG51bWJlcjtcbiAgICAgICAgY29uc3QgdGhyZWFkUmVzdWx0ID0gYXdhaXQgRm9ydW1UaHJlYWQuZ2V0RnJvbUlkKHRoaXMuc2l0ZSwgdGhyZWFkSWQsIHRoaXMpO1xuICAgICAgICBpZiAodGhyZWFkUmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aHJlYWRSZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRocmVhZFJlc3VsdC52YWx1ZTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBGb3J1bUNhdGVnb3J5KGlkPSR7dGhpcy5pZH0sIHRpdGxlPSR7dGhpcy50aXRsZX0pYDtcbiAgfVxufVxuXG4vKipcbiAqIEZvcnVtIGNhdGVnb3J5IGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIEZvcnVtQ2F0ZWdvcnlDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8Rm9ydW1DYXRlZ29yeT4ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcblxuICBjb25zdHJ1Y3RvcihzaXRlOiBTaXRlLCBjYXRlZ29yaWVzPzogRm9ydW1DYXRlZ29yeVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNpdGUgPSBzaXRlO1xuICAgIGlmIChjYXRlZ29yaWVzKSB7XG4gICAgICB0aGlzLnB1c2goLi4uY2F0ZWdvcmllcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgSURcbiAgICovXG4gIGZpbmRCeUlkKGlkOiBudW1iZXIpOiBGb3J1bUNhdGVnb3J5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5maW5kKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGNhdGVnb3JpZXMgZm9yIGEgc2l0ZVxuICAgKi9cbiAgc3RhdGljIGFjcXVpcmVBbGwoc2l0ZTogU2l0ZSk6IFdpa2lkb3RSZXN1bHRBc3luYzxGb3J1bUNhdGVnb3J5Q29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2ZvcnVtL0ZvcnVtU3RhcnRNb2R1bGUnLFxuICAgICAgICAgICAgaGlkZGVuOiAndHJ1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0VtcHR5IHJlc3BvbnNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib2R5ID0gU3RyaW5nKHJlc3BvbnNlLmJvZHkgPz8gJycpO1xuICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGJvZHkpO1xuXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXM6IEZvcnVtQ2F0ZWdvcnlbXSA9IFtdO1xuXG4gICAgICAgICQoJ3RhYmxlIHRyLmhlYWR+dHInKS5lYWNoKChfaSwgcm93KSA9PiB7XG4gICAgICAgICAgY29uc3QgJHJvdyA9ICQocm93KTtcbiAgICAgICAgICBjb25zdCBuYW1lRWxlbSA9ICRyb3cuZmluZCgndGQubmFtZScpO1xuICAgICAgICAgIGNvbnN0IG5hbWVMaW5rRWxlbSA9IG5hbWVFbGVtLmZpbmQoJ2EnKTtcbiAgICAgICAgICBjb25zdCBocmVmID0gbmFtZUxpbmtFbGVtLmF0dHIoJ2hyZWYnKSA/PyAnJztcblxuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWRNYXRjaCA9IGhyZWYubWF0Y2goL2MtKFxcZCspLyk7XG4gICAgICAgICAgaWYgKCFjYXRlZ29yeUlkTWF0Y2g/LlsxXSkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IE51bWJlci5wYXJzZUludChjYXRlZ29yeUlkTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IG5hbWVMaW5rRWxlbS50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gbmFtZUVsZW0uZmluZCgnZGl2LmRlc2NyaXB0aW9uJykudGV4dCgpLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCB0aHJlYWRzQ291bnQgPSBOdW1iZXIucGFyc2VJbnQoJHJvdy5maW5kKCd0ZC50aHJlYWRzJykudGV4dCgpLnRyaW0oKSwgMTApIHx8IDA7XG4gICAgICAgICAgY29uc3QgcG9zdHNDb3VudCA9IE51bWJlci5wYXJzZUludCgkcm93LmZpbmQoJ3RkLnBvc3RzJykudGV4dCgpLnRyaW0oKSwgMTApIHx8IDA7XG5cbiAgICAgICAgICBjYXRlZ29yaWVzLnB1c2goXG4gICAgICAgICAgICBuZXcgRm9ydW1DYXRlZ29yeSh7XG4gICAgICAgICAgICAgIHNpdGUsXG4gICAgICAgICAgICAgIGlkOiBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIHRocmVhZHNDb3VudCxcbiAgICAgICAgICAgICAgcG9zdHNDb3VudCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3J1bUNhdGVnb3J5Q29sbGVjdGlvbihzaXRlLCBjYXRlZ29yaWVzKTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHJldHVybiBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBhY3F1aXJlIGNhdGVnb3JpZXM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLAogICAgImV4cG9ydCB7IEZvcnVtQ2F0ZWdvcnksIEZvcnVtQ2F0ZWdvcnlDb2xsZWN0aW9uLCB0eXBlIEZvcnVtQ2F0ZWdvcnlEYXRhIH0gZnJvbSAnLi9mb3J1bS1jYXRlZ29yeSc7XG5leHBvcnQgeyBGb3J1bVBvc3QsIEZvcnVtUG9zdENvbGxlY3Rpb24sIHR5cGUgRm9ydW1Qb3N0RGF0YSB9IGZyb20gJy4vZm9ydW0tcG9zdCc7XG5leHBvcnQgeyBGb3J1bVRocmVhZCwgRm9ydW1UaHJlYWRDb2xsZWN0aW9uLCB0eXBlIEZvcnVtVGhyZWFkRGF0YSB9IGZyb20gJy4vZm9ydW0tdGhyZWFkJztcbiIsCiAgICAiLy8gQ29tbW9uXG5leHBvcnQgKiBmcm9tICcuL2NvbW1vbi9lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tb24vbG9nZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uL3R5cGVzJztcblxuLy8gQ29ubmVjdG9yXG5leHBvcnQgKiBmcm9tICcuL2Nvbm5lY3Rvcic7XG5cbi8vIE1vZHVsZVxuZXhwb3J0ICogZnJvbSAnLi9tb2R1bGUnO1xuXG4vLyBVdGlsXG5leHBvcnQgKiBmcm9tICcuL3V0aWwnO1xuIiwKICAgICJpbXBvcnQga3ksIHsgdHlwZSBLeUluc3RhbmNlIH0gZnJvbSAna3knO1xuaW1wb3J0IHBMaW1pdCwgeyB0eXBlIExpbWl0RnVuY3Rpb24gfSBmcm9tICdwLWxpbWl0JztcbmltcG9ydCB7XG4gIEFNQ0h0dHBFcnJvcixcbiAgRm9yYmlkZGVuRXJyb3IsXG4gIE5vdEZvdW5kRXhjZXB0aW9uLFxuICBSZXNwb25zZURhdGFFcnJvcixcbiAgVW5leHBlY3RlZEVycm9yLFxuICBXaWtpZG90RXJyb3IsXG4gIFdpa2lkb3RTdGF0dXNFcnJvcixcbn0gZnJvbSAnLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMsIHdkRXJyQXN5bmMsIHdkT2tBc3luYyB9IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQge1xuICB0eXBlIEFNQ0NvbmZpZyxcbiAgREVGQVVMVF9BTUNfQ09ORklHLFxuICBERUZBVUxUX0hUVFBfU1RBVFVTX0NPREUsXG4gIFdJS0lET1RfVE9LRU43LFxufSBmcm9tICcuL2FtYy1jb25maWcnO1xuaW1wb3J0IHsgQU1DSGVhZGVyIH0gZnJvbSAnLi9hbWMtaGVhZGVyJztcbmltcG9ydCB7IHR5cGUgQU1DUmVxdWVzdEJvZHksIHR5cGUgQU1DUmVzcG9uc2UsIGFtY1Jlc3BvbnNlU2NoZW1hIH0gZnJvbSAnLi9hbWMtdHlwZXMnO1xuXG4vKipcbiAqIE1hc2sgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIChmb3IgbG9nZ2luZylcbiAqIEBwYXJhbSBib2R5IC0gUmVxdWVzdCBib2R5IHRvIG1hc2tcbiAqIEByZXR1cm5zIE1hc2tlZCBib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXNrU2Vuc2l0aXZlRGF0YShib2R5OiBBTUNSZXF1ZXN0Qm9keSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgbWFza2VkID0geyAuLi5ib2R5IH07XG4gIGNvbnN0IHNlbnNpdGl2ZUtleXMgPSBbJ3Bhc3N3b3JkJywgJ2xvZ2luJywgJ1dJS0lET1RfU0VTU0lPTl9JRCcsICd3aWtpZG90X3Rva2VuNyddO1xuICBmb3IgKGNvbnN0IGtleSBvZiBzZW5zaXRpdmVLZXlzKSB7XG4gICAgaWYgKGtleSBpbiBtYXNrZWQpIHtcbiAgICAgIG1hc2tlZFtrZXldID0gJyoqKk1BU0tFRCoqKic7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXNrZWQ7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGV4cG9uZW50aWFsIGJhY2tvZmYgaW50ZXJ2YWwgKHdpdGggaml0dGVyKVxuICogQHBhcmFtIHJldHJ5Q291bnQgLSBDdXJyZW50IHJldHJ5IGNvdW50IChzdGFydHMgZnJvbSAxKVxuICogQHBhcmFtIGJhc2VJbnRlcnZhbCAtIEJhc2UgaW50ZXJ2YWwgKG1pbGxpc2Vjb25kcylcbiAqIEBwYXJhbSBiYWNrb2ZmRmFjdG9yIC0gQmFja29mZiBmYWN0b3JcbiAqIEBwYXJhbSBtYXhCYWNrb2ZmIC0gTWF4aW11bSBiYWNrb2ZmIGludGVydmFsIChtaWxsaXNlY29uZHMpXG4gKiBAcmV0dXJucyBDYWxjdWxhdGVkIGJhY2tvZmYgaW50ZXJ2YWwgKG1pbGxpc2Vjb25kcylcbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlQmFja29mZihcbiAgcmV0cnlDb3VudDogbnVtYmVyLFxuICBiYXNlSW50ZXJ2YWw6IG51bWJlcixcbiAgYmFja29mZkZhY3RvcjogbnVtYmVyLFxuICBtYXhCYWNrb2ZmOiBudW1iZXJcbik6IG51bWJlciB7XG4gIGNvbnN0IGJhY2tvZmYgPSBiYXNlSW50ZXJ2YWwgKiBiYWNrb2ZmRmFjdG9yICoqIChyZXRyeUNvdW50IC0gMSk7XG4gIGNvbnN0IGppdHRlciA9IE1hdGgucmFuZG9tKCkgKiBiYWNrb2ZmICogMC4xO1xuICByZXR1cm4gTWF0aC5taW4oYmFja29mZiArIGppdHRlciwgbWF4QmFja29mZik7XG59XG5cbi8qKlxuICogU2xlZXAgZm9yIHNwZWNpZmllZCBkdXJhdGlvblxuICogQHBhcmFtIG1zIC0gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gKi9cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICogQU1DIHJlcXVlc3Qgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFNQ1JlcXVlc3RPcHRpb25zIHtcbiAgLyoqIFNpdGUgbmFtZSAoZGVmYXVsdDogd3d3KSAqL1xuICBzaXRlTmFtZT86IHN0cmluZztcbiAgLyoqIFNTTCBzdXBwb3J0IChhdXRvLWRldGVjdGVkIGlmIG9taXR0ZWQpICovXG4gIHNzbFN1cHBvcnRlZD86IGJvb2xlYW47XG4gIC8qKiBJbmNsdWRlIGVycm9ycyBpbiByZXN1bHRzIGluc3RlYWQgb2YgdGhyb3dpbmcgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICByZXR1cm5FeGNlcHRpb25zPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBamF4IE1vZHVsZSBDb25uZWN0b3IgY2xpZW50XG4gKiBNYW5hZ2VzIHJlcXVlc3RzIHRvIFdpa2lkb3QgQU1DIGVuZHBvaW50XG4gKi9cbmV4cG9ydCBjbGFzcyBBTUNDbGllbnQge1xuICAvKioga3kgaW5zdGFuY2UgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBreTogS3lJbnN0YW5jZTtcblxuICAvKiogQ29uY3VycmVudCByZXF1ZXN0IGxpbWl0ZXIgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsaW1pdDogTGltaXRGdW5jdGlvbjtcblxuICAvKiogSGVhZGVyIG1hbmFnZXIgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhlYWRlcjogQU1DSGVhZGVyO1xuXG4gIC8qKiBDb25maWd1cmF0aW9uICovXG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IEFNQ0NvbmZpZztcblxuICAvKiogQmFzZSBkb21haW4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbjogc3RyaW5nO1xuXG4gIC8qKiBTU0wgc3VwcG9ydCBzdGF0dXMgY2FjaGUgKi9cbiAgcHJpdmF0ZSBzc2xDYWNoZTogTWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjb25maWcgLSBBTUMgY29uZmlndXJhdGlvbiAodXNlcyBkZWZhdWx0cyBpZiBvbWl0dGVkKVxuICAgKiBAcGFyYW0gZG9tYWluIC0gQmFzZSBkb21haW4gKGRlZmF1bHQ6IHdpa2lkb3QuY29tKVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQYXJ0aWFsPEFNQ0NvbmZpZz4gPSB7fSwgZG9tYWluID0gJ3dpa2lkb3QuY29tJykge1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5ERUZBVUxUX0FNQ19DT05GSUcsIC4uLmNvbmZpZyB9O1xuICAgIHRoaXMuZG9tYWluID0gZG9tYWluO1xuICAgIHRoaXMuaGVhZGVyID0gbmV3IEFNQ0hlYWRlcigpO1xuICAgIHRoaXMubGltaXQgPSBwTGltaXQodGhpcy5jb25maWcuc2VtYXBob3JlTGltaXQpO1xuXG4gICAgdGhpcy5reSA9IGt5LmNyZWF0ZSh7XG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZy50aW1lb3V0LFxuICAgICAgcmV0cnk6IDAsIC8vIE1hbnVhbCByZXRyeSBjb250cm9sXG4gICAgfSk7XG5cbiAgICAvLyB3d3cgYWx3YXlzIHN1cHBvcnRzIFNTTFxuICAgIHRoaXMuc3NsQ2FjaGUuc2V0KCd3d3cnLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBzaXRlIGV4aXN0ZW5jZSBhbmQgU1NMIHN1cHBvcnQgc3RhdHVzXG4gICAqIEBwYXJhbSBzaXRlTmFtZSAtIFNpdGUgbmFtZVxuICAgKiBAcmV0dXJucyBTU0wgc3VwcG9ydCBzdGF0dXMgKHRydWU6IEhUVFBTLCBmYWxzZTogSFRUUClcbiAgICovXG4gIGNoZWNrU2l0ZVNTTChzaXRlTmFtZTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPGJvb2xlYW4+IHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIHZhbHVlIGlmIGV4aXN0c1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc3NsQ2FjaGUuZ2V0KHNpdGVOYW1lKTtcbiAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB3ZE9rQXN5bmMoY2FjaGVkKTtcbiAgICB9XG5cbiAgICAvLyB3d3cgYWx3YXlzIHN1cHBvcnRzIFNTTFxuICAgIGlmIChzaXRlTmFtZSA9PT0gJ3d3dycpIHtcbiAgICAgIHJldHVybiB3ZE9rQXN5bmModHJ1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cDovLyR7c2l0ZU5hbWV9LiR7dGhpcy5kb21haW59YCwge1xuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgcmVkaXJlY3Q6ICdtYW51YWwnLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyA0MDQgbWVhbnMgc2l0ZSBkb2VzIG5vdCBleGlzdFxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oYFNpdGUgaXMgbm90IGZvdW5kOiAke3NpdGVOYW1lfS4ke3RoaXMuZG9tYWlufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU1NMIHN1cHBvcnRlZCBpZiAzMDEgcmVkaXJlY3QgdG8gaHR0cHNcbiAgICAgICAgY29uc3QgaXNTU0wgPVxuICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMzAxICYmIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpPy5zdGFydHNXaXRoKCdodHRwcycpID09PSB0cnVlO1xuXG4gICAgICAgIC8vIFNhdmUgdG8gY2FjaGVcbiAgICAgICAgdGhpcy5zc2xDYWNoZS5zZXQoc2l0ZU5hbWUsIGlzU1NMKTtcbiAgICAgICAgcmV0dXJuIGlzU1NMO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXaWtpZG90RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBjaGVjayBTU0wgZm9yICR7c2l0ZU5hbWV9OiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIEFNQyByZXF1ZXN0XG4gICAqIEBwYXJhbSBib2RpZXMgLSBSZXF1ZXN0IGJvZHkgYXJyYXlcbiAgICogQHBhcmFtIHNpdGVOYW1lIC0gU2l0ZSBuYW1lIChkZWZhdWx0OiB3d3cpXG4gICAqIEBwYXJhbSBzc2xTdXBwb3J0ZWQgLSBTU0wgc3VwcG9ydCAoYXV0by1kZXRlY3RlZCBpZiBvbWl0dGVkKVxuICAgKiBAcmV0dXJucyBSZXNwb25zZSBhcnJheVxuICAgKi9cbiAgcmVxdWVzdChcbiAgICBib2RpZXM6IEFNQ1JlcXVlc3RCb2R5W10sXG4gICAgc2l0ZU5hbWUgPSAnd3d3JyxcbiAgICBzc2xTdXBwb3J0ZWQ/OiBib29sZWFuXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxBTUNSZXNwb25zZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFdpdGhPcHRpb25zKGJvZGllcywge1xuICAgICAgc2l0ZU5hbWUsXG4gICAgICBzc2xTdXBwb3J0ZWQsXG4gICAgICByZXR1cm5FeGNlcHRpb25zOiBmYWxzZSxcbiAgICB9KSBhcyBXaWtpZG90UmVzdWx0QXN5bmM8QU1DUmVzcG9uc2VbXT47XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBBTUMgcmVxdWVzdCAod2l0aCBvcHRpb25zKVxuICAgKiBAcGFyYW0gYm9kaWVzIC0gUmVxdWVzdCBib2R5IGFycmF5XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFJlc3BvbnNlIGFycmF5IChpbmNsdWRlcyBlcnJvcnMgaWYgcmV0dXJuRXhjZXB0aW9ucyBpcyB0cnVlKVxuICAgKi9cbiAgcmVxdWVzdFdpdGhPcHRpb25zKFxuICAgIGJvZGllczogQU1DUmVxdWVzdEJvZHlbXSxcbiAgICBvcHRpb25zOiBBTUNSZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzwoQU1DUmVzcG9uc2UgfCBXaWtpZG90RXJyb3IpW10+IHtcbiAgICBjb25zdCB7IHNpdGVOYW1lID0gJ3d3dycsIHNzbFN1cHBvcnRlZCwgcmV0dXJuRXhjZXB0aW9ucyA9IGZhbHNlIH0gPSBvcHRpb25zO1xuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gR2V0IFNTTCBzdXBwb3J0IHN0YXR1c1xuICAgICAgICBsZXQgc3NsID0gc3NsU3VwcG9ydGVkO1xuICAgICAgICBpZiAoc3NsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBzc2xSZXN1bHQgPSBhd2FpdCB0aGlzLmNoZWNrU2l0ZVNTTChzaXRlTmFtZSk7XG4gICAgICAgICAgaWYgKHNzbFJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgICB0aHJvdyBzc2xSZXN1bHQuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNzbCA9IHNzbFJlc3VsdC52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gc3NsID8gJ2h0dHBzJyA6ICdodHRwJztcbiAgICAgICAgY29uc3QgdXJsID0gYCR7cHJvdG9jb2x9Oi8vJHtzaXRlTmFtZX0uJHt0aGlzLmRvbWFpbn0vYWpheC1tb2R1bGUtY29ubmVjdG9yLnBocGA7XG5cbiAgICAgICAgLy8gRXhlY3V0ZSByZXF1ZXN0cyBpbiBwYXJhbGxlbFxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgYm9kaWVzLm1hcCgoYm9keSkgPT4gdGhpcy5saW1pdCgoKSA9PiB0aGlzLnNpbmdsZVJlcXVlc3QoYm9keSwgdXJsKSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJldHVybkV4Y2VwdGlvbnMpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gYWxsIHJlc3VsdHMgaW5jbHVkaW5nIGVycm9yc1xuICAgICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgaWYgKHIuaXNPaygpKSB7XG4gICAgICAgICAgICAgIHJldHVybiByLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHIuZXJyb3I7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaHJvdyBmaXJzdCBlcnJvciBpZiBhbnlcbiAgICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHJlc3VsdHMuZmluZCgocikgPT4gci5pc0VycigpKTtcbiAgICAgICAgaWYgKGZpcnN0RXJyb3I/LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyBmaXJzdEVycm9yLmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyKSA9PiB7XG4gICAgICAgICAgaWYgKHIuaXNPaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gci52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcignVW5leHBlY3RlZCBlcnJvciBpbiByZXN1bHQgcHJvY2Vzc2luZycpO1xuICAgICAgICB9KTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgV2lraWRvdEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBBTUMgcmVxdWVzdCBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBleGVjdXRlIGEgc2luZ2xlIHJlcXVlc3RcbiAgICogQHBhcmFtIGJvZHkgLSBSZXF1ZXN0IGJvZHlcbiAgICogQHBhcmFtIHVybCAtIFJlcXVlc3QgVVJMXG4gICAqIEByZXR1cm5zIFJlc3BvbnNlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNpbmdsZVJlcXVlc3QoXG4gICAgYm9keTogQU1DUmVxdWVzdEJvZHksXG4gICAgdXJsOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxXaWtpZG90UmVzdWx0QXN5bmM8QU1DUmVzcG9uc2U+PiB7XG4gICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEFkZCB3aWtpZG90X3Rva2VuN1xuICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHsgLi4uYm9keSwgd2lraWRvdF90b2tlbjc6IFdJS0lET1RfVE9LRU43IH07XG5cbiAgICAgICAgLy8gQ3JlYXRlIFVSTC1lbmNvZGVkIGJvZHlcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlcXVlc3RCb2R5KSkge1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMua3kucG9zdCh1cmwsIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlci5nZXRIZWFkZXJzKCksXG4gICAgICAgICAgYm9keTogZm9ybURhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUGFyc2UgYXMgSlNPTlxuICAgICAgICBsZXQgcmVzcG9uc2VEYXRhOiB1bmtub3duO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHdkRXJyQXN5bmMoXG4gICAgICAgICAgICBuZXcgUmVzcG9uc2VEYXRhRXJyb3IoYEFNQyByZXNwb25kZWQgd2l0aCBub24tSlNPTiBkYXRhOiAke2F3YWl0IHJlc3BvbnNlLnRleHQoKX1gKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSB3aXRoIHpvZFxuICAgICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IGFtY1Jlc3BvbnNlU2NoZW1hLnNhZmVQYXJzZShyZXNwb25zZURhdGEpO1xuICAgICAgICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gd2RFcnJBc3luYyhcbiAgICAgICAgICAgIG5ldyBSZXNwb25zZURhdGFFcnJvcihgSW52YWxpZCBBTUMgcmVzcG9uc2UgZm9ybWF0OiAke3BhcnNlUmVzdWx0LmVycm9yLm1lc3NhZ2V9YClcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYW1jUmVzcG9uc2UgPSBwYXJzZVJlc3VsdC5kYXRhO1xuXG4gICAgICAgIC8vIFJldHJ5IGlmIHRyeV9hZ2FpblxuICAgICAgICBpZiAoYW1jUmVzcG9uc2Uuc3RhdHVzID09PSAndHJ5X2FnYWluJykge1xuICAgICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgICBpZiAocmV0cnlDb3VudCA+PSB0aGlzLmNvbmZpZy5yZXRyeUxpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm4gd2RFcnJBc3luYyhuZXcgV2lraWRvdFN0YXR1c0Vycm9yKCdBTUMgcmVzcG9uZGVkIHdpdGggdHJ5X2FnYWluJywgJ3RyeV9hZ2FpbicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoXG4gICAgICAgICAgICByZXRyeUNvdW50LFxuICAgICAgICAgICAgdGhpcy5jb25maWcucmV0cnlJbnRlcnZhbCxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmJhY2tvZmZGYWN0b3IsXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5tYXhCYWNrb2ZmXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBzbGVlcChiYWNrb2ZmKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvcmJpZGRlbkVycm9yIGlmIG5vX3Blcm1pc3Npb25cbiAgICAgICAgaWYgKGFtY1Jlc3BvbnNlLnN0YXR1cyA9PT0gJ25vX3Blcm1pc3Npb24nKSB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0U3RyID0gYm9keS5tb2R1bGVOYW1lXG4gICAgICAgICAgICA/IGBtb2R1bGVOYW1lOiAke2JvZHkubW9kdWxlTmFtZX1gXG4gICAgICAgICAgICA6IGJvZHkuYWN0aW9uXG4gICAgICAgICAgICAgID8gYGFjdGlvbjogJHtib2R5LmFjdGlvbn0vJHtib2R5LmV2ZW50ID8/ICcnfWBcbiAgICAgICAgICAgICAgOiAndW5rbm93bic7XG4gICAgICAgICAgcmV0dXJuIHdkRXJyQXN5bmMoXG4gICAgICAgICAgICBuZXcgRm9yYmlkZGVuRXJyb3IoXG4gICAgICAgICAgICAgIGBZb3VyIGFjY291bnQgaGFzIG5vIHBlcm1pc3Npb24gdG8gcGVyZm9ybSB0aGlzIGFjdGlvbjogJHt0YXJnZXRTdHJ9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFcnJvciBpZiBzdGF0dXMgaXMgbm90IG9rXG4gICAgICAgIGlmIChhbWNSZXNwb25zZS5zdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm4gd2RFcnJBc3luYyhcbiAgICAgICAgICAgIG5ldyBXaWtpZG90U3RhdHVzRXJyb3IoXG4gICAgICAgICAgICAgIGBBTUMgcmVzcG9uZGVkIHdpdGggZXJyb3Igc3RhdHVzOiBcIiR7YW1jUmVzcG9uc2Uuc3RhdHVzfVwiYCxcbiAgICAgICAgICAgICAgYW1jUmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3ZE9rQXN5bmMoYW1jUmVzcG9uc2UpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gUmV0cnkgb24gSFRUUCBlcnJvclxuICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgIGlmIChyZXRyeUNvdW50ID49IHRoaXMuY29uZmlnLnJldHJ5TGltaXQpIHtcbiAgICAgICAgICBjb25zdCBzdGF0dXNDb2RlID1cbiAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgJ3Jlc3BvbnNlJyBpbiBlcnJvclxuICAgICAgICAgICAgICA/ICgoZXJyb3IgYXMgeyByZXNwb25zZT86IHsgc3RhdHVzPzogbnVtYmVyIH0gfSkucmVzcG9uc2U/LnN0YXR1cyA/P1xuICAgICAgICAgICAgICAgIERFRkFVTFRfSFRUUF9TVEFUVVNfQ09ERSlcbiAgICAgICAgICAgICAgOiBERUZBVUxUX0hUVFBfU1RBVFVTX0NPREU7XG4gICAgICAgICAgcmV0dXJuIHdkRXJyQXN5bmMoXG4gICAgICAgICAgICBuZXcgQU1DSHR0cEVycm9yKGBBTUMgSFRUUCByZXF1ZXN0IGZhaWxlZDogJHtTdHJpbmcoZXJyb3IpfWAsIHN0YXR1c0NvZGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhY2tvZmYgPSBjYWxjdWxhdGVCYWNrb2ZmKFxuICAgICAgICAgIHJldHJ5Q291bnQsXG4gICAgICAgICAgdGhpcy5jb25maWcucmV0cnlJbnRlcnZhbCxcbiAgICAgICAgICB0aGlzLmNvbmZpZy5iYWNrb2ZmRmFjdG9yLFxuICAgICAgICAgIHRoaXMuY29uZmlnLm1heEJhY2tvZmZcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLAogICAgIi8qKlxuICogQ2xhc3MgZm9yIG1hbmFnaW5nIEFNQyByZXF1ZXN0IGhlYWRlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIEFNQ0hlYWRlciB7XG4gIHByaXZhdGUgY29va2llczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgcHJpdmF0ZSBjb250ZW50VHlwZTogc3RyaW5nO1xuICBwcml2YXRlIHVzZXJBZ2VudDogc3RyaW5nO1xuICBwcml2YXRlIHJlZmVyZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBIZWFkZXIgaW5pdGlhbGl6YXRpb24gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IHsgY29udGVudFR5cGU/OiBzdHJpbmc7IHVzZXJBZ2VudD86IHN0cmluZzsgcmVmZXJlcj86IHN0cmluZyB9KSB7XG4gICAgdGhpcy5jb250ZW50VHlwZSA9IG9wdGlvbnM/LmNvbnRlbnRUeXBlID8/ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgnO1xuICAgIHRoaXMudXNlckFnZW50ID0gb3B0aW9ucz8udXNlckFnZW50ID8/ICdXaWtpZG90VFMnO1xuICAgIHRoaXMucmVmZXJlciA9IG9wdGlvbnM/LnJlZmVyZXIgPz8gJ2h0dHBzOi8vd3d3Lndpa2lkb3QuY29tLyc7XG4gICAgdGhpcy5jb29raWVzID0gbmV3IE1hcChbWyd3aWtpZG90X3Rva2VuNycsICcxMjM0NTYnXV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGNvb2tpZVxuICAgKiBAcGFyYW0gbmFtZSAtIENvb2tpZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSAtIENvb2tpZSB2YWx1ZVxuICAgKi9cbiAgc2V0Q29va2llKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29va2llcy5zZXQobmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIGNvb2tpZVxuICAgKiBAcGFyYW0gbmFtZSAtIENvb2tpZSBuYW1lXG4gICAqL1xuICBkZWxldGVDb29raWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb29raWVzLmRlbGV0ZShuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBjb29raWVcbiAgICogQHBhcmFtIG5hbWUgLSBDb29raWUgbmFtZVxuICAgKiBAcmV0dXJucyBDb29raWUgdmFsdWUsIHVuZGVmaW5lZCBpZiBub3QgZXhpc3RzXG4gICAqL1xuICBnZXRDb29raWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb29raWVzLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgSFRUUCBoZWFkZXJzIG9iamVjdFxuICAgKiBAcmV0dXJucyBIZWFkZXJzIGRpY3Rpb25hcnlcbiAgICovXG4gIGdldEhlYWRlcnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgY29va2llU3RyaW5nID0gQXJyYXkuZnJvbSh0aGlzLmNvb2tpZXMuZW50cmllcygpKVxuICAgICAgLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gYCR7bmFtZX09JHt2YWx1ZX1gKVxuICAgICAgLmpvaW4oJzsgJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHRoaXMuY29udGVudFR5cGUsXG4gICAgICAnVXNlci1BZ2VudCc6IHRoaXMudXNlckFnZW50LFxuICAgICAgUmVmZXJlcjogdGhpcy5yZWZlcmVyLFxuICAgICAgQ29va2llOiBjb29raWVTdHJpbmcsXG4gICAgfTtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuLyoqXG4gKiBBTUMgcmVxdWVzdCBib2R5IHZhbHVlIHR5cGVcbiAqL1xuZXhwb3J0IHR5cGUgQU1DUmVxdWVzdEJvZHlWYWx1ZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICB8IEFNQ1JlcXVlc3RCb2R5VmFsdWVbXTtcblxuLyoqXG4gKiBBTUMgcmVxdWVzdCBib2R5IHR5cGUgZGVmaW5pdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFNQ1JlcXVlc3RCb2R5IHtcbiAgbW9kdWxlTmFtZT86IHN0cmluZztcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogQU1DUmVxdWVzdEJvZHlWYWx1ZTtcbn1cblxuLyoqXG4gKiBBTUMgcmVzcG9uc2UgYmFzZSBzY2hlbWFcbiAqL1xuY29uc3QgYmFzZVNjaGVtYTogei5ab2RPYmplY3Q8e1xuICBzdGF0dXM6IHouWm9kU3RyaW5nO1xuICBib2R5OiB6LlpvZE9wdGlvbmFsPHouWm9kU3RyaW5nPjtcbiAgbWVzc2FnZTogei5ab2RPcHRpb25hbDx6LlpvZFN0cmluZz47XG59PiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBib2R5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEFNQyByZXNwb25zZSBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IGFtY1Jlc3BvbnNlU2NoZW1hOiB6LlpvZFR5cGU8ei5pbmZlcjx0eXBlb2YgYmFzZVNjaGVtYT4gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPVxuICBiYXNlU2NoZW1hLnBhc3N0aHJvdWdoKCk7XG5cbi8qKlxuICogQU1DIHJlc3BvbnNlIHR5cGVcbiAqL1xuZXhwb3J0IHR5cGUgQU1DUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBhbWNSZXNwb25zZVNjaGVtYT47XG5cbi8qKlxuICogU3VjY2Vzc2Z1bCBBTUMgcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBTUNTdWNjZXNzUmVzcG9uc2Uge1xuICBzdGF0dXM6ICdvayc7XG4gIGJvZHk6IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIEFNQyByZXNwb25zZSBpcyBzdWNjZXNzZnVsXG4gKiBAcGFyYW0gcmVzcG9uc2UgLSBBTUMgcmVzcG9uc2VcbiAqIEByZXR1cm5zIHRydWUgaWYgcmVzcG9uc2UgaXMgc3VjY2Vzc2Z1bFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdWNjZXNzUmVzcG9uc2UocmVzcG9uc2U6IEFNQ1Jlc3BvbnNlKTogcmVzcG9uc2UgaXMgQU1DU3VjY2Vzc1Jlc3BvbnNlIHtcbiAgcmV0dXJuIHJlc3BvbnNlLnN0YXR1cyA9PT0gJ29rJztcbn1cbiIsCiAgICAiZXhwb3J0IHsgQU1DQ2xpZW50LCB0eXBlIEFNQ1JlcXVlc3RPcHRpb25zLCBtYXNrU2Vuc2l0aXZlRGF0YSB9IGZyb20gJy4vYW1jLWNsaWVudCc7XG5leHBvcnQgeyB0eXBlIEFNQ0NvbmZpZywgREVGQVVMVF9BTUNfQ09ORklHIH0gZnJvbSAnLi9hbWMtY29uZmlnJztcbmV4cG9ydCB7IEFNQ0hlYWRlciB9IGZyb20gJy4vYW1jLWhlYWRlcic7XG5leHBvcnQge1xuICB0eXBlIEFNQ1JlcXVlc3RCb2R5LFxuICB0eXBlIEFNQ1Jlc3BvbnNlLFxuICB0eXBlIEFNQ1N1Y2Nlc3NSZXNwb25zZSxcbiAgYW1jUmVzcG9uc2VTY2hlbWEsXG4gIGlzU3VjY2Vzc1Jlc3BvbnNlLFxufSBmcm9tICcuL2FtYy10eXBlcyc7XG5leHBvcnQgeyBsb2dpbiwgbG9nb3V0IH0gZnJvbSAnLi9hdXRoJztcbiIsCiAgICAiaW1wb3J0IHsgU2Vzc2lvbkNyZWF0ZUVycm9yIH0gZnJvbSAnLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMsIHdkT2tBc3luYyB9IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEF1dGhDbGllbnRDb250ZXh0IH0gZnJvbSAnLi4vbW9kdWxlL3R5cGVzJztcblxuY29uc3QgTE9HSU5fVVJMID0gJ2h0dHBzOi8vd3d3Lndpa2lkb3QuY29tL2RlZmF1bHQtLWZsb3cvbG9naW5fX0xvZ2luUG9wdXBTY3JlZW4nO1xuXG4vKipcbiAqIExvZ2luIHRvIFdpa2lkb3Qgd2l0aCB1c2VybmFtZSBhbmQgcGFzc3dvcmRcbiAqIEBwYXJhbSBjbGllbnQgLSBDbGllbnQgY29udGV4dCAob2JqZWN0IHdpdGggQU1DQ2xpZW50KVxuICogQHBhcmFtIHVzZXJuYW1lIC0gVXNlcm5hbWVcbiAqIEBwYXJhbSBwYXNzd29yZCAtIFBhc3N3b3JkXG4gKiBAcmV0dXJucyB2b2lkIG9uIHN1Y2Nlc3MsIFNlc3Npb25DcmVhdGVFcnJvciBvbiBmYWlsdXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dpbihcbiAgY2xpZW50OiBBdXRoQ2xpZW50Q29udGV4dCxcbiAgdXNlcm5hbWU6IHN0cmluZyxcbiAgcGFzc3dvcmQ6IHN0cmluZ1xuKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBsb2dpbjogdXNlcm5hbWUsXG4gICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcbiAgICAgICAgYWN0aW9uOiAnTG9naW4yQWN0aW9uJyxcbiAgICAgICAgZXZlbnQ6ICdsb2dpbicsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChMT0dJTl9VUkwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IGNsaWVudC5hbWNDbGllbnQuaGVhZGVyLmdldEhlYWRlcnMoKSxcbiAgICAgICAgYm9keTogZm9ybURhdGEudG9TdHJpbmcoKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBDaGVjayBzdGF0dXMgY29kZVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkNyZWF0ZUVycm9yKFxuICAgICAgICAgIGBMb2dpbiBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gSFRUUCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBib2R5IGZvciBlcnJvciBtZXNzYWdlXG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgaWYgKGJvZHkuaW5jbHVkZXMoJ1RoZSBsb2dpbiBhbmQgcGFzc3dvcmQgZG8gbm90IG1hdGNoJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25DcmVhdGVFcnJvcignTG9naW4gYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIGludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgY29va2llc1xuICAgICAgY29uc3QgY29va2llcyA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdTZXQtQ29va2llJyk7XG4gICAgICBpZiAoIWNvb2tpZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25DcmVhdGVFcnJvcignTG9naW4gYXR0ZW1wdCBmYWlsZWQgZHVlIHRvIG1pc3NpbmcgY29va2llcycpO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWN0IFdJS0lET1RfU0VTU0lPTl9JRCBmcm9tIGNvb2tpZXNcbiAgICAgIGNvbnN0IHNlc3Npb25JZE1hdGNoID0gY29va2llcy5tYXRjaCgvV0lLSURPVF9TRVNTSU9OX0lEPShbXjtdKykvKTtcbiAgICAgIGlmICghc2Vzc2lvbklkTWF0Y2g/LlsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkNyZWF0ZUVycm9yKFxuICAgICAgICAgICdMb2dpbiBhdHRlbXB0IGZhaWxlZCBkdWUgdG8gbWlzc2luZyBXSUtJRE9UX1NFU1NJT05fSUQgY29va2llJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgc2Vzc2lvbiBjb29raWVcbiAgICAgIGNsaWVudC5hbWNDbGllbnQuaGVhZGVyLnNldENvb2tpZSgnV0lLSURPVF9TRVNTSU9OX0lEJywgc2Vzc2lvbklkTWF0Y2hbMV0pO1xuICAgIH0pKCksXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZXNzaW9uQ3JlYXRlRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBTZXNzaW9uQ3JlYXRlRXJyb3IoYExvZ2luIGZhaWxlZDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBMb2dvdXQgZnJvbSBXaWtpZG90XG4gKiBAcGFyYW0gY2xpZW50IC0gQ2xpZW50IGNvbnRleHQgKG9iamVjdCB3aXRoIEFNQ0NsaWVudClcbiAqIEByZXR1cm5zIHZvaWQgb24gc3VjY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nb3V0KGNsaWVudDogQXV0aENsaWVudENvbnRleHQpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAvLyBUcnkgdG8gbG9nb3V0IHZpYSBBTUMsIHRoZW4gYWx3YXlzIHJlbW92ZSBzZXNzaW9uIGNvb2tpZVxuICByZXR1cm4gY2xpZW50LmFtY0NsaWVudFxuICAgIC5yZXF1ZXN0KFtcbiAgICAgIHtcbiAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgYWN0aW9uOiAnTG9naW4yQWN0aW9uJyxcbiAgICAgICAgZXZlbnQ6ICdsb2dvdXQnLFxuICAgICAgfSxcbiAgICBdKVxuICAgIC5tYXAoKCkgPT4ge1xuICAgICAgLy8gTG9nb3V0IHN1Y2NlZWRlZCwgcmVtb3ZlIHNlc3Npb24gY29va2llXG4gICAgICBjbGllbnQuYW1jQ2xpZW50LmhlYWRlci5kZWxldGVDb29raWUoJ1dJS0lET1RfU0VTU0lPTl9JRCcpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KVxuICAgIC5vckVsc2UoKCkgPT4ge1xuICAgICAgLy8gRXZlbiBpZiBsb2dvdXQgcmVxdWVzdCBmYWlscywgd2Ugc3RpbGwgd2FudCB0byBjbGVhciB0aGUgc2Vzc2lvbiBsb2NhbGx5XG4gICAgICBjbGllbnQuYW1jQ2xpZW50LmhlYWRlci5kZWxldGVDb29raWUoJ1dJS0lET1RfU0VTU0lPTl9JRCcpO1xuICAgICAgcmV0dXJuIHdkT2tBc3luYyh1bmRlZmluZWQpO1xuICAgIH0pO1xufVxuIiwKICAgICJpbXBvcnQgKiBhcyBjaGVlcmlvIGZyb20gJ2NoZWVyaW8nO1xuaW1wb3J0IHtcbiAgRm9yYmlkZGVuRXJyb3IsXG4gIExvZ2luUmVxdWlyZWRFcnJvcixcbiAgTm9FbGVtZW50RXJyb3IsXG4gIFVuZXhwZWN0ZWRFcnJvcixcbn0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VPZGF0ZSwgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHR5cGUgeyBDbGllbnQgfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIgfSBmcm9tICcuLi91c2VyJztcbmltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gJy4uL3VzZXIvdXNlcic7XG5cbi8qKlxuICogUHJpdmF0ZSBtZXNzYWdlIGRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcml2YXRlTWVzc2FnZURhdGEge1xuICBjbGllbnQ6IENsaWVudDtcbiAgaWQ6IG51bWJlcjtcbiAgc2VuZGVyOiBBYnN0cmFjdFVzZXI7XG4gIHJlY2lwaWVudDogQWJzdHJhY3RVc2VyO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xufVxuXG4vKipcbiAqIFByaXZhdGUgbWVzc2FnZVxuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZU1lc3NhZ2Uge1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VuZGVyOiBBYnN0cmFjdFVzZXI7XG4gIHB1YmxpYyByZWFkb25seSByZWNpcGllbnQ6IEFic3RyYWN0VXNlcjtcbiAgcHVibGljIHJlYWRvbmx5IHN1YmplY3Q6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGJvZHk6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBQcml2YXRlTWVzc2FnZURhdGEpIHtcbiAgICB0aGlzLmNsaWVudCA9IGRhdGEuY2xpZW50O1xuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgIHRoaXMuc2VuZGVyID0gZGF0YS5zZW5kZXI7XG4gICAgdGhpcy5yZWNpcGllbnQgPSBkYXRhLnJlY2lwaWVudDtcbiAgICB0aGlzLnN1YmplY3QgPSBkYXRhLnN1YmplY3Q7XG4gICAgdGhpcy5ib2R5ID0gZGF0YS5ib2R5O1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZGF0YS5jcmVhdGVkQXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1lc3NhZ2UgYnkgbWVzc2FnZSBJRFxuICAgKiBAcGFyYW0gY2xpZW50IC0gQ2xpZW50IGluc3RhbmNlXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBNZXNzYWdlIElEXG4gICAqIEByZXR1cm5zIFByaXZhdGUgbWVzc2FnZVxuICAgKi9cbiAgc3RhdGljIGZyb21JZChjbGllbnQ6IENsaWVudCwgbWVzc2FnZUlkOiBudW1iZXIpOiBXaWtpZG90UmVzdWx0QXN5bmM8UHJpdmF0ZU1lc3NhZ2U+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24uZnJvbUlkcyhjbGllbnQsIFttZXNzYWdlSWRdKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcihgTWVzc2FnZSBub3QgZm91bmQ6ICR7bWVzc2FnZUlkfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBGb3JiaWRkZW5FcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IG1lc3NhZ2U6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgcHJpdmF0ZSBtZXNzYWdlXG4gICAqIEBwYXJhbSBjbGllbnQgLSBDbGllbnQgaW5zdGFuY2VcbiAgICogQHBhcmFtIHJlY2lwaWVudCAtIFJlY2lwaWVudFxuICAgKiBAcGFyYW0gc3ViamVjdCAtIFN1YmplY3RcbiAgICogQHBhcmFtIGJvZHkgLSBCb2R5XG4gICAqL1xuICBzdGF0aWMgc2VuZChcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICByZWNpcGllbnQ6IFVzZXIsXG4gICAgc3ViamVjdDogc3RyaW5nLFxuICAgIGJvZHk6IHN0cmluZ1xuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gY2xpZW50LnJlcXVpcmVMb2dpbigpO1xuICAgIGlmIChsb2dpblJlc3VsdC5pc0VycigpKSB7XG4gICAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAgIFByb21pc2UucmVqZWN0KGxvZ2luUmVzdWx0LmVycm9yKSxcbiAgICAgICAgKCkgPT4gbmV3IExvZ2luUmVxdWlyZWRFcnJvcignTG9naW4gcmVxdWlyZWQgdG8gc2VuZCBtZXNzYWdlJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmFtY0NsaWVudC5yZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2U6IGJvZHksXG4gICAgICAgICAgICBzdWJqZWN0LFxuICAgICAgICAgICAgdG9fdXNlcl9pZDogcmVjaXBpZW50LmlkLFxuICAgICAgICAgICAgYWN0aW9uOiAnRGFzaGJvYXJkTWVzc2FnZUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ3NlbmQnLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gc2VuZCBtZXNzYWdlOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFByaXZhdGVNZXNzYWdlKGlkPSR7dGhpcy5pZH0sIHNlbmRlcj0ke3RoaXMuc2VuZGVyfSwgcmVjaXBpZW50PSR7dGhpcy5yZWNpcGllbnR9LCBzdWJqZWN0PSR7dGhpcy5zdWJqZWN0fSlgO1xuICB9XG59XG5cbi8qKlxuICogUHJpdmF0ZSBtZXNzYWdlIGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PFByaXZhdGVNZXNzYWdlPiB7XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IENsaWVudDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCwgbWVzc2FnZXM/OiBQcml2YXRlTWVzc2FnZVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICBpZiAobWVzc2FnZXMpIHtcbiAgICAgIHRoaXMucHVzaCguLi5tZXNzYWdlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgSURcbiAgICovXG4gIGZpbmRCeUlkKGlkOiBudW1iZXIpOiBQcml2YXRlTWVzc2FnZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgobWVzc2FnZSkgPT4gbWVzc2FnZS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtZXNzYWdlcyBmcm9tIGxpc3Qgb2YgbWVzc2FnZSBJRHNcbiAgICovXG4gIHN0YXRpYyBmcm9tSWRzKFxuICAgIGNsaWVudDogQ2xpZW50LFxuICAgIG1lc3NhZ2VJZHM6IG51bWJlcltdXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24+IHtcbiAgICBjb25zdCBsb2dpblJlc3VsdCA9IGNsaWVudC5yZXF1aXJlTG9naW4oKTtcbiAgICBpZiAobG9naW5SZXN1bHQuaXNFcnIoKSkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlamVjdChsb2dpblJlc3VsdC5lcnJvciksXG4gICAgICAgICgpID0+IG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0xvZ2luIHJlcXVpcmVkIHRvIGdldCBtZXNzYWdlcycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvZGllcyA9IG1lc3NhZ2VJZHMubWFwKChtZXNzYWdlSWQpID0+ICh7XG4gICAgICAgICAgaXRlbTogbWVzc2FnZUlkLFxuICAgICAgICAgIG1vZHVsZU5hbWU6ICdkYXNoYm9hcmQvbWVzc2FnZXMvRE1WaWV3TWVzc2FnZU1vZHVsZScsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuYW1jQ2xpZW50LnJlcXVlc3QoYm9kaWVzKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZXM6IFByaXZhdGVNZXNzYWdlW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVtpXTtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlSWRzW2ldO1xuICAgICAgICAgIGlmICghcmVzcG9uc2UgfHwgbWVzc2FnZUlkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpO1xuXG4gICAgICAgICAgLy8gR2V0IHVzZXIgaW5mb3JtYXRpb25cbiAgICAgICAgICBjb25zdCBwcmludHVzZXJFbGVtcyA9ICQoJ2Rpdi5wbWVzc2FnZSBkaXYuaGVhZGVyIHNwYW4ucHJpbnR1c2VyJyk7XG4gICAgICAgICAgaWYgKHByaW50dXNlckVsZW1zLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBGb3JiaWRkZW5FcnJvcihgRmFpbGVkIHRvIGdldCBtZXNzYWdlOiAke21lc3NhZ2VJZH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzZW5kZXJFbGVtID0gJChwcmludHVzZXJFbGVtc1swXSk7XG4gICAgICAgICAgY29uc3QgcmVjaXBpZW50RWxlbSA9ICQocHJpbnR1c2VyRWxlbXNbMV0pO1xuXG4gICAgICAgICAgY29uc3Qgc2VuZGVyID0gcGFyc2VVc2VyKGNsaWVudCwgc2VuZGVyRWxlbSk7XG4gICAgICAgICAgY29uc3QgcmVjaXBpZW50ID0gcGFyc2VVc2VyKGNsaWVudCwgcmVjaXBpZW50RWxlbSk7XG5cbiAgICAgICAgICAvLyBTdWJqZWN0XG4gICAgICAgICAgY29uc3Qgc3ViamVjdEVsZW0gPSAkKCdkaXYucG1lc3NhZ2UgZGl2LmhlYWRlciBzcGFuLnN1YmplY3QnKTtcbiAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gc3ViamVjdEVsZW0udGV4dCgpLnRyaW0oKTtcblxuICAgICAgICAgIC8vIEJvZHlcbiAgICAgICAgICBjb25zdCBib2R5RWxlbSA9ICQoJ2Rpdi5wbWVzc2FnZSBkaXYuYm9keScpO1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBib2R5RWxlbS50ZXh0KCkudHJpbSgpO1xuXG4gICAgICAgICAgLy8gVGltZXN0YW1wXG4gICAgICAgICAgY29uc3Qgb2RhdGVFbGVtID0gJCgnZGl2LmhlYWRlciBzcGFuLm9kYXRlJyk7XG4gICAgICAgICAgY29uc3QgY3JlYXRlZEF0ID1cbiAgICAgICAgICAgIG9kYXRlRWxlbS5sZW5ndGggPiAwID8gKHBhcnNlT2RhdGUob2RhdGVFbGVtKSA/PyBuZXcgRGF0ZSgwKSkgOiBuZXcgRGF0ZSgwKTtcblxuICAgICAgICAgIG1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICBuZXcgUHJpdmF0ZU1lc3NhZ2Uoe1xuICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgIGlkOiBtZXNzYWdlSWQsXG4gICAgICAgICAgICAgIHNlbmRlcixcbiAgICAgICAgICAgICAgcmVjaXBpZW50LFxuICAgICAgICAgICAgICBzdWJqZWN0LFxuICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbihjbGllbnQsIG1lc3NhZ2VzKTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRm9yYmlkZGVuRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgbWVzc2FnZXM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBnZXQgbWVzc2FnZXMgZnJvbSBtb2R1bGVcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgYWNxdWlyZUZyb21Nb2R1bGUoXG4gICAgY2xpZW50OiBDbGllbnQsXG4gICAgbW9kdWxlTmFtZTogc3RyaW5nXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24+IHtcbiAgICBjb25zdCBsb2dpblJlc3VsdCA9IGNsaWVudC5yZXF1aXJlTG9naW4oKTtcbiAgICBpZiAobG9naW5SZXN1bHQuaXNFcnIoKSkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlamVjdChsb2dpblJlc3VsdC5lcnJvciksXG4gICAgICAgICgpID0+IG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0xvZ2luIHJlcXVpcmVkIHRvIGdldCBtZXNzYWdlcycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEdldCBwYWdlclxuICAgICAgICBjb25zdCBmaXJzdFJlc3VsdCA9IGF3YWl0IGNsaWVudC5hbWNDbGllbnQucmVxdWVzdChbeyBtb2R1bGVOYW1lIH1dKTtcbiAgICAgICAgaWYgKGZpcnN0UmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyBmaXJzdFJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpcnN0UmVzcG9uc2UgPSBmaXJzdFJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFmaXJzdFJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RIdG1sID0gU3RyaW5nKGZpcnN0UmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgIGNvbnN0ICRmaXJzdCA9IGNoZWVyaW8ubG9hZChmaXJzdEh0bWwpO1xuXG4gICAgICAgIC8vIEdldCBwYWdlIGNvdW50XG4gICAgICAgIGNvbnN0IHBhZ2VyVGFyZ2V0cyA9ICRmaXJzdCgnZGl2LnBhZ2VyIHNwYW4udGFyZ2V0Jyk7XG4gICAgICAgIGxldCBtYXhQYWdlID0gMTtcbiAgICAgICAgaWYgKHBhZ2VyVGFyZ2V0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgY29uc3QgbGFzdFBhZ2VUZXh0ID0gJGZpcnN0KHBhZ2VyVGFyZ2V0c1twYWdlclRhcmdldHMubGVuZ3RoIC0gMl0pXG4gICAgICAgICAgICAudGV4dCgpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICAgIG1heFBhZ2UgPSBOdW1iZXIucGFyc2VJbnQobGFzdFBhZ2VUZXh0LCAxMCkgfHwgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBtZXNzYWdlIElEcyBmcm9tIGFsbCBwYWdlc1xuICAgICAgICBjb25zdCBtZXNzYWdlSWRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICAgIGlmIChtYXhQYWdlID4gMSkge1xuICAgICAgICAgIGNvbnN0IGJvZGllcyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAxOyBwYWdlIDw9IG1heFBhZ2U7IHBhZ2UrKykge1xuICAgICAgICAgICAgYm9kaWVzLnB1c2goeyBwYWdlLCBtb2R1bGVOYW1lIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsUmVzdWx0cyA9IGF3YWl0IGNsaWVudC5hbWNDbGllbnQucmVxdWVzdChib2RpZXMpO1xuICAgICAgICAgIGlmIChhZGRpdGlvbmFsUmVzdWx0cy5pc0VycigpKSB7XG4gICAgICAgICAgICB0aHJvdyBhZGRpdGlvbmFsUmVzdWx0cy5lcnJvcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIGFkZGl0aW9uYWxSZXN1bHRzLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBodG1sID0gU3RyaW5nKHJlc3BvbnNlPy5ib2R5ID8/ICcnKTtcbiAgICAgICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoaHRtbCk7XG4gICAgICAgICAgICAkKCd0ci5tZXNzYWdlJykuZWFjaCgoX2ksIGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YUhyZWYgPSAkKGVsZW0pLmF0dHIoJ2RhdGEtaHJlZicpID8/ICcnO1xuICAgICAgICAgICAgICBjb25zdCBpZE1hdGNoID0gZGF0YUhyZWYubWF0Y2goL1xcLyhcXGQrKSQvKTtcbiAgICAgICAgICAgICAgaWYgKGlkTWF0Y2g/LlsxXSkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VJZHMucHVzaChOdW1iZXIucGFyc2VJbnQoaWRNYXRjaFsxXSwgMTApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRmaXJzdCgndHIubWVzc2FnZScpLmVhY2goKF9pLCBlbGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhSHJlZiA9ICRmaXJzdChlbGVtKS5hdHRyKCdkYXRhLWhyZWYnKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGlkTWF0Y2ggPSBkYXRhSHJlZi5tYXRjaCgvXFwvKFxcZCspJC8pO1xuICAgICAgICAgICAgaWYgKGlkTWF0Y2g/LlsxXSkge1xuICAgICAgICAgICAgICBtZXNzYWdlSWRzLnB1c2goTnVtYmVyLnBhcnNlSW50KGlkTWF0Y2hbMV0sIDEwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgbWVzc2FnZXNcbiAgICAgICAgY29uc3QgbWVzc2FnZXNSZXN1bHQgPSBhd2FpdCBQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24uZnJvbUlkcyhjbGllbnQsIG1lc3NhZ2VJZHMpO1xuICAgICAgICBpZiAobWVzc2FnZXNSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IG1lc3NhZ2VzUmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzUmVzdWx0LnZhbHVlO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBGb3JiaWRkZW5FcnJvciB8fFxuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yIHx8XG4gICAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvclxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBhY3F1aXJlIG1lc3NhZ2VzOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEluYm94XG4gKi9cbmV4cG9ydCBjbGFzcyBQcml2YXRlTWVzc2FnZUluYm94IGV4dGVuZHMgUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uIHtcbiAgLyoqXG4gICAqIEdldCBhbGwgbWVzc2FnZXMgaW4gaW5ib3hcbiAgICovXG4gIHN0YXRpYyBhY3F1aXJlKGNsaWVudDogQ2xpZW50KTogV2lraWRvdFJlc3VsdEFzeW5jPFByaXZhdGVNZXNzYWdlSW5ib3g+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24uYWNxdWlyZUZyb21Nb2R1bGUoXG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICdkYXNoYm9hcmQvbWVzc2FnZXMvRE1JbmJveE1vZHVsZSdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluYm94ID0gbmV3IFByaXZhdGVNZXNzYWdlSW5ib3goY2xpZW50KTtcbiAgICAgICAgaW5ib3gucHVzaCguLi5yZXN1bHQudmFsdWUpO1xuICAgICAgICByZXR1cm4gaW5ib3g7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEZvcmJpZGRlbkVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBpbmJveDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZW50IGJveFxuICovXG5leHBvcnQgY2xhc3MgUHJpdmF0ZU1lc3NhZ2VTZW50Qm94IGV4dGVuZHMgUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uIHtcbiAgLyoqXG4gICAqIEdldCBhbGwgbWVzc2FnZXMgaW4gc2VudCBib3hcbiAgICovXG4gIHN0YXRpYyBhY3F1aXJlKGNsaWVudDogQ2xpZW50KTogV2lraWRvdFJlc3VsdEFzeW5jPFByaXZhdGVNZXNzYWdlU2VudEJveD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbi5hY3F1aXJlRnJvbU1vZHVsZShcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgJ2Rhc2hib2FyZC9tZXNzYWdlcy9ETVNlbnRNb2R1bGUnXG4gICAgICAgICk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZW50Qm94ID0gbmV3IFByaXZhdGVNZXNzYWdlU2VudEJveChjbGllbnQpO1xuICAgICAgICBzZW50Qm94LnB1c2goLi4ucmVzdWx0LnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlbnRCb3g7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEZvcmJpZGRlbkVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgTG9naW5SZXF1aXJlZEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBzZW50IGJveDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHtcbiAgUHJpdmF0ZU1lc3NhZ2UsXG4gIFByaXZhdGVNZXNzYWdlQ29sbGVjdGlvbixcbiAgUHJpdmF0ZU1lc3NhZ2VJbmJveCxcbiAgUHJpdmF0ZU1lc3NhZ2VTZW50Qm94LFxufSBmcm9tICcuLi8uLi9wcml2YXRlLW1lc3NhZ2UnO1xuaW1wb3J0IHR5cGUgeyBVc2VyIH0gZnJvbSAnLi4vLi4vdXNlci91c2VyJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcblxuLyoqXG4gKiBQcml2YXRlIG1lc3NhZ2Ugb3BlcmF0aW9ucyBhY2Nlc3NvclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBHZXQgaW5ib3hcbiAqIGNvbnN0IGluYm94UmVzdWx0ID0gYXdhaXQgY2xpZW50LnByaXZhdGVNZXNzYWdlLmluYm94KCk7XG4gKiBpZiAoIWluYm94UmVzdWx0LmlzT2soKSkge1xuICogICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgaW5ib3gnKTtcbiAqIH1cbiAqIGNvbnN0IGluYm94ID0gaW5ib3hSZXN1bHQudmFsdWU7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFByaXZhdGVNZXNzYWdlQWNjZXNzb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnQpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWVzc2FnZSBieSBtZXNzYWdlIElEXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIE1lc3NhZ2UgSURcbiAgICogQHJldHVybnMgTWVzc2FnZSBvYmplY3Qgd3JhcHBlZCBpbiBSZXN1bHQgdHlwZVxuICAgKi9cbiAgZ2V0KGlkOiBudW1iZXIpOiBXaWtpZG90UmVzdWx0QXN5bmM8UHJpdmF0ZU1lc3NhZ2U+IHtcbiAgICByZXR1cm4gUHJpdmF0ZU1lc3NhZ2UuZnJvbUlkKHRoaXMuY2xpZW50LCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1lc3NhZ2VzIGZyb20gbXVsdGlwbGUgbWVzc2FnZSBJRHNcbiAgICogQHBhcmFtIGlkcyAtIEFycmF5IG9mIG1lc3NhZ2UgSURzXG4gICAqIEByZXR1cm5zIE1lc3NhZ2UgY29sbGVjdGlvblxuICAgKi9cbiAgZ2V0TWVzc2FnZXMoaWRzOiBudW1iZXJbXSk6IFdpa2lkb3RSZXN1bHRBc3luYzxQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gUHJpdmF0ZU1lc3NhZ2VDb2xsZWN0aW9uLmZyb21JZHModGhpcy5jbGllbnQsIGlkcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGluYm94IG1lc3NhZ2UgbGlzdFxuICAgKiBAcmV0dXJucyBJbmJveFxuICAgKi9cbiAgaW5ib3goKTogV2lraWRvdFJlc3VsdEFzeW5jPFByaXZhdGVNZXNzYWdlSW5ib3g+IHtcbiAgICByZXR1cm4gUHJpdmF0ZU1lc3NhZ2VJbmJveC5hY3F1aXJlKHRoaXMuY2xpZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2VudCBib3ggbWVzc2FnZSBsaXN0XG4gICAqIEByZXR1cm5zIFNlbnQgYm94XG4gICAqL1xuICBzZW50Qm94KCk6IFdpa2lkb3RSZXN1bHRBc3luYzxQcml2YXRlTWVzc2FnZVNlbnRCb3g+IHtcbiAgICByZXR1cm4gUHJpdmF0ZU1lc3NhZ2VTZW50Qm94LmFjcXVpcmUodGhpcy5jbGllbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBwcml2YXRlIG1lc3NhZ2VcbiAgICogQHBhcmFtIHJlY2lwaWVudCAtIFJlY2lwaWVudFxuICAgKiBAcGFyYW0gc3ViamVjdCAtIFN1YmplY3RcbiAgICogQHBhcmFtIGJvZHkgLSBCb2R5XG4gICAqL1xuICBzZW5kKHJlY2lwaWVudDogVXNlciwgc3ViamVjdDogc3RyaW5nLCBib2R5OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBQcml2YXRlTWVzc2FnZS5zZW5kKHRoaXMuY2xpZW50LCByZWNpcGllbnQsIHN1YmplY3QsIGJvZHkpO1xuICB9XG59XG5cbmV4cG9ydCB7IFByaXZhdGVNZXNzYWdlLCBQcml2YXRlTWVzc2FnZUNvbGxlY3Rpb24sIFByaXZhdGVNZXNzYWdlSW5ib3gsIFByaXZhdGVNZXNzYWdlU2VudEJveCB9O1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQge1xuICBGb3J1bUNhdGVnb3J5LFxuICBGb3J1bUNhdGVnb3J5Q29sbGVjdGlvbixcbiAgRm9ydW1Qb3N0LFxuICBGb3J1bVRocmVhZCxcbiAgRm9ydW1UaHJlYWRDb2xsZWN0aW9uLFxufSBmcm9tICcuLi8uLi9mb3J1bSc7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcblxuLyoqXG4gKiBGb3J1bSBvcGVyYXRpb25zIGFjY2Vzc29yXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3J1bUFjY2Vzc29yIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG5cbiAgY29uc3RydWN0b3Ioc2l0ZTogU2l0ZSkge1xuICAgIHRoaXMuc2l0ZSA9IHNpdGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZvcnVtIGNhdGVnb3J5IGxpc3RcbiAgICogQHJldHVybnMgQ2F0ZWdvcnkgbGlzdFxuICAgKi9cbiAgZ2V0Q2F0ZWdvcmllcygpOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1DYXRlZ29yeUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gRm9ydW1DYXRlZ29yeUNvbGxlY3Rpb24uYWNxdWlyZUFsbCh0aGlzLnNpdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aHJlYWRcbiAgICogQHBhcmFtIHRocmVhZElkIC0gVGhyZWFkIElEXG4gICAqIEByZXR1cm5zIFRocmVhZFxuICAgKi9cbiAgZ2V0VGhyZWFkKHRocmVhZElkOiBudW1iZXIpOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWQ+IHtcbiAgICByZXR1cm4gRm9ydW1UaHJlYWQuZ2V0RnJvbUlkKHRoaXMuc2l0ZSwgdGhyZWFkSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtdWx0aXBsZSB0aHJlYWRzXG4gICAqIEBwYXJhbSB0aHJlYWRJZHMgLSBBcnJheSBvZiB0aHJlYWQgSURzXG4gICAqIEByZXR1cm5zIFRocmVhZCBjb2xsZWN0aW9uXG4gICAqL1xuICBnZXRUaHJlYWRzKHRocmVhZElkczogbnVtYmVyW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8Rm9ydW1UaHJlYWRDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIEZvcnVtVGhyZWFkQ29sbGVjdGlvbi5hY3F1aXJlRnJvbVRocmVhZElkcyh0aGlzLnNpdGUsIHRocmVhZElkcyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgRm9ydW1DYXRlZ29yeSwgRm9ydW1DYXRlZ29yeUNvbGxlY3Rpb24sIEZvcnVtVGhyZWFkLCBGb3J1bVRocmVhZENvbGxlY3Rpb24sIEZvcnVtUG9zdCB9O1xuIiwKICAgICJpbXBvcnQgeyBSZXF1aXJlTG9naW4gfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBMb2dpblJlcXVpcmVkRXJyb3IsXG4gIFRhcmdldEVycm9yLFxuICBVbmV4cGVjdGVkRXJyb3IsXG4gIFdpa2lkb3RTdGF0dXNFcnJvcixcbn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgdHlwZSBRTUNVc2VyLCBRdWlja01vZHVsZSB9IGZyb20gJy4uLy4uLy4uL3V0aWwvcXVpY2stbW9kdWxlJztcbmltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gJy4uLy4uL3VzZXIvdXNlcic7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcbmltcG9ydCB7IFNpdGVBcHBsaWNhdGlvbiB9IGZyb20gJy4uL3NpdGUtYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgU2l0ZU1lbWJlciB9IGZyb20gJy4uL3NpdGUtbWVtYmVyJztcblxuLyoqXG4gKiBTaXRlIG1lbWJlciBvcGVyYXRpb25zIGFjY2Vzc29yXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1iZXJBY2Nlc3NvciB7XG4gIHB1YmxpYyByZWFkb25seSBzaXRlOiBTaXRlO1xuXG4gIGNvbnN0cnVjdG9yKHNpdGU6IFNpdGUpIHtcbiAgICB0aGlzLnNpdGUgPSBzaXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgbWVtYmVyc1xuICAgKiBAcmV0dXJucyBNZW1iZXIgbGlzdFxuICAgKi9cbiAgZ2V0QWxsKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxTaXRlTWVtYmVyW10+IHtcbiAgICByZXR1cm4gU2l0ZU1lbWJlci5nZXRNZW1iZXJzKHRoaXMuc2l0ZSwgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtb2RlcmF0b3IgbGlzdFxuICAgKiBAcmV0dXJucyBNb2RlcmF0b3IgbGlzdFxuICAgKi9cbiAgZ2V0TW9kZXJhdG9ycygpOiBXaWtpZG90UmVzdWx0QXN5bmM8U2l0ZU1lbWJlcltdPiB7XG4gICAgcmV0dXJuIFNpdGVNZW1iZXIuZ2V0TWVtYmVycyh0aGlzLnNpdGUsICdtb2RlcmF0b3JzJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFkbWluIGxpc3RcbiAgICogQHJldHVybnMgQWRtaW4gbGlzdFxuICAgKi9cbiAgZ2V0QWRtaW5zKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxTaXRlTWVtYmVyW10+IHtcbiAgICByZXR1cm4gU2l0ZU1lbWJlci5nZXRNZW1iZXJzKHRoaXMuc2l0ZSwgJ2FkbWlucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwZW5kaW5nIG1lbWJlcnNoaXAgYXBwbGljYXRpb25zXG4gICAqIEByZXR1cm5zIEFwcGxpY2F0aW9uIGxpc3RcbiAgICovXG4gIGdldEFwcGxpY2F0aW9ucygpOiBXaWtpZG90UmVzdWx0QXN5bmM8U2l0ZUFwcGxpY2F0aW9uW10+IHtcbiAgICByZXR1cm4gU2l0ZUFwcGxpY2F0aW9uLmFjcXVpcmVBbGwodGhpcy5zaXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggbWVtYmVyc1xuICAgKiBAcGFyYW0gcXVlcnkgLSBTZWFyY2ggcXVlcnkgKHBhcnQgb2YgdXNlcm5hbWUpXG4gICAqIEByZXR1cm5zIE1hdGNoZWQgdXNlciBsaXN0IChRTUNVc2VyIGZvcm1hdClcbiAgICovXG4gIGxvb2t1cChxdWVyeTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPFFNQ1VzZXJbXT4ge1xuICAgIHJldHVybiBRdWlja01vZHVsZS5tZW1iZXJMb29rdXAodGhpcy5zaXRlLmlkLCBxdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogSW52aXRlIHVzZXIgdG8gc2l0ZVxuICAgKiBAcGFyYW0gdXNlciAtIFVzZXIgdG8gaW52aXRlXG4gICAqIEBwYXJhbSB0ZXh0IC0gSW52aXRhdGlvbiBtZXNzYWdlXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGludml0ZSh1c2VyOiBVc2VyLCB0ZXh0OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdNYW5hZ2VTaXRlTWVtYmVyc2hpcEFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ2ludml0ZU1lbWJlcicsXG4gICAgICAgICAgICB1c2VyX2lkOiB1c2VyLmlkLFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdFbXB0eScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFdpa2lkb3RTdGF0dXNFcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1c0NvZGUgPT09ICdhbHJlYWR5X2ludml0ZWQnKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUYXJnZXRFcnJvcihcbiAgICAgICAgICAgICAgICBgVXNlciBpcyBhbHJlYWR5IGludml0ZWQgdG8gJHt0aGlzLnNpdGUudW5peE5hbWV9OiAke3VzZXIubmFtZX1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzQ29kZSA9PT0gJ2FscmVhZHlfbWVtYmVyJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVGFyZ2V0RXJyb3IoXG4gICAgICAgICAgICAgICAgYFVzZXIgaXMgYWxyZWFkeSBhIG1lbWJlciBvZiAke3RoaXMuc2l0ZS51bml4TmFtZX06ICR7dXNlci5uYW1lfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVGFyZ2V0RXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBpbnZpdGUgdXNlcjogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgU2l0ZU1lbWJlciwgU2l0ZUFwcGxpY2F0aW9uIH07XG4iLAogICAgIi8qKlxuICogUXVpY2tNb2R1bGUgLSBXaWtpZG90IGxpZ2h0d2VpZ2h0IEFQSVxuICpcbiAqIFNlYXJjaCBmdW5jdGlvbmFsaXR5IHVzaW5nIHF1aWNrbW9kdWxlLnBocCBlbmRwb2ludFxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgTm90Rm91bmRFeGNlcHRpb24sIFVuZXhwZWN0ZWRFcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcblxuLyoqXG4gKiBRdWlja01vZHVsZSBtb2R1bGUgbmFtZVxuICovXG5leHBvcnQgdHlwZSBRdWlja01vZHVsZU5hbWUgPSAnTWVtYmVyTG9va3VwUU1vZHVsZScgfCAnVXNlckxvb2t1cFFNb2R1bGUnIHwgJ1BhZ2VMb29rdXBRTW9kdWxlJztcblxuLyoqXG4gKiBRdWlja01vZHVsZSB1c2VyIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUU1DVXNlciB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBRdWlja01vZHVsZSBwYWdlIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUU1DUGFnZSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVuaXhOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUXVpY2tNb2R1bGUgcmVzcG9uc2Ugc2NoZW1hXG4gKi9cbmNvbnN0IHF1aWNrTW9kdWxlVXNlclJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICB1c2Vyczogei51bmlvbihbXG4gICAgei5hcnJheShcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgdXNlcl9pZDogei51bmlvbihbei5zdHJpbmcoKSwgei5udW1iZXIoKV0pLFxuICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgfSlcbiAgICApLFxuICAgIHoubGl0ZXJhbChmYWxzZSksXG4gIF0pLFxufSk7XG5cbmNvbnN0IHF1aWNrTW9kdWxlUGFnZVJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBwYWdlczogei51bmlvbihbXG4gICAgei5hcnJheShcbiAgICAgIHoub2JqZWN0KHtcbiAgICAgICAgdGl0bGU6IHouc3RyaW5nKCksXG4gICAgICAgIHVuaXhfbmFtZTogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgKSxcbiAgICB6LmxpdGVyYWwoZmFsc2UpLFxuICBdKSxcbn0pO1xuXG4vKipcbiAqIFNlbmQgcmVxdWVzdCB0byBRdWlja01vZHVsZSBlbmRwb2ludFxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0UXVpY2tNb2R1bGUoXG4gIG1vZHVsZU5hbWU6IFF1aWNrTW9kdWxlTmFtZSxcbiAgc2l0ZUlkOiBudW1iZXIsXG4gIHF1ZXJ5OiBzdHJpbmdcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCB1cmwgPSBgaHR0cHM6Ly93d3cud2lraWRvdC5jb20vcXVpY2ttb2R1bGUucGhwP21vZHVsZT0ke21vZHVsZU5hbWV9JnM9JHtzaXRlSWR9JnE9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWA7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0sXG4gIH0pO1xuXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDUwMCkge1xuICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihgU2l0ZSBub3QgZm91bmQ6IHNpdGVJZD0ke3NpdGVJZH1gKTtcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEVycm9yKGBRdWlja01vZHVsZSByZXF1ZXN0IGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG4vKipcbiAqIFNlYXJjaCBzaXRlIG1lbWJlcnNcbiAqIEBwYXJhbSBzaXRlSWQgLSBTaXRlIElEXG4gKiBAcGFyYW0gcXVlcnkgLSBTZWFyY2ggcXVlcnkgKHBhcnRpYWwgdXNlcm5hbWUpXG4gKiBAcmV0dXJucyBMaXN0IG9mIG1hdGNoaW5nIHVzZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJMb29rdXAoc2l0ZUlkOiBudW1iZXIsIHF1ZXJ5OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8UU1DVXNlcltdPiB7XG4gIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcXVlc3RRdWlja01vZHVsZSgnTWVtYmVyTG9va3VwUU1vZHVsZScsIHNpdGVJZCwgcXVlcnkpO1xuICAgICAgY29uc3QgcGFyc2VkID0gcXVpY2tNb2R1bGVVc2VyUmVzcG9uc2VTY2hlbWEucGFyc2UoZGF0YSk7XG5cbiAgICAgIGlmIChwYXJzZWQudXNlcnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlZC51c2Vycy5tYXAoKHVzZXIpID0+ICh7XG4gICAgICAgIGlkOiB0eXBlb2YgdXNlci51c2VyX2lkID09PSAnc3RyaW5nJyA/IE51bWJlci5wYXJzZUludCh1c2VyLnVzZXJfaWQsIDEwKSA6IHVzZXIudXNlcl9pZCxcbiAgICAgICAgbmFtZTogdXNlci5uYW1lLFxuICAgICAgfSkpO1xuICAgIH0pKCksXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbikgcmV0dXJuIGVycm9yO1xuICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYE1lbWJlciBsb29rdXAgZmFpbGVkOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFNlYXJjaCB1c2VycyBhY3Jvc3MgYWxsIFdpa2lkb3RcbiAqIEBwYXJhbSBzaXRlSWQgLSBTaXRlIElEIChhbnkgc2l0ZSBJRCB3b3JrcylcbiAqIEBwYXJhbSBxdWVyeSAtIFNlYXJjaCBxdWVyeSAocGFydGlhbCB1c2VybmFtZSlcbiAqIEByZXR1cm5zIExpc3Qgb2YgbWF0Y2hpbmcgdXNlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJMb29rdXAoc2l0ZUlkOiBudW1iZXIsIHF1ZXJ5OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8UU1DVXNlcltdPiB7XG4gIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcXVlc3RRdWlja01vZHVsZSgnVXNlckxvb2t1cFFNb2R1bGUnLCBzaXRlSWQsIHF1ZXJ5KTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHF1aWNrTW9kdWxlVXNlclJlc3BvbnNlU2NoZW1hLnBhcnNlKGRhdGEpO1xuXG4gICAgICBpZiAocGFyc2VkLnVzZXJzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQudXNlcnMubWFwKCh1c2VyKSA9PiAoe1xuICAgICAgICBpZDogdHlwZW9mIHVzZXIudXNlcl9pZCA9PT0gJ3N0cmluZycgPyBOdW1iZXIucGFyc2VJbnQodXNlci51c2VyX2lkLCAxMCkgOiB1c2VyLnVzZXJfaWQsXG4gICAgICAgIG5hbWU6IHVzZXIubmFtZSxcbiAgICAgIH0pKTtcbiAgICB9KSgpLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24pIHJldHVybiBlcnJvcjtcbiAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBVc2VyIGxvb2t1cCBmYWlsZWQ6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gICk7XG59XG5cbi8qKlxuICogU2VhcmNoIHBhZ2VzIHdpdGhpbiBzaXRlXG4gKiBAcGFyYW0gc2l0ZUlkIC0gU2l0ZSBJRFxuICogQHBhcmFtIHF1ZXJ5IC0gU2VhcmNoIHF1ZXJ5IChwYXJ0aWFsIHBhZ2UgbmFtZSlcbiAqIEByZXR1cm5zIExpc3Qgb2YgbWF0Y2hpbmcgcGFnZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhZ2VMb29rdXAoc2l0ZUlkOiBudW1iZXIsIHF1ZXJ5OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8UU1DUGFnZVtdPiB7XG4gIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcXVlc3RRdWlja01vZHVsZSgnUGFnZUxvb2t1cFFNb2R1bGUnLCBzaXRlSWQsIHF1ZXJ5KTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHF1aWNrTW9kdWxlUGFnZVJlc3BvbnNlU2NoZW1hLnBhcnNlKGRhdGEpO1xuXG4gICAgICBpZiAocGFyc2VkLnBhZ2VzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZWQucGFnZXMubWFwKChwYWdlKSA9PiAoe1xuICAgICAgICB0aXRsZTogcGFnZS50aXRsZSxcbiAgICAgICAgdW5peE5hbWU6IHBhZ2UudW5peF9uYW1lLFxuICAgICAgfSkpO1xuICAgIH0pKCksXG4gICAgKGVycm9yKSA9PiB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbikgcmV0dXJuIGVycm9yO1xuICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYFBhZ2UgbG9va3VwIGZhaWxlZDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBRdWlja01vZHVsZSBBUEkgKG1haW50YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KVxuICogQGRlcHJlY2F0ZWQgVXNlIGluZGl2aWR1YWwgZnVuY3Rpb25zIChtZW1iZXJMb29rdXAsIHVzZXJMb29rdXAsIHBhZ2VMb29rdXApIGluc3RlYWRcbiAqL1xuZXhwb3J0IGNvbnN0IFF1aWNrTW9kdWxlOiB7XG4gIG1lbWJlckxvb2t1cDogdHlwZW9mIG1lbWJlckxvb2t1cDtcbiAgdXNlckxvb2t1cDogdHlwZW9mIHVzZXJMb29rdXA7XG4gIHBhZ2VMb29rdXA6IHR5cGVvZiBwYWdlTG9va3VwO1xufSA9IHtcbiAgbWVtYmVyTG9va3VwOiBtZW1iZXJMb29rdXAsXG4gIHVzZXJMb29rdXA6IHVzZXJMb29rdXAsXG4gIHBhZ2VMb29rdXA6IHBhZ2VMb29rdXAsXG59O1xuIiwKICAgICJpbXBvcnQgKiBhcyBjaGVlcmlvIGZyb20gJ2NoZWVyaW8nO1xuaW1wb3J0IHsgUmVxdWlyZUxvZ2luIH0gZnJvbSAnLi4vLi4vY29tbW9uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgRm9yYmlkZGVuRXJyb3IsXG4gIExvZ2luUmVxdWlyZWRFcnJvcixcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFVuZXhwZWN0ZWRFcnJvcixcbiAgV2lraWRvdFN0YXR1c0Vycm9yLFxufSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZVVzZXIgfSBmcm9tICcuLi8uLi91dGlsL3BhcnNlcic7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciB9IGZyb20gJy4uL3VzZXInO1xuaW1wb3J0IHR5cGUgeyBTaXRlIH0gZnJvbSAnLi9zaXRlJztcblxuLyoqXG4gKiBTaXRlIG1lbWJlcnNoaXAgYXBwbGljYXRpb24gZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpdGVBcHBsaWNhdGlvbkRhdGEge1xuICBzaXRlOiBTaXRlO1xuICB1c2VyOiBBYnN0cmFjdFVzZXI7XG4gIHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTaXRlIG1lbWJlcnNoaXAgYXBwbGljYXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFNpdGVBcHBsaWNhdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSBzaXRlOiBTaXRlO1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlcjogQWJzdHJhY3RVc2VyO1xuICBwdWJsaWMgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFNpdGVBcHBsaWNhdGlvbkRhdGEpIHtcbiAgICB0aGlzLnNpdGUgPSBkYXRhLnNpdGU7XG4gICAgdGhpcy51c2VyID0gZGF0YS51c2VyO1xuICAgIHRoaXMudGV4dCA9IGRhdGEudGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHBlbmRpbmcgbWVtYmVyc2hpcCBhcHBsaWNhdGlvbnNcbiAgICogQHBhcmFtIHNpdGUgLSBUYXJnZXQgc2l0ZVxuICAgKi9cbiAgc3RhdGljIGFjcXVpcmVBbGwoc2l0ZTogU2l0ZSk6IFdpa2lkb3RSZXN1bHRBc3luYzxTaXRlQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gc2l0ZS5jbGllbnQucmVxdWlyZUxvZ2luKCk7XG4gICAgaWYgKGxvZ2luUmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgICAgUHJvbWlzZS5yZWplY3QobG9naW5SZXN1bHQuZXJyb3IpLFxuICAgICAgICAoKSA9PiBuZXcgTG9naW5SZXF1aXJlZEVycm9yKCdMb2dpbiByZXF1aXJlZCB0byBnZXQgYXBwbGljYXRpb25zJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7IG1vZHVsZU5hbWU6ICdtYW5hZ2VzaXRlL01hbmFnZVNpdGVNZW1iZXJzQXBwbGljYXRpb25zTW9kdWxlJyB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ0VtcHR5IHJlc3BvbnNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodG1sID0gU3RyaW5nKHJlc3BvbnNlLmJvZHkgPz8gJycpO1xuXG4gICAgICAgIC8vIFBlcm1pc3Npb24gY2hlY2tcbiAgICAgICAgaWYgKGh0bWwuaW5jbHVkZXMoJ1dJS0lET1QucGFnZS5saXN0ZW5lcnMubG9naW5DbGljayhldmVudCknKSkge1xuICAgICAgICAgIHRocm93IG5ldyBGb3JiaWRkZW5FcnJvcignWW91IGFyZSBub3QgYWxsb3dlZCB0byBhY2Nlc3MgdGhpcyBwYWdlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpO1xuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbnM6IFNpdGVBcHBsaWNhdGlvbltdID0gW107XG5cbiAgICAgICAgY29uc3QgdXNlckVsZW1lbnRzID0gJCgnaDMgc3Bhbi5wcmludHVzZXInKS50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IHRleHRXcmFwcGVyRWxlbWVudHMgPSAkKCd0YWJsZScpLnRvQXJyYXkoKTtcblxuICAgICAgICBpZiAodXNlckVsZW1lbnRzLmxlbmd0aCAhPT0gdGV4dFdyYXBwZXJFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEVycm9yKFxuICAgICAgICAgICAgJ0xlbmd0aCBvZiB1c2VyX2VsZW1lbnRzIGFuZCB0ZXh0X3dyYXBwZXJfZWxlbWVudHMgYXJlIGRpZmZlcmVudCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1c2VyRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB1c2VyRWxlbWVudCA9IHVzZXJFbGVtZW50c1tpXTtcbiAgICAgICAgICBjb25zdCB0ZXh0V3JhcHBlckVsZW1lbnQgPSB0ZXh0V3JhcHBlckVsZW1lbnRzW2ldO1xuXG4gICAgICAgICAgaWYgKCF1c2VyRWxlbWVudCB8fCAhdGV4dFdyYXBwZXJFbGVtZW50KSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnN0IHVzZXIgPSBwYXJzZVVzZXIoc2l0ZS5jbGllbnQsICQodXNlckVsZW1lbnQpKTtcbiAgICAgICAgICBjb25zdCB0ZXh0RWxlbWVudCA9ICQodGV4dFdyYXBwZXJFbGVtZW50KS5maW5kKCd0ZCcpLmVxKDEpO1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB0ZXh0RWxlbWVudC50ZXh0KCkudHJpbSgpO1xuXG4gICAgICAgICAgYXBwbGljYXRpb25zLnB1c2gobmV3IFNpdGVBcHBsaWNhdGlvbih7IHNpdGUsIHVzZXIsIHRleHQgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFwcGxpY2F0aW9ucztcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRm9yYmlkZGVuRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgYXBwbGljYXRpb25zOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gcHJvY2VzcyBhcHBsaWNhdGlvblxuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICBwcml2YXRlIHByb2Nlc3MoYWN0aW9uOiAnYWNjZXB0JyB8ICdkZWNsaW5lJyk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ01hbmFnZVNpdGVNZW1iZXJzaGlwQWN0aW9uJyxcbiAgICAgICAgICAgIGV2ZW50OiAnYWNjZXB0QXBwbGljYXRpb24nLFxuICAgICAgICAgICAgdXNlcl9pZDogdGhpcy51c2VyLmlkLFxuICAgICAgICAgICAgdGV4dDogYHlvdXIgYXBwbGljYXRpb24gaGFzIGJlZW4gJHthY3Rpb259ZWRgLFxuICAgICAgICAgICAgdHlwZTogYWN0aW9uLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQuZXJyb3I7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgV2lraWRvdFN0YXR1c0Vycm9yICYmIGVycm9yLnN0YXR1c0NvZGUgPT09ICdub19hcHBsaWNhdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihgQXBwbGljYXRpb24gbm90IGZvdW5kOiAke3RoaXMudXNlci5uYW1lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbiB8fCBlcnJvciBpbnN0YW5jZW9mIExvZ2luUmVxdWlyZWRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgYXBwbGljYXRpb246ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdCBtZW1iZXJzaGlwIGFwcGxpY2F0aW9uXG4gICAqL1xuICBhY2NlcHQoKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCdhY2NlcHQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNsaW5lIG1lbWJlcnNoaXAgYXBwbGljYXRpb25cbiAgICovXG4gIGRlY2xpbmUoKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzKCdkZWNsaW5lJyk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgU2l0ZUFwcGxpY2F0aW9uKHVzZXI9JHt0aGlzLnVzZXIubmFtZX0sIHNpdGU9JHt0aGlzLnNpdGUudW5peE5hbWV9LCB0ZXh0PSR7dGhpcy50ZXh0fSlgO1xuICB9XG59XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgeyBSZXF1aXJlTG9naW4gfSBmcm9tICcuLi8uLi9jb21tb24vZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBMb2dpblJlcXVpcmVkRXJyb3IsXG4gIFRhcmdldEVycm9yLFxuICBVbmV4cGVjdGVkRXJyb3IsXG4gIFdpa2lkb3RTdGF0dXNFcnJvcixcbn0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VPZGF0ZSwgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHR5cGUgeyBBYnN0cmFjdFVzZXIgfSBmcm9tICcuLi91c2VyJztcbmltcG9ydCB0eXBlIHsgU2l0ZSB9IGZyb20gJy4vc2l0ZSc7XG5cbi8qKlxuICogU2l0ZSBtZW1iZXIgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpdGVNZW1iZXJEYXRhIHtcbiAgc2l0ZTogU2l0ZTtcbiAgdXNlcjogQWJzdHJhY3RVc2VyO1xuICBqb2luZWRBdDogRGF0ZSB8IG51bGw7XG59XG5cbi8qKlxuICogU2l0ZSBtZW1iZXJcbiAqL1xuZXhwb3J0IGNsYXNzIFNpdGVNZW1iZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcbiAgcHVibGljIHJlYWRvbmx5IHVzZXI6IEFic3RyYWN0VXNlcjtcbiAgcHVibGljIHJlYWRvbmx5IGpvaW5lZEF0OiBEYXRlIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTaXRlTWVtYmVyRGF0YSkge1xuICAgIHRoaXMuc2l0ZSA9IGRhdGEuc2l0ZTtcbiAgICB0aGlzLnVzZXIgPSBkYXRhLnVzZXI7XG4gICAgdGhpcy5qb2luZWRBdCA9IGRhdGEuam9pbmVkQXQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgbWVtYmVyIGluZm9ybWF0aW9uIGZyb20gSFRNTFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2Uoc2l0ZTogU2l0ZSwgaHRtbDogc3RyaW5nKTogU2l0ZU1lbWJlcltdIHtcbiAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpO1xuICAgIGNvbnN0IG1lbWJlcnM6IFNpdGVNZW1iZXJbXSA9IFtdO1xuXG4gICAgJCgndGFibGUgdHInKS5lYWNoKChfaSwgcm93KSA9PiB7XG4gICAgICBjb25zdCB0ZHMgPSAkKHJvdykuZmluZCgndGQnKTtcbiAgICAgIGNvbnN0IHVzZXJFbGVtID0gJCh0ZHNbMF0pLmZpbmQoJy5wcmludHVzZXInKTtcblxuICAgICAgaWYgKHVzZXJFbGVtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZXIgPSBwYXJzZVVzZXIoc2l0ZS5jbGllbnQsIHVzZXJFbGVtKTtcblxuICAgICAgLy8gU2Vjb25kIHRkIGNvbnRhaW5zIGpvaW4gZGF0ZSBpZiBleGlzdHNcbiAgICAgIGxldCBqb2luZWRBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHRkcy5sZW5ndGggPj0gMikge1xuICAgICAgICBjb25zdCBvZGF0ZUVsZW0gPSAkKHRkc1sxXSkuZmluZCgnLm9kYXRlJyk7XG4gICAgICAgIGlmIChvZGF0ZUVsZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGpvaW5lZEF0ID0gcGFyc2VPZGF0ZShvZGF0ZUVsZW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lbWJlcnMucHVzaChuZXcgU2l0ZU1lbWJlcih7IHNpdGUsIHVzZXIsIGpvaW5lZEF0IH0pKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZW1iZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzaXRlIG1lbWJlciBsaXN0XG4gICAqIEBwYXJhbSBzaXRlIC0gVGFyZ2V0IHNpdGVcbiAgICogQHBhcmFtIGdyb3VwIC0gR3JvdXAgKFwiYWRtaW5zXCIsIFwibW9kZXJhdG9yc1wiLCBvciBlbXB0eSBzdHJpbmcgZm9yIGFsbCBtZW1iZXJzKVxuICAgKi9cbiAgc3RhdGljIGdldE1lbWJlcnMoXG4gICAgc2l0ZTogU2l0ZSxcbiAgICBncm91cDogJ2FkbWlucycgfCAnbW9kZXJhdG9ycycgfCAnJyA9ICcnXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxTaXRlTWVtYmVyW10+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtZW1iZXJzOiBTaXRlTWVtYmVyW10gPSBbXTtcblxuICAgICAgICAvLyBHZXQgZmlyc3QgcGFnZVxuICAgICAgICBjb25zdCBmaXJzdFJlc3VsdCA9IGF3YWl0IHNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ21lbWJlcnNoaXAvTWVtYmVyc0xpc3RNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChmaXJzdFJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgZmlyc3RSZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdFJlc3BvbnNlID0gZmlyc3RSZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghZmlyc3RSZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ0VtcHR5IHJlc3BvbnNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEh0bWwgPSBTdHJpbmcoZmlyc3RSZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgbWVtYmVycy5wdXNoKC4uLlNpdGVNZW1iZXIucGFyc2Uoc2l0ZSwgZmlyc3RIdG1sKSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgcGFnZXJcbiAgICAgICAgY29uc3QgJGZpcnN0ID0gY2hlZXJpby5sb2FkKGZpcnN0SHRtbCk7XG4gICAgICAgIGNvbnN0IHBhZ2VyTGlua3MgPSAkZmlyc3QoJ2Rpdi5wYWdlciBhJyk7XG4gICAgICAgIGlmIChwYWdlckxpbmtzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gbWVtYmVycztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhc3RQYWdlVGV4dCA9ICRmaXJzdChwYWdlckxpbmtzW3BhZ2VyTGlua3MubGVuZ3RoIC0gMl0pXG4gICAgICAgICAgLnRleHQoKVxuICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTnVtYmVyLnBhcnNlSW50KGxhc3RQYWdlVGV4dCwgMTApIHx8IDE7XG4gICAgICAgIGlmIChsYXN0UGFnZSA8PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG1lbWJlcnM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgcmVtYWluaW5nIHBhZ2VzXG4gICAgICAgIGNvbnN0IGJvZGllcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBsYXN0UGFnZTsgcGFnZSsrKSB7XG4gICAgICAgICAgYm9kaWVzLnB1c2goe1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ21lbWJlcnNoaXAvTWVtYmVyc0xpc3RNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWRkaXRpb25hbFJlc3VsdHMgPSBhd2FpdCBzaXRlLmFtY1JlcXVlc3QoYm9kaWVzKTtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxSZXN1bHRzLmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyBhZGRpdGlvbmFsUmVzdWx0cy5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgYWRkaXRpb25hbFJlc3VsdHMudmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBodG1sID0gU3RyaW5nKHJlc3BvbnNlPy5ib2R5ID8/ICcnKTtcbiAgICAgICAgICBtZW1iZXJzLnB1c2goLi4uU2l0ZU1lbWJlci5wYXJzZShzaXRlLCBodG1sKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVtYmVycztcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgbWVtYmVyczogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gY2hhbmdlIGdyb3VwXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIHByaXZhdGUgY2hhbmdlR3JvdXAoXG4gICAgZXZlbnQ6ICd0b01vZGVyYXRvcnMnIHwgJ3JlbW92ZU1vZGVyYXRvcicgfCAndG9BZG1pbnMnIHwgJ3JlbW92ZUFkbWluJ1xuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdNYW5hZ2VTaXRlTWVtYmVyc2hpcEFjdGlvbicsXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIHVzZXJfaWQ6IHRoaXMudXNlci5pZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBXaWtpZG90U3RhdHVzRXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXNDb2RlID09PSAnbm90X2FscmVhZHknKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUYXJnZXRFcnJvcihgVXNlciBpcyBub3QgbW9kZXJhdG9yL2FkbWluOiAke3RoaXMudXNlci5uYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1c0NvZGUgPT09ICdhbHJlYWR5X2FkbWluJyB8fCBlcnJvci5zdGF0dXNDb2RlID09PSAnYWxyZWFkeV9tb2RlcmF0b3InKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUYXJnZXRFcnJvcihcbiAgICAgICAgICAgICAgICBgVXNlciBpcyBhbHJlYWR5ICR7ZXJyb3Iuc3RhdHVzQ29kZS5yZXBsYWNlKCdhbHJlYWR5XycsICcnKX06ICR7dGhpcy51c2VyLm5hbWV9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUYXJnZXRFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIExvZ2luUmVxdWlyZWRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGNoYW5nZSBtZW1iZXIgZ3JvdXA6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb21vdGUgdG8gbW9kZXJhdG9yXG4gICAqL1xuICB0b01vZGVyYXRvcigpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZUdyb3VwKCd0b01vZGVyYXRvcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgbW9kZXJhdG9yIHByaXZpbGVnZXNcbiAgICovXG4gIHJlbW92ZU1vZGVyYXRvcigpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmNoYW5nZUdyb3VwKCdyZW1vdmVNb2RlcmF0b3InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9tb3RlIHRvIGFkbWluXG4gICAqL1xuICB0b0FkbWluKCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlR3JvdXAoJ3RvQWRtaW5zJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFkbWluIHByaXZpbGVnZXNcbiAgICovXG4gIHJlbW92ZUFkbWluKCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlR3JvdXAoJ3JlbW92ZUFkbWluJyk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgU2l0ZU1lbWJlcih1c2VyPSR7dGhpcy51c2VyLm5hbWV9LCBzaXRlPSR7dGhpcy5zaXRlLnVuaXhOYW1lfSlgO1xuICB9XG59XG4iLAogICAgImltcG9ydCB7IE5vRWxlbWVudEVycm9yLCBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi91dGlsL3BhcnNlcic7XG5pbXBvcnQgeyBQYWdlLCBQYWdlQ29sbGVjdGlvbiwgU2VhcmNoUGFnZXNRdWVyeSB9IGZyb20gJy4uLy4uL3BhZ2UnO1xuaW1wb3J0IHR5cGUgeyBTaXRlIH0gZnJvbSAnLi4vc2l0ZSc7XG5cbi8qKlxuICogU2luZ2xlIHBhZ2Ugb3BlcmF0aW9ucyBhY2Nlc3NvclxuICovXG5leHBvcnQgY2xhc3MgUGFnZUFjY2Vzc29yIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG5cbiAgY29uc3RydWN0b3Ioc2l0ZTogU2l0ZSkge1xuICAgIHRoaXMuc2l0ZSA9IHNpdGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhZ2UgYnkgVU5JWCBuYW1lXG4gICAqIEBwYXJhbSB1bml4TmFtZSAtIFBhZ2UgVU5JWCBuYW1lIChlLmcuLCAnc2NwLTE3MycpXG4gICAqIEByZXR1cm5zIFBhZ2UgKG51bGwgaWYgbm90IGZvdW5kKVxuICAgKi9cbiAgZ2V0KHVuaXhOYW1lOiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZSB8IG51bGw+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBTZWFyY2hQYWdlc1F1ZXJ5KHsgZnVsbG5hbWU6IHVuaXhOYW1lIH0pO1xuICAgICAgICBjb25zdCB1c2VyUGFyc2VyID0gcGFyc2VVc2VyLmJpbmQobnVsbCwgdGhpcy5zaXRlLmNsaWVudCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUGFnZUNvbGxlY3Rpb24uc2VhcmNoUGFnZXModGhpcy5zaXRlLCB1c2VyUGFyc2VyLCBxdWVyeSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQudmFsdWUubGVuZ3RoID4gMCA/IChyZXN1bHQudmFsdWVbMF0gPz8gbnVsbCkgOiBudWxsO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCBwYWdlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwYWdlXG4gICAqIEBwYXJhbSBmdWxsbmFtZSAtIFBhZ2UgZnVsbG5hbWUgKGUuZy4sICdzY3AtMTczJylcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDcmVhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIGNyZWF0ZShcbiAgICBmdWxsbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHRpdGxlPzogc3RyaW5nO1xuICAgICAgc291cmNlPzogc3RyaW5nO1xuICAgICAgY29tbWVudD86IHN0cmluZztcbiAgICAgIGZvcmNlRWRpdD86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIFBhZ2VDb2xsZWN0aW9uLmNyZWF0ZU9yRWRpdCh0aGlzLnNpdGUsIGZ1bGxuYW1lLCB7XG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICAgIHNvdXJjZTogb3B0aW9ucy5zb3VyY2UsXG4gICAgICBjb21tZW50OiBvcHRpb25zLmNvbW1lbnQsXG4gICAgICBmb3JjZUVkaXQ6IG9wdGlvbnMuZm9yY2VFZGl0LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IFBhZ2UgfTtcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDaGVlcmlvIH0gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgKiBhcyBjaGVlcmlvIGZyb20gJ2NoZWVyaW8nO1xuaW1wb3J0IHR5cGUgeyBBbnlOb2RlIH0gZnJvbSAnZG9taGFuZGxlcic7XG5pbXBvcnQgcExpbWl0IGZyb20gJ3AtbGltaXQnO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBSZXF1aXJlTG9naW4gfSBmcm9tICcuLi8uLi9jb21tb24vZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBGb3JiaWRkZW5FcnJvcixcbiAgTG9naW5SZXF1aXJlZEVycm9yLFxuICBOb0VsZW1lbnRFcnJvcixcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFRhcmdldEV4aXN0c0Vycm9yLFxuICBVbmV4cGVjdGVkRXJyb3IsXG59IGZyb20gJy4uLy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQU1DUmVxdWVzdEJvZHkgfSBmcm9tICcuLi8uLi9jb25uZWN0b3InO1xuaW1wb3J0IHsgcGFyc2VPZGF0ZSwgcGFyc2VVc2VyIH0gZnJvbSAnLi4vLi4vdXRpbC9wYXJzZXInO1xuaW1wb3J0IHR5cGUgeyBTaXRlIH0gZnJvbSAnLi4vc2l0ZSc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciB9IGZyb20gJy4uL3VzZXInO1xuaW1wb3J0IHsgUGFnZUZpbGVDb2xsZWN0aW9uIH0gZnJvbSAnLi9wYWdlLWZpbGUnO1xuaW1wb3J0IHsgUGFnZU1ldGFDb2xsZWN0aW9uIH0gZnJvbSAnLi9wYWdlLW1ldGEnO1xuaW1wb3J0IHsgUGFnZVJldmlzaW9uLCBQYWdlUmV2aXNpb25Db2xsZWN0aW9uIH0gZnJvbSAnLi9wYWdlLXJldmlzaW9uJztcbmltcG9ydCB7IFBhZ2VTb3VyY2UgfSBmcm9tICcuL3BhZ2Utc291cmNlJztcbmltcG9ydCB7IFBhZ2VWb3RlLCBQYWdlVm90ZUNvbGxlY3Rpb24gfSBmcm9tICcuL3BhZ2Utdm90ZSc7XG5pbXBvcnQgeyBERUZBVUxUX01PRFVMRV9CT0RZLCBERUZBVUxUX1BFUl9QQUdFLCBTZWFyY2hQYWdlc1F1ZXJ5IH0gZnJvbSAnLi9zZWFyY2gtcXVlcnknO1xuXG4vKipcbiAqIFNjaGVtYSBmb3IgTGlzdFBhZ2VzTW9kdWxlIHBhcnNlIHJlc3VsdFxuICogVXNlcyBab2QgZm9yIHR5cGUtc2FmZSB2YWxpZGF0aW9uIG9mIHBhcnNlIHJlc3VsdHNcbiAqL1xuY29uc3QgcGFnZVBhcmFtc1NjaGVtYSA9IHoub2JqZWN0KHtcbiAgZnVsbG5hbWU6IHoucHJlcHJvY2VzcygodikgPT4gdiA/PyAnJywgei5zdHJpbmcoKSksXG4gIG5hbWU6IHoucHJlcHJvY2VzcygodikgPT4gdiA/PyAnJywgei5zdHJpbmcoKSksXG4gIGNhdGVnb3J5OiB6LnByZXByb2Nlc3MoKHYpID0+IHYgPz8gJycsIHouc3RyaW5nKCkpLFxuICB0aXRsZTogei5wcmVwcm9jZXNzKCh2KSA9PiB2ID8/ICcnLCB6LnN0cmluZygpKSxcbiAgY2hpbGRyZW5fY291bnQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMCksXG4gIGNvbW1lbnRzX2NvdW50OiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICBzaXplOiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICByYXRpbmc6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMCksXG4gIHZvdGVzX2NvdW50OiB6LmNvZXJjZS5udW1iZXIoKS5kZWZhdWx0KDApLFxuICByYXRpbmdfcGVyY2VudDogei5jb2VyY2UubnVtYmVyKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICByZXZpc2lvbnNfY291bnQ6IHouY29lcmNlLm51bWJlcigpLmRlZmF1bHQoMCksXG4gIHBhcmVudF9mdWxsbmFtZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIHRhZ3M6IHouYXJyYXkoei5zdHJpbmcoKSkuZGVmYXVsdChbXSksXG4gIGNyZWF0ZWRfYnk6IHouY3VzdG9tPEFic3RyYWN0VXNlcj4oKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgdXBkYXRlZF9ieTogei5jdXN0b208QWJzdHJhY3RVc2VyPigpLm51bGxhYmxlKCkuZGVmYXVsdChudWxsKSxcbiAgdXBkYXRlZF9hdDogei5kYXRlKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxuICBjb21tZW50ZWRfYnk6IHouY3VzdG9tPEFic3RyYWN0VXNlcj4oKS5udWxsYWJsZSgpLmRlZmF1bHQobnVsbCksXG4gIGNvbW1lbnRlZF9hdDogei5kYXRlKCkubnVsbGFibGUoKS5kZWZhdWx0KG51bGwpLFxufSk7XG5cbi8qKlxuICogUGFnZSBkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZURhdGEge1xuICBzaXRlOiBTaXRlO1xuICBmdWxsbmFtZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGNoaWxkcmVuQ291bnQ6IG51bWJlcjtcbiAgY29tbWVudHNDb3VudDogbnVtYmVyO1xuICBzaXplOiBudW1iZXI7XG4gIHJhdGluZzogbnVtYmVyO1xuICB2b3Rlc0NvdW50OiBudW1iZXI7XG4gIHJhdGluZ1BlcmNlbnQ6IG51bWJlciB8IG51bGw7XG4gIHJldmlzaW9uc0NvdW50OiBudW1iZXI7XG4gIHBhcmVudEZ1bGxuYW1lOiBzdHJpbmcgfCBudWxsO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgY3JlYXRlZEJ5OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHVwZGF0ZWRCeTogQWJzdHJhY3RVc2VyIHwgbnVsbDtcbiAgdXBkYXRlZEF0OiBEYXRlO1xuICBjb21tZW50ZWRCeTogQWJzdHJhY3RVc2VyIHwgbnVsbDtcbiAgY29tbWVudGVkQXQ6IERhdGUgfCBudWxsO1xufVxuXG4vKipcbiAqIFdpa2lkb3QgcGFnZVxuICovXG5leHBvcnQgY2xhc3MgUGFnZSB7XG4gIHB1YmxpYyByZWFkb25seSBzaXRlOiBTaXRlO1xuICBwdWJsaWMgcmVhZG9ubHkgZnVsbG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNhdGVnb3J5OiBzdHJpbmc7XG4gIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuICBwdWJsaWMgY2hpbGRyZW5Db3VudDogbnVtYmVyO1xuICBwdWJsaWMgY29tbWVudHNDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgc2l6ZTogbnVtYmVyO1xuICBwdWJsaWMgcmF0aW5nOiBudW1iZXI7XG4gIHB1YmxpYyB2b3Rlc0NvdW50OiBudW1iZXI7XG4gIHB1YmxpYyByYXRpbmdQZXJjZW50OiBudW1iZXIgfCBudWxsO1xuICBwdWJsaWMgcmV2aXNpb25zQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIHBhcmVudEZ1bGxuYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgdGFnczogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQnk6IEFic3RyYWN0VXNlciB8IG51bGw7XG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ6IERhdGU7XG4gIHB1YmxpYyB1cGRhdGVkQnk6IEFic3RyYWN0VXNlciB8IG51bGw7XG4gIHB1YmxpYyB1cGRhdGVkQXQ6IERhdGU7XG4gIHB1YmxpYyBjb21tZW50ZWRCeTogQWJzdHJhY3RVc2VyIHwgbnVsbDtcbiAgcHVibGljIGNvbW1lbnRlZEF0OiBEYXRlIHwgbnVsbDtcblxuICBwcml2YXRlIF9pZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3NvdXJjZTogUGFnZVNvdXJjZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9yZXZpc2lvbnM6IFBhZ2VSZXZpc2lvbkNvbGxlY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfdm90ZXM6IFBhZ2VWb3RlQ29sbGVjdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFBhZ2VEYXRhKSB7XG4gICAgdGhpcy5zaXRlID0gZGF0YS5zaXRlO1xuICAgIHRoaXMuZnVsbG5hbWUgPSBkYXRhLmZ1bGxuYW1lO1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLmNhdGVnb3J5ID0gZGF0YS5jYXRlZ29yeTtcbiAgICB0aGlzLnRpdGxlID0gZGF0YS50aXRsZTtcbiAgICB0aGlzLmNoaWxkcmVuQ291bnQgPSBkYXRhLmNoaWxkcmVuQ291bnQ7XG4gICAgdGhpcy5jb21tZW50c0NvdW50ID0gZGF0YS5jb21tZW50c0NvdW50O1xuICAgIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgICB0aGlzLnJhdGluZyA9IGRhdGEucmF0aW5nO1xuICAgIHRoaXMudm90ZXNDb3VudCA9IGRhdGEudm90ZXNDb3VudDtcbiAgICB0aGlzLnJhdGluZ1BlcmNlbnQgPSBkYXRhLnJhdGluZ1BlcmNlbnQ7XG4gICAgdGhpcy5yZXZpc2lvbnNDb3VudCA9IGRhdGEucmV2aXNpb25zQ291bnQ7XG4gICAgdGhpcy5wYXJlbnRGdWxsbmFtZSA9IGRhdGEucGFyZW50RnVsbG5hbWU7XG4gICAgdGhpcy50YWdzID0gZGF0YS50YWdzO1xuICAgIHRoaXMuY3JlYXRlZEJ5ID0gZGF0YS5jcmVhdGVkQnk7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBkYXRhLmNyZWF0ZWRBdDtcbiAgICB0aGlzLnVwZGF0ZWRCeSA9IGRhdGEudXBkYXRlZEJ5O1xuICAgIHRoaXMudXBkYXRlZEF0ID0gZGF0YS51cGRhdGVkQXQ7XG4gICAgdGhpcy5jb21tZW50ZWRCeSA9IGRhdGEuY29tbWVudGVkQnk7XG4gICAgdGhpcy5jb21tZW50ZWRBdCA9IGRhdGEuY29tbWVudGVkQXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhZ2UgVVJMXG4gICAqL1xuICBnZXRVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zaXRlLmdldEJhc2VVcmwoKX0vJHt0aGlzLmZ1bGxuYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBwYWdlIElEIGhhcyBiZWVuIGFjcXVpcmVkXG4gICAqL1xuICBpc0lkQWNxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lkICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwYWdlIElEXG4gICAqL1xuICBnZXQgaWQoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBwYWdlIElEXG4gICAqL1xuICBzZXQgaWQodmFsdWU6IG51bWJlciB8IG51bGwpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3VyY2UgY29kZVxuICAgKi9cbiAgZ2V0IHNvdXJjZSgpOiBQYWdlU291cmNlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgc291cmNlIGNvZGVcbiAgICovXG4gIHNldCBzb3VyY2UodmFsdWU6IFBhZ2VTb3VyY2UgfCBudWxsKSB7XG4gICAgdGhpcy5fc291cmNlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJldmlzaW9uIGhpc3RvcnlcbiAgICovXG4gIGdldCByZXZpc2lvbnMoKTogUGFnZVJldmlzaW9uQ29sbGVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9yZXZpc2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHJldmlzaW9uIGhpc3RvcnlcbiAgICovXG4gIHNldCByZXZpc2lvbnModmFsdWU6IFBhZ2VSZXZpc2lvbkNvbGxlY3Rpb24gfCBudWxsKSB7XG4gICAgdGhpcy5fcmV2aXNpb25zID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZvdGUgaW5mb3JtYXRpb25cbiAgICovXG4gIGdldCB2b3RlcygpOiBQYWdlVm90ZUNvbGxlY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdm90ZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHZvdGUgaW5mb3JtYXRpb25cbiAgICovXG4gIHNldCB2b3Rlcyh2YWx1ZTogUGFnZVZvdGVDb2xsZWN0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZvdGVzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxhdGVzdCByZXZpc2lvblxuICAgKi9cbiAgZ2V0IGxhdGVzdFJldmlzaW9uKCk6IFBhZ2VSZXZpc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9yZXZpc2lvbnMgfHwgdGhpcy5fcmV2aXNpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5fcmV2aXNpb25zLnJlZHVjZSgobWF4LCByZXYpID0+IChyZXYucmV2Tm8gPiBtYXgucmV2Tm8gPyByZXYgOiBtYXgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgcGFnZSBJRCBpcyBhdmFpbGFibGUgKGF1dG8tYWNxdWlyZSBpZiBub3QgeWV0IGFjcXVpcmVkKVxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gT3BlcmF0aW9uIG5hbWUgKGZvciBlcnJvciBtZXNzYWdlKVxuICAgKiBAdGhyb3dzIElmIElEIGFjcXVpc2l0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUlkKG9wZXJhdGlvbjogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAodGhpcy5faWQgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlSWRzKHRoaXMuc2l0ZSwgW3RoaXNdKTtcbiAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gYWNxdWlyZSBwYWdlIElEIGZvciAke29wZXJhdGlvbn06ICR7cmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5faWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoYFBhZ2UgSUQgYWNxdWlzaXRpb24gZmFpbGVkIGZvciAke29wZXJhdGlvbn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBwYWdlXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGRlc3Ryb3koKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlSWQgPSBhd2FpdCB0aGlzLmVuc3VyZUlkKCdkZWxldGlvbicpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnV2lraVBhZ2VBY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdkZWxldGVQYWdlJyxcbiAgICAgICAgICAgIHBhZ2VfaWQ6IHBhZ2VJZCxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdFbXB0eScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBwYWdlOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGFnc1xuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICBjb21taXRUYWdzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZUlkID0gYXdhaXQgdGhpcy5lbnN1cmVJZCgnc2F2aW5nIHRhZ3MnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRhZ3M6IHRoaXMudGFncy5qb2luKCcgJyksXG4gICAgICAgICAgICBhY3Rpb246ICdXaWtpUGFnZUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ3NhdmVUYWdzJyxcbiAgICAgICAgICAgIHBhZ2VJZDogcGFnZUlkLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gc2F2ZSB0YWdzOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBwYXJlbnQgcGFnZVxuICAgKiBAcGFyYW0gcGFyZW50RnVsbG5hbWUgLSBQYXJlbnQgcGFnZSBmdWxsbmFtZSAobnVsbCB0byByZW1vdmUpXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIHNldFBhcmVudChwYXJlbnRGdWxsbmFtZTogc3RyaW5nIHwgbnVsbCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZUlkID0gYXdhaXQgdGhpcy5lbnN1cmVJZCgnc2V0dGluZyBwYXJlbnQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ1dpa2lQYWdlQWN0aW9uJyxcbiAgICAgICAgICAgIGV2ZW50OiAnc2V0UGFyZW50UGFnZScsXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgICAgcGFnZUlkOiBTdHJpbmcocGFnZUlkKSxcbiAgICAgICAgICAgIHBhcmVudE5hbWU6IHBhcmVudEZ1bGxuYW1lID8/ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJlbnRGdWxsbmFtZSA9IHBhcmVudEZ1bGxuYW1lO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIHNldCBwYXJlbnQ6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVm90ZSBvbiBwYWdlXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZvdGUgdmFsdWVcbiAgICogQHJldHVybnMgTmV3IHJhdGluZ1xuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICB2b3RlKHZhbHVlOiBudW1iZXIpOiBXaWtpZG90UmVzdWx0QXN5bmM8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZUlkID0gYXdhaXQgdGhpcy5lbnN1cmVJZCgndm90aW5nJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdSYXRlQWN0aW9uJyxcbiAgICAgICAgICAgIGV2ZW50OiAncmF0ZVBhZ2UnLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ0VtcHR5JyxcbiAgICAgICAgICAgIHBhZ2VJZDogcGFnZUlkLFxuICAgICAgICAgICAgcG9pbnRzOiB2YWx1ZSxcbiAgICAgICAgICAgIGZvcmNlOiAneWVzJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcignRW1wdHkgcmVzcG9uc2UgZnJvbSB2b3RlIHJlcXVlc3QnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdSYXRpbmcgPSBOdW1iZXIucGFyc2VJbnQoU3RyaW5nKHJlc3BvbnNlLnBvaW50cyA/PyB0aGlzLnJhdGluZyksIDEwKTtcbiAgICAgICAgdGhpcy5yYXRpbmcgPSBuZXdSYXRpbmc7XG4gICAgICAgIHJldHVybiBuZXdSYXRpbmc7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gdm90ZTogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgdm90ZVxuICAgKiBAcmV0dXJucyBOZXcgcmF0aW5nXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGNhbmNlbFZvdGUoKTogV2lraWRvdFJlc3VsdEFzeW5jPG51bWJlcj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VJZCA9IGF3YWl0IHRoaXMuZW5zdXJlSWQoJ2NhbmNlbGluZyB2b3RlJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdSYXRlQWN0aW9uJyxcbiAgICAgICAgICAgIGV2ZW50OiAnY2FuY2VsVm90ZScsXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgICAgcGFnZUlkOiBwYWdlSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ0VtcHR5IHJlc3BvbnNlIGZyb20gY2FuY2VsIHZvdGUgcmVxdWVzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1JhdGluZyA9IE51bWJlci5wYXJzZUludChTdHJpbmcocmVzcG9uc2UucG9pbnRzID8/IHRoaXMucmF0aW5nKSwgMTApO1xuICAgICAgICB0aGlzLnJhdGluZyA9IG5ld1JhdGluZztcbiAgICAgICAgcmV0dXJuIG5ld1JhdGluZztcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBjYW5jZWwgdm90ZTogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IHRoZSBwYWdlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gRWRpdCBvcHRpb25zXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIGVkaXQob3B0aW9uczoge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICBjb21tZW50Pzogc3RyaW5nO1xuICAgIGZvcmNlRWRpdD86IGJvb2xlYW47XG4gIH0pOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2VJZCA9IGF3YWl0IHRoaXMuZW5zdXJlSWQoJ2VkaXRpbmcnKTtcblxuICAgICAgICAvLyBHZXQgY3VycmVudCBzb3VyY2UgKGlmIG5vdCBzcGVjaWZpZWQpXG4gICAgICAgIGxldCBjdXJyZW50U291cmNlID0gb3B0aW9ucy5zb3VyY2U7XG4gICAgICAgIGlmIChjdXJyZW50U291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ1NvdXJjZSA9IHRoaXMuX3NvdXJjZTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdTb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UgPSBleGlzdGluZ1NvdXJjZS53aWtpVGV4dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQWNxdWlyZSBzb3VyY2VcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVJlc3VsdCA9IGF3YWl0IFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlU291cmNlcyh0aGlzLnNpdGUsIFt0aGlzXSk7XG4gICAgICAgICAgICBpZiAoc291cmNlUmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgc291cmNlUmVzdWx0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWZ0ZXIgYWNxdWlyZVBhZ2VTb3VyY2VzLCB0aGlzLl9zb3VyY2UgaXMgc2V0XG4gICAgICAgICAgICBjdXJyZW50U291cmNlID0gdGhpcy5fc291cmNlPy53aWtpVGV4dCA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQYWdlQ29sbGVjdGlvbi5jcmVhdGVPckVkaXQodGhpcy5zaXRlLCB0aGlzLmZ1bGxuYW1lLCB7XG4gICAgICAgICAgcGFnZUlkLFxuICAgICAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlID8/IHRoaXMudGl0bGUsXG4gICAgICAgICAgc291cmNlOiBjdXJyZW50U291cmNlLFxuICAgICAgICAgIGNvbW1lbnQ6IG9wdGlvbnMuY29tbWVudCA/PyAnJyxcbiAgICAgICAgICBmb3JjZUVkaXQ6IG9wdGlvbnMuZm9yY2VFZGl0ID8/IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIExvZ2luUmVxdWlyZWRFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEZvcmJpZGRlbkVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZWRpdCBwYWdlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5hbWUgdGhlIHBhZ2VcbiAgICogQHBhcmFtIG5ld0Z1bGxuYW1lIC0gTmV3IGZ1bGxuYW1lXG4gICAqL1xuICBAUmVxdWlyZUxvZ2luXG4gIHJlbmFtZShuZXdGdWxsbmFtZTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlSWQgPSBhd2FpdCB0aGlzLmVuc3VyZUlkKCdyZW5hbWluZycpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnV2lraVBhZ2VBY3Rpb24nLFxuICAgICAgICAgICAgZXZlbnQ6ICdyZW5hbWVQYWdlJyxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdFbXB0eScsXG4gICAgICAgICAgICBwYWdlX2lkOiBwYWdlSWQsXG4gICAgICAgICAgICBuZXdfbmFtZTogbmV3RnVsbG5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllcyAodXNpbmcgT2JqZWN0LmFzc2lnbiBzaW5jZSByZWFkb25seSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7XG4gICAgICAgICAgZnVsbG5hbWU6IG5ld0Z1bGxuYW1lLFxuICAgICAgICAgIGNhdGVnb3J5OiBuZXdGdWxsbmFtZS5pbmNsdWRlcygnOicpID8gbmV3RnVsbG5hbWUuc3BsaXQoJzonKVswXSA6ICdfZGVmYXVsdCcsXG4gICAgICAgICAgbmFtZTogbmV3RnVsbG5hbWUuaW5jbHVkZXMoJzonKSA/IG5ld0Z1bGxuYW1lLnNwbGl0KCc6JylbMV0gOiBuZXdGdWxsbmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gcmVuYW1lIHBhZ2U6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxpc3Qgb2YgZmlsZXMgYXR0YWNoZWQgdG8gdGhlIHBhZ2VcbiAgICovXG4gIGdldEZpbGVzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlRmlsZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gUGFnZUZpbGVDb2xsZWN0aW9uLmFjcXVpcmUodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkaXNjdXNzaW9uIHRocmVhZCBmb3IgdGhlIHBhZ2VcbiAgICovXG4gIGdldERpc2N1c3Npb24oKTogV2lraWRvdFJlc3VsdEFzeW5jPGltcG9ydCgnLi4vZm9ydW0nKS5Gb3J1bVRocmVhZCB8IG51bGw+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdlSWQgPSBhd2FpdCB0aGlzLmVuc3VyZUlkKCdnZXR0aW5nIGRpc2N1c3Npb24nKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2ZvcnVtL0ZvcnVtQ29tbWVudHNMaXN0TW9kdWxlJyxcbiAgICAgICAgICAgIHBhZ2VJZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgLy8gRXh0cmFjdCB0aHJlYWQgSURcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBodG1sLm1hdGNoKFxuICAgICAgICAgIC9XSUtJRE9UXFwubW9kdWxlc1xcLkZvcnVtVmlld1RocmVhZE1vZHVsZVxcLnZhcnNcXC50aHJlYWRJZFxccyo9XFxzKihcXGQrKS9cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtYXRjaD8uWzFdKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aHJlYWRJZCA9IE51bWJlci5wYXJzZUludChtYXRjaFsxXSwgMTApO1xuXG4gICAgICAgIC8vIEdldCBGb3J1bVRocmVhZFxuICAgICAgICBjb25zdCB7IEZvcnVtVGhyZWFkIH0gPSBhd2FpdCBpbXBvcnQoJy4uL2ZvcnVtJyk7XG4gICAgICAgIGNvbnN0IHRocmVhZFJlc3VsdCA9IGF3YWl0IEZvcnVtVGhyZWFkLmdldEZyb21JZCh0aGlzLnNpdGUsIHRocmVhZElkKTtcbiAgICAgICAgaWYgKHRocmVhZFJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgdGhyZWFkUmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJlYWRSZXN1bHQudmFsdWU7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IGRpc2N1c3Npb246ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IG9mIG1ldGEgdGFncyBmb3IgdGhlIHBhZ2VcbiAgICogQHJldHVybnMgTWV0YSB0YWcgY29sbGVjdGlvblxuICAgKi9cbiAgZ2V0TWV0YXMoKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VNZXRhQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlSWQoJ2dldHRpbmcgbWV0YXMnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUGFnZU1ldGFDb2xsZWN0aW9uLmFjcXVpcmUodGhpcyk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCBtZXRhczogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBtZXRhIHRhZ1xuICAgKiBAcGFyYW0gbmFtZSAtIE1ldGEgdGFnIG5hbWVcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBNZXRhIHRhZyB2YWx1ZVxuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICBzZXRNZXRhKG5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUlkKCdzZXR0aW5nIG1ldGEnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUGFnZU1ldGFDb2xsZWN0aW9uLnNldE1ldGEodGhpcywgbmFtZSwgY29udGVudCk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIHNldCBtZXRhOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIG1ldGEgdGFnXG4gICAqIEBwYXJhbSBuYW1lIC0gTWV0YSB0YWcgbmFtZVxuICAgKi9cbiAgQFJlcXVpcmVMb2dpblxuICBkZWxldGVNZXRhKG5hbWU6IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVJZCgnZGVsZXRpbmcgbWV0YScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQYWdlTWV0YUNvbGxlY3Rpb24uZGVsZXRlTWV0YSh0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIG1ldGE6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhZ2Ugc291cmNlIChhdXRvLWFjcXVpcmUgaWYgbm90IHlldCBhY3F1aXJlZClcbiAgICogQHJldHVybnMgUGFnZSBzb3VyY2VcbiAgICovXG4gIGdldFNvdXJjZSgpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZVNvdXJjZT4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UgPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQYWdlQ29sbGVjdGlvbi5hY3F1aXJlUGFnZUlkcyh0aGlzLnNpdGUsIFt0aGlzXSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNvdXJjZVJlc3VsdCA9IGF3YWl0IFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlU291cmNlcyh0aGlzLnNpdGUsIFt0aGlzXSk7XG4gICAgICAgICAgaWYgKHNvdXJjZVJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgICB0aHJvdyBzb3VyY2VSZXN1bHQuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oJ0Nhbm5vdCBmaW5kIHBhZ2Ugc291cmNlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24pIHJldHVybiBlcnJvcjtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgc291cmNlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmV2aXNpb24gaGlzdG9yeSAoYXV0by1hY3F1aXJlIGlmIG5vdCB5ZXQgYWNxdWlyZWQpXG4gICAqIEByZXR1cm5zIFJldmlzaW9uIGNvbGxlY3Rpb25cbiAgICovXG4gIGdldFJldmlzaW9ucygpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZVJldmlzaW9uQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9yZXZpc2lvbnMgPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQYWdlQ29sbGVjdGlvbi5hY3F1aXJlUGFnZUlkcyh0aGlzLnNpdGUsIFt0aGlzXSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJldlJlc3VsdCA9IGF3YWl0IFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlUmV2aXNpb25zKHRoaXMuc2l0ZSwgW3RoaXNdKTtcbiAgICAgICAgICBpZiAocmV2UmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgIHRocm93IHJldlJlc3VsdC5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JldmlzaW9ucyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbignQ2Fubm90IGZpbmQgcGFnZSByZXZpc2lvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmV2aXNpb25zO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCByZXZpc2lvbnM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB2b3RlIGluZm9ybWF0aW9uIChhdXRvLWFjcXVpcmUgaWYgbm90IHlldCBhY3F1aXJlZClcbiAgICogQHJldHVybnMgVm90ZSBjb2xsZWN0aW9uXG4gICAqL1xuICBnZXRWb3RlcygpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZVZvdGVDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3ZvdGVzID09PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUGFnZUNvbGxlY3Rpb24uYWNxdWlyZVBhZ2VJZHModGhpcy5zaXRlLCBbdGhpc10pO1xuICAgICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2b3Rlc1Jlc3VsdCA9IGF3YWl0IFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlVm90ZXModGhpcy5zaXRlLCBbdGhpc10pO1xuICAgICAgICAgIGlmICh2b3Rlc1Jlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgICB0aHJvdyB2b3Rlc1Jlc3VsdC5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3ZvdGVzID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCdDYW5ub3QgZmluZCBwYWdlIHZvdGVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZvdGVzO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCB2b3RlczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgUGFnZShmdWxsbmFtZT0ke3RoaXMuZnVsbG5hbWV9LCB0aXRsZT0ke3RoaXMudGl0bGV9KWA7XG4gIH1cbn1cblxuLyoqXG4gKiBQYWdlIGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8UGFnZT4ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcblxuICBjb25zdHJ1Y3RvcihzaXRlOiBTaXRlLCBwYWdlcz86IFBhZ2VbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zaXRlID0gc2l0ZTtcbiAgICBpZiAocGFnZXMpIHtcbiAgICAgIHRoaXMucHVzaCguLi5wYWdlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgZnVsbG5hbWVcbiAgICogQHBhcmFtIGZ1bGxuYW1lIC0gUGFnZSBmdWxsbmFtZVxuICAgKiBAcmV0dXJucyBQYWdlICh1bmRlZmluZWQgaWYgbm90IGZvdW5kKVxuICAgKi9cbiAgZmluZEJ5RnVsbG5hbWUoZnVsbG5hbWU6IHN0cmluZyk6IFBhZ2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbmQoKHBhZ2UpID0+IHBhZ2UuZnVsbG5hbWUgPT09IGZ1bGxuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3F1aXJlIHBhZ2UgSURzIGluIGJ1bGtcbiAgICovXG4gIGdldFBhZ2VJZHMoKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlSWRzKHRoaXMuc2l0ZSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQWNxdWlyZSBwYWdlIHNvdXJjZXMgaW4gYnVsa1xuICAgKi9cbiAgZ2V0UGFnZVNvdXJjZXMoKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIFBhZ2VDb2xsZWN0aW9uLmFjcXVpcmVQYWdlU291cmNlcyh0aGlzLnNpdGUsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjcXVpcmUgcGFnZSByZXZpc2lvbnMgaW4gYnVsa1xuICAgKi9cbiAgZ2V0UGFnZVJldmlzaW9ucygpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gUGFnZUNvbGxlY3Rpb24uYWNxdWlyZVBhZ2VSZXZpc2lvbnModGhpcy5zaXRlLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3F1aXJlIHBhZ2Ugdm90ZXMgaW4gYnVsa1xuICAgKi9cbiAgZ2V0UGFnZVZvdGVzKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBQYWdlQ29sbGVjdGlvbi5hY3F1aXJlUGFnZVZvdGVzKHRoaXMuc2l0ZSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgbWV0aG9kIHRvIGFjcXVpcmUgcGFnZSBJRHMgaW4gYnVsa1xuICAgKi9cbiAgc3RhdGljIGFjcXVpcmVQYWdlSWRzKHNpdGU6IFNpdGUsIHBhZ2VzOiBQYWdlW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRQYWdlcyA9IHBhZ2VzLmZpbHRlcigocGFnZSkgPT4gIXBhZ2UuaXNJZEFjcXVpcmVkKCkpO1xuXG4gICAgICAgIGlmICh0YXJnZXRQYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VDb2xsZWN0aW9uKHNpdGUsIHBhZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpbWl0IGNvbmN1cnJlbnQgY29ubmVjdGlvbnMgKHVzaW5nIHNhbWUgc2VtYXBob3JlTGltaXQgYXMgQU1DQ2xpZW50KVxuICAgICAgICBjb25zdCBsaW1pdCA9IHBMaW1pdChzaXRlLmNsaWVudC5hbWNDbGllbnQuY29uZmlnLnNlbWFwaG9yZUxpbWl0KTtcblxuICAgICAgICAvLyBBY2Nlc3Mgd2l0aCBub3JlbmRlciwgbm9yZWRpcmVjdFxuICAgICAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICB0YXJnZXRQYWdlcy5tYXAoKHBhZ2UpID0+XG4gICAgICAgICAgICBsaW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke3BhZ2UuZ2V0VXJsKCl9L25vcmVuZGVyL3RydWUvbm9yZWRpcmVjdC90cnVlYDtcbiAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBzaXRlLmNsaWVudC5hbWNDbGllbnQuaGVhZGVyLmdldEhlYWRlcnMoKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB7IHBhZ2UsIHJlc3BvbnNlIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHsgcGFnZSwgcmVzcG9uc2UgfSBvZiByZXNwb25zZXMpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGV4dC5tYXRjaCgvV0lLSVJFUVVFU1RcXC5pbmZvXFwucGFnZUlkXFxzKj1cXHMqKFxcZCspOy8pO1xuICAgICAgICAgIGlmICghbWF0Y2g/LlsxXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKGBDYW5ub3QgZmluZCBwYWdlIGlkOiAke3BhZ2UuZnVsbG5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2UuaWQgPSBOdW1iZXIucGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUGFnZUNvbGxlY3Rpb24oc2l0ZSwgcGFnZXMpO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGFjcXVpcmUgcGFnZSBJRHM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBhY3F1aXJlIHBhZ2Ugc291cmNlcyBpbiBidWxrXG4gICAqL1xuICBzdGF0aWMgYWNxdWlyZVBhZ2VTb3VyY2VzKHNpdGU6IFNpdGUsIHBhZ2VzOiBQYWdlW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRQYWdlcyA9IHBhZ2VzLmZpbHRlcigocGFnZSkgPT4gcGFnZS5zb3VyY2UgPT09IG51bGwgJiYgcGFnZS5pZCAhPT0gbnVsbCk7XG5cbiAgICAgICAgaWYgKHRhcmdldFBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUGFnZUNvbGxlY3Rpb24oc2l0ZSwgcGFnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFxuICAgICAgICAgIHRhcmdldFBhZ2VzLm1hcCgocGFnZSkgPT4gKHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICd2aWV3c291cmNlL1ZpZXdTb3VyY2VNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZV9pZDogcGFnZS5pZCxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGFnZSA9IHRhcmdldFBhZ2VzW2ldO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlW2ldO1xuICAgICAgICAgIGlmICghcGFnZSB8fCAhcmVzcG9uc2UpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJykucmVwbGFjZSgvJm5ic3A7L2csICcgJyk7XG4gICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChib2R5KTtcbiAgICAgICAgICBjb25zdCBzb3VyY2VFbGVtZW50ID0gJCgnZGl2LnBhZ2Utc291cmNlJyk7XG4gICAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoYENhbm5vdCBmaW5kIHNvdXJjZSBlbGVtZW50IGZvciBwYWdlOiAke3BhZ2UuZnVsbG5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHdpa2lUZXh0ID0gc291cmNlRWxlbWVudC50ZXh0KCkudHJpbSgpLnJlcGxhY2UoL15cXHQvLCAnJyk7XG4gICAgICAgICAgcGFnZS5zb3VyY2UgPSBuZXcgUGFnZVNvdXJjZSh7IHBhZ2UsIHdpa2lUZXh0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBwYWdlIHNvdXJjZXM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byBhY3F1aXJlIHBhZ2UgcmV2aXNpb25zIGluIGJ1bGtcbiAgICovXG4gIHN0YXRpYyBhY3F1aXJlUGFnZVJldmlzaW9ucyhzaXRlOiBTaXRlLCBwYWdlczogUGFnZVtdKTogV2lraWRvdFJlc3VsdEFzeW5jPFBhZ2VDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UGFnZXMgPSBwYWdlcy5maWx0ZXIoKHBhZ2UpID0+IHBhZ2UucmV2aXNpb25zID09PSBudWxsICYmIHBhZ2UuaWQgIT09IG51bGwpO1xuXG4gICAgICAgIGlmICh0YXJnZXRQYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VDb2xsZWN0aW9uKHNpdGUsIHBhZ2VzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNpdGUuYW1jUmVxdWVzdChcbiAgICAgICAgICB0YXJnZXRQYWdlcy5tYXAoKHBhZ2UpID0+ICh7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnaGlzdG9yeS9QYWdlUmV2aXNpb25MaXN0TW9kdWxlJyxcbiAgICAgICAgICAgIHBhZ2VfaWQ6IHBhZ2UuaWQsXG4gICAgICAgICAgICBvcHRpb25zOiB7IGFsbDogdHJ1ZSB9LFxuICAgICAgICAgICAgcGVycGFnZTogMTAwMDAwMDAwLFxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhcnNlIHJldmlzaW9uc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhcmdldFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgcGFnZSA9IHRhcmdldFBhZ2VzW2ldO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlW2ldO1xuICAgICAgICAgIGlmICghcGFnZSB8fCAhcmVzcG9uc2UpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGJvZHkpO1xuICAgICAgICAgIGNvbnN0IHJldmlzaW9uczogUGFnZVJldmlzaW9uW10gPSBbXTtcblxuICAgICAgICAgICQoJ3RhYmxlLnBhZ2UtaGlzdG9yeSB0cltpZF49XCJyZXZpc2lvbi1yb3ctXCJdJykuZWFjaCgoX2osIHJldkVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRyZXYgPSAkKHJldkVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgcmV2SWRBdHRyID0gJHJldi5hdHRyKCdpZCcpO1xuICAgICAgICAgICAgaWYgKCFyZXZJZEF0dHIpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgcmV2SWQgPSBOdW1iZXIucGFyc2VJbnQocmV2SWRBdHRyLnJlcGxhY2UoJ3JldmlzaW9uLXJvdy0nLCAnJyksIDEwKTtcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4ocmV2SWQpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0ICR0ZHMgPSAkcmV2LmZpbmQoJ3RkJyk7XG4gICAgICAgICAgICBpZiAoJHRkcy5sZW5ndGggPCA3KSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHJldk5vVGV4dCA9ICR0ZHMuZXEoMCkudGV4dCgpLnRyaW0oKS5yZXBsYWNlKC9cXC4kLywgJycpO1xuICAgICAgICAgICAgY29uc3QgcmV2Tm8gPSBOdW1iZXIucGFyc2VJbnQocmV2Tm9UZXh0LCAxMCk7XG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHJldk5vKSkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCAkY3JlYXRlZEJ5RWxlbSA9ICR0ZHMuZXEoNCkuZmluZCgnc3Bhbi5wcmludHVzZXInKTtcbiAgICAgICAgICAgIGlmICgkY3JlYXRlZEJ5RWxlbS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRCeSA9IHBhcnNlVXNlcihzaXRlLmNsaWVudCwgJGNyZWF0ZWRCeUVsZW0gYXMgQ2hlZXJpbzxBbnlOb2RlPik7XG5cbiAgICAgICAgICAgIGNvbnN0ICRjcmVhdGVkQXRFbGVtID0gJHRkcy5lcSg1KS5maW5kKCdzcGFuLm9kYXRlJyk7XG4gICAgICAgICAgICBpZiAoJGNyZWF0ZWRBdEVsZW0ubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkQXQgPSBwYXJzZU9kYXRlKCRjcmVhdGVkQXRFbGVtIGFzIENoZWVyaW88QW55Tm9kZT4pID8/IG5ldyBEYXRlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSAkdGRzLmVxKDYpLnRleHQoKS50cmltKCk7XG5cbiAgICAgICAgICAgIHJldmlzaW9ucy5wdXNoKFxuICAgICAgICAgICAgICBuZXcgUGFnZVJldmlzaW9uKHtcbiAgICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgICAgIGlkOiByZXZJZCxcbiAgICAgICAgICAgICAgICByZXZObyxcbiAgICAgICAgICAgICAgICBjcmVhdGVkQnksXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcGFnZS5yZXZpc2lvbnMgPSBuZXcgUGFnZVJldmlzaW9uQ29sbGVjdGlvbihwYWdlLCByZXZpc2lvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBwYWdlIHJldmlzaW9uczogJHtTdHJpbmcoZXJyb3IpfWApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gYWNxdWlyZSBwYWdlIHZvdGVzIGluIGJ1bGtcbiAgICovXG4gIHN0YXRpYyBhY3F1aXJlUGFnZVZvdGVzKHNpdGU6IFNpdGUsIHBhZ2VzOiBQYWdlW10pOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRQYWdlcyA9IHBhZ2VzLmZpbHRlcigocGFnZSkgPT4gcGFnZS52b3RlcyA9PT0gbnVsbCAmJiBwYWdlLmlkICE9PSBudWxsKTtcblxuICAgICAgICBpZiAodGFyZ2V0UGFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzaXRlLmFtY1JlcXVlc3QoXG4gICAgICAgICAgdGFyZ2V0UGFnZXMubWFwKChwYWdlKSA9PiAoe1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ3BhZ2VyYXRlL1dob1JhdGVkUGFnZU1vZHVsZScsXG4gICAgICAgICAgICBwYWdlSWQ6IHBhZ2UuaWQsXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFyc2Ugdm90ZXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YXJnZXRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHBhZ2UgPSB0YXJnZXRQYWdlc1tpXTtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVtpXTtcbiAgICAgICAgICBpZiAoIXBhZ2UgfHwgIXJlc3BvbnNlKSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChib2R5KTtcblxuICAgICAgICAgIGNvbnN0ICR1c2VyRWxlbXMgPSAkKCdzcGFuLnByaW50dXNlcicpO1xuICAgICAgICAgIGNvbnN0ICR2YWx1ZUVsZW1zID0gJChcInNwYW5bc3R5bGVePSdjb2xvciddXCIpO1xuXG4gICAgICAgICAgaWYgKCR1c2VyRWxlbXMubGVuZ3RoICE9PSAkdmFsdWVFbGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ1VzZXIgYW5kIHZhbHVlIGNvdW50IG1pc21hdGNoIGluIHZvdGVzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgdm90ZXM6IFBhZ2VWb3RlW10gPSBbXTtcbiAgICAgICAgICAkdXNlckVsZW1zLmVhY2goKGosIHVzZXJFbGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdXNlciA9ICQodXNlckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgJHZhbHVlID0gJHZhbHVlRWxlbXMuZXEoaik7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBwYXJzZVVzZXIoc2l0ZS5jbGllbnQsICR1c2VyIGFzIENoZWVyaW88QW55Tm9kZT4pO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gJHZhbHVlLnRleHQoKS50cmltKCk7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZTogbnVtYmVyO1xuICAgICAgICAgICAgaWYgKHZhbHVlVGV4dCA9PT0gJysnKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVUZXh0ID09PSAnLScpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlVGV4dCwgMTApIHx8IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZvdGVzLnB1c2gobmV3IFBhZ2VWb3RlKHsgcGFnZSwgdXNlciwgdmFsdWUgfSkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcGFnZS52b3RlcyA9IG5ldyBQYWdlVm90ZUNvbGxlY3Rpb24ocGFnZSwgdm90ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBwYWdlIHZvdGVzOiAke1N0cmluZyhlcnJvcil9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIExpc3RQYWdlc01vZHVsZSByZXNwb25zZVxuICAgKi9cbiAgc3RhdGljIHBhcnNlKFxuICAgIHNpdGU6IFNpdGUsXG4gICAgaHRtbEJvZHk6IGNoZWVyaW8uQ2hlZXJpb0FQSSxcbiAgICBfcGFyc2VVc2VyOiAoZWxlbWVudDogY2hlZXJpby5DaGVlcmlvPEFueU5vZGU+KSA9PiBBYnN0cmFjdFVzZXJcbiAgKTogUGFnZUNvbGxlY3Rpb24ge1xuICAgIGNvbnN0IHBhZ2VzOiBQYWdlW10gPSBbXTtcblxuICAgIGh0bWxCb2R5KCdkaXYucGFnZScpLmVhY2goKF9pLCBwYWdlRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgJHBhZ2UgPSBodG1sQm9keShwYWdlRWxlbWVudCk7XG4gICAgICBjb25zdCBwYWdlUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgICAvLyBDaGVjayBmb3IgNS1zdGFyIHJhdGluZ1xuICAgICAgY29uc3QgaXM1U3RhclJhdGluZyA9ICRwYWdlLmZpbmQoJ3NwYW4ucmF0aW5nIHNwYW4ucGFnZS1yYXRlLWxpc3QtcGFnZXMtc3RhcnQnKS5sZW5ndGggPiAwO1xuXG4gICAgICAvLyBHZXQgZWFjaCB2YWx1ZVxuICAgICAgJHBhZ2UuZmluZCgnc3Bhbi5zZXQnKS5lYWNoKChfaiwgc2V0RWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCAkc2V0ID0gaHRtbEJvZHkoc2V0RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGtleUVsZW1lbnQgPSAkc2V0LmZpbmQoJ3NwYW4ubmFtZScpO1xuICAgICAgICBpZiAoa2V5RWxlbWVudC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBsZXQga2V5ID0ga2V5RWxlbWVudC50ZXh0KCkudHJpbSgpO1xuICAgICAgICBjb25zdCB2YWx1ZUVsZW1lbnQgPSAkc2V0LmZpbmQoJ3NwYW4udmFsdWUnKTtcblxuICAgICAgICBsZXQgdmFsdWU6IHVua25vd24gPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWx1ZUVsZW1lbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKFsnY3JlYXRlZF9hdCcsICd1cGRhdGVkX2F0JywgJ2NvbW1lbnRlZF9hdCddLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBjb25zdCBvZGF0ZUVsZW1lbnQgPSB2YWx1ZUVsZW1lbnQuZmluZCgnc3Bhbi5vZGF0ZScpO1xuICAgICAgICAgIGlmIChvZGF0ZUVsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGltZXN0YW1wID0gb2RhdGVFbGVtZW50LmF0dHIoJ2NsYXNzJyk/Lm1hdGNoKC90aW1lXyhcXGQrKS8pPy5bMV07XG4gICAgICAgICAgICB2YWx1ZSA9IHRpbWVzdGFtcCA/IG5ldyBEYXRlKE51bWJlci5wYXJzZUludCh0aW1lc3RhbXAsIDEwKSAqIDEwMDApIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgWydjcmVhdGVkX2J5X2xpbmtlZCcsICd1cGRhdGVkX2J5X2xpbmtlZCcsICdjb21tZW50ZWRfYnlfbGlua2VkJ10uaW5jbHVkZXMoa2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBwcmludHVzZXJFbGVtZW50ID0gdmFsdWVFbGVtZW50LmZpbmQoJ3NwYW4ucHJpbnR1c2VyJyk7XG4gICAgICAgICAgaWYgKHByaW50dXNlckVsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFsdWUgPSBfcGFyc2VVc2VyKHByaW50dXNlckVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChbJ3RhZ3MnLCAnX3RhZ3MnXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZUVsZW1lbnQudGV4dCgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICB9IGVsc2UgaWYgKFsncmF0aW5nX3ZvdGVzJywgJ2NvbW1lbnRzJywgJ3NpemUnLCAncmV2aXNpb25zJ10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHZhbHVlID0gTnVtYmVyLnBhcnNlSW50KHZhbHVlRWxlbWVudC50ZXh0KCkudHJpbSgpLCAxMCkgfHwgMDtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdyYXRpbmcnKSB7XG4gICAgICAgICAgY29uc3QgcmF0aW5nVGV4dCA9IHZhbHVlRWxlbWVudC50ZXh0KCkudHJpbSgpO1xuICAgICAgICAgIHZhbHVlID0gaXM1U3RhclJhdGluZ1xuICAgICAgICAgICAgPyBOdW1iZXIucGFyc2VGbG9hdChyYXRpbmdUZXh0KSB8fCAwXG4gICAgICAgICAgICA6IE51bWJlci5wYXJzZUludChyYXRpbmdUZXh0LCAxMCkgfHwgMDtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdyYXRpbmdfcGVyY2VudCcpIHtcbiAgICAgICAgICBpZiAoaXM1U3RhclJhdGluZykge1xuICAgICAgICAgICAgdmFsdWUgPSAoTnVtYmVyLnBhcnNlRmxvYXQodmFsdWVFbGVtZW50LnRleHQoKS50cmltKCkpIHx8IDApIC8gMTAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWVFbGVtZW50LnRleHQoKS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBLZXkgY29udmVyc2lvblxuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfbGlua2VkJykpIHtcbiAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgnX2xpbmtlZCcsICcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChbJ2NvbW1lbnRzJywgJ2NoaWxkcmVuJywgJ3JldmlzaW9ucyddLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBrZXkgPSBgJHtrZXl9X2NvdW50YDtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdyYXRpbmdfdm90ZXMnKSB7XG4gICAgICAgICAga2V5ID0gJ3ZvdGVzX2NvdW50JztcbiAgICAgICAgfVxuXG4gICAgICAgIHBhZ2VQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lcmdlIHRhZ3NcbiAgICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5pc0FycmF5KHBhZ2VQYXJhbXMudGFncykgPyBwYWdlUGFyYW1zLnRhZ3MgOiBbXTtcbiAgICAgIGNvbnN0IGhpZGRlblRhZ3MgPSBBcnJheS5pc0FycmF5KHBhZ2VQYXJhbXMuX3RhZ3MpID8gcGFnZVBhcmFtcy5fdGFncyA6IFtdO1xuICAgICAgcGFnZVBhcmFtcy50YWdzID0gWy4uLnRhZ3MsIC4uLmhpZGRlblRhZ3NdO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB3aXRoIFpvZCBzY2hlbWEgYW5kIGFwcGx5IGRlZmF1bHRzXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYWdlUGFyYW1zU2NoZW1hLnBhcnNlKHBhZ2VQYXJhbXMpO1xuXG4gICAgICAvLyBDcmVhdGUgUGFnZSBvYmplY3RcbiAgICAgIHBhZ2VzLnB1c2goXG4gICAgICAgIG5ldyBQYWdlKHtcbiAgICAgICAgICBzaXRlLFxuICAgICAgICAgIGZ1bGxuYW1lOiBwYXJzZWQuZnVsbG5hbWUsXG4gICAgICAgICAgbmFtZTogcGFyc2VkLm5hbWUsXG4gICAgICAgICAgY2F0ZWdvcnk6IHBhcnNlZC5jYXRlZ29yeSxcbiAgICAgICAgICB0aXRsZTogcGFyc2VkLnRpdGxlLFxuICAgICAgICAgIGNoaWxkcmVuQ291bnQ6IHBhcnNlZC5jaGlsZHJlbl9jb3VudCxcbiAgICAgICAgICBjb21tZW50c0NvdW50OiBwYXJzZWQuY29tbWVudHNfY291bnQsXG4gICAgICAgICAgc2l6ZTogcGFyc2VkLnNpemUsXG4gICAgICAgICAgcmF0aW5nOiBwYXJzZWQucmF0aW5nLFxuICAgICAgICAgIHZvdGVzQ291bnQ6IHBhcnNlZC52b3Rlc19jb3VudCxcbiAgICAgICAgICByYXRpbmdQZXJjZW50OiBwYXJzZWQucmF0aW5nX3BlcmNlbnQsXG4gICAgICAgICAgcmV2aXNpb25zQ291bnQ6IHBhcnNlZC5yZXZpc2lvbnNfY291bnQsXG4gICAgICAgICAgcGFyZW50RnVsbG5hbWU6IHBhcnNlZC5wYXJlbnRfZnVsbG5hbWUsXG4gICAgICAgICAgdGFnczogcGFyc2VkLnRhZ3MsXG4gICAgICAgICAgY3JlYXRlZEJ5OiBwYXJzZWQuY3JlYXRlZF9ieSxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHBhcnNlZC5jcmVhdGVkX2F0ID8/IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXBkYXRlZEJ5OiBwYXJzZWQudXBkYXRlZF9ieSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHBhcnNlZC51cGRhdGVkX2F0ID8/IG5ldyBEYXRlKCksXG4gICAgICAgICAgY29tbWVudGVkQnk6IHBhcnNlZC5jb21tZW50ZWRfYnksXG4gICAgICAgICAgY29tbWVudGVkQXQ6IHBhcnNlZC5jb21tZW50ZWRfYXQsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQYWdlQ29sbGVjdGlvbihzaXRlLCBwYWdlcyk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIHBhZ2VzXG4gICAqL1xuICBzdGF0aWMgc2VhcmNoUGFnZXMoXG4gICAgc2l0ZTogU2l0ZSxcbiAgICBwYXJzZVVzZXI6IChlbGVtZW50OiBjaGVlcmlvLkNoZWVyaW88QW55Tm9kZT4pID0+IEFic3RyYWN0VXNlcixcbiAgICBxdWVyeTogU2VhcmNoUGFnZXNRdWVyeSB8IG51bGwgPSBudWxsXG4gICk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlQ29sbGVjdGlvbj4ge1xuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHEgPSBxdWVyeSA/PyBuZXcgU2VhcmNoUGFnZXNRdWVyeSgpO1xuICAgICAgICBjb25zdCBxdWVyeURpY3QgPSBxLmFzRGljdCgpO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIG1vZHVsZSBib2R5XG4gICAgICAgIGNvbnN0IG1vZHVsZUJvZHkgPSBgW1tkaXYgY2xhc3M9XCJwYWdlXCJdXVxcbiR7REVGQVVMVF9NT0RVTEVfQk9EWS5tYXAoXG4gICAgICAgICAgKGtleSkgPT5cbiAgICAgICAgICAgIGBbW3NwYW4gY2xhc3M9XCJzZXQgJHtrZXl9XCJdXVtbc3BhbiBjbGFzcz1cIm5hbWVcIl1dICR7a2V5fSBbWy9zcGFuXV1bW3NwYW4gY2xhc3M9XCJ2YWx1ZVwiXV0gJSUke2tleX0lJSBbWy9zcGFuXV1bWy9zcGFuXV1gXG4gICAgICAgICkuam9pbignJyl9XFxuW1svZGl2XV1gO1xuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgIC4uLnF1ZXJ5RGljdCxcbiAgICAgICAgICBtb2R1bGVOYW1lOiAnbGlzdC9MaXN0UGFnZXNNb2R1bGUnLFxuICAgICAgICAgIG1vZHVsZV9ib2R5OiBtb2R1bGVCb2R5LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNpdGUuYW1jUmVxdWVzdChbcmVxdWVzdEJvZHldKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5lcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdub3Rfb2snKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEZvcmJpZGRlbkVycm9yKCdGYWlsZWQgdG8gZ2V0IHBhZ2VzLCB0YXJnZXQgc2l0ZSBtYXkgYmUgcHJpdmF0ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdFJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBjb25zdCBib2R5ID0gU3RyaW5nKGZpcnN0UmVzcG9uc2U/LmJvZHkgPz8gJycpO1xuICAgICAgICBjb25zdCAkZmlyc3QgPSBjaGVlcmlvLmxvYWQoYm9keSk7XG5cbiAgICAgICAgbGV0IHRvdGFsID0gMTtcbiAgICAgICAgY29uc3QgaHRtbEJvZGllczogY2hlZXJpby5DaGVlcmlvQVBJW10gPSBbJGZpcnN0XTtcblxuICAgICAgICAvLyBDaGVjayBwYWdpbmF0aW9uXG4gICAgICAgIGNvbnN0IHBhZ2VyRWxlbWVudCA9ICRmaXJzdCgnZGl2LnBhZ2VyJyk7XG4gICAgICAgIGlmIChwYWdlckVsZW1lbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGxhc3RQYWdlckVsZW1lbnRzID0gJGZpcnN0KCdkaXYucGFnZXIgc3Bhbi50YXJnZXQnKTtcbiAgICAgICAgICBpZiAobGFzdFBhZ2VyRWxlbWVudHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZExhc3RQYWdlciA9ICRmaXJzdChsYXN0UGFnZXJFbGVtZW50c1tsYXN0UGFnZXJFbGVtZW50cy5sZW5ndGggLSAyXSk7XG4gICAgICAgICAgICBjb25zdCBsYXN0UGFnZXJMaW5rID0gc2Vjb25kTGFzdFBhZ2VyLmZpbmQoJ2EnKTtcbiAgICAgICAgICAgIGlmIChsYXN0UGFnZXJMaW5rLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdG90YWwgPSBOdW1iZXIucGFyc2VJbnQobGFzdFBhZ2VyTGluay50ZXh0KCkudHJpbSgpLCAxMCkgfHwgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgYWRkaXRpb25hbCBwYWdlc1xuICAgICAgICBpZiAodG90YWwgPiAxKSB7XG4gICAgICAgICAgY29uc3QgYWRkaXRpb25hbEJvZGllczogQU1DUmVxdWVzdEJvZHlbXSA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdG90YWw7IGkrKykge1xuICAgICAgICAgICAgYWRkaXRpb25hbEJvZGllcy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4ucXVlcnlEaWN0LFxuICAgICAgICAgICAgICBtb2R1bGVOYW1lOiAnbGlzdC9MaXN0UGFnZXNNb2R1bGUnLFxuICAgICAgICAgICAgICBtb2R1bGVfYm9keTogbW9kdWxlQm9keSxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBpICogKHEucGVyUGFnZSA/PyBERUZBVUxUX1BFUl9QQUdFKSxcbiAgICAgICAgICAgIH0gYXMgQU1DUmVxdWVzdEJvZHkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxSZXN1bHRzID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KGFkZGl0aW9uYWxCb2RpZXMpO1xuICAgICAgICAgIGlmIChhZGRpdGlvbmFsUmVzdWx0cy5pc0VycigpKSB7XG4gICAgICAgICAgICB0aHJvdyBhZGRpdGlvbmFsUmVzdWx0cy5lcnJvcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIGFkZGl0aW9uYWxSZXN1bHRzLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwQm9keSA9IFN0cmluZyhyZXNwb25zZT8uYm9keSA/PyAnJyk7XG4gICAgICAgICAgICBodG1sQm9kaWVzLnB1c2goY2hlZXJpby5sb2FkKHJlc3BCb2R5KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFyc2VcbiAgICAgICAgY29uc3QgcGFnZXM6IFBhZ2VbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0ICRodG1sIG9mIGh0bWxCb2RpZXMpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBQYWdlQ29sbGVjdGlvbi5wYXJzZShzaXRlLCAkaHRtbCwgcGFyc2VVc2VyKTtcbiAgICAgICAgICBwYWdlcy5wdXNoKC4uLnBhcnNlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFBhZ2VDb2xsZWN0aW9uKHNpdGUsIHBhZ2VzKTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRm9yYmlkZGVuRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIHNlYXJjaCBwYWdlczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG9yIGVkaXQgYSBwYWdlXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlT3JFZGl0KFxuICAgIHNpdGU6IFNpdGUsXG4gICAgZnVsbG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBwYWdlSWQ/OiBudW1iZXIgfCBudWxsO1xuICAgICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgICBzb3VyY2U/OiBzdHJpbmc7XG4gICAgICBjb21tZW50Pzogc3RyaW5nO1xuICAgICAgZm9yY2VFZGl0PzogYm9vbGVhbjtcbiAgICAgIHJhaXNlT25FeGlzdHM/OiBib29sZWFuO1xuICAgIH0gPSB7fVxuICApOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gc2l0ZS5jbGllbnQucmVxdWlyZUxvZ2luKCk7XG4gICAgaWYgKGxvZ2luUmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgICAgUHJvbWlzZS5yZWplY3QobG9naW5SZXN1bHQuZXJyb3IpLFxuICAgICAgICAoKSA9PiBuZXcgTG9naW5SZXF1aXJlZEVycm9yKCdMb2dpbiByZXF1aXJlZCB0byBjcmVhdGUvZWRpdCBwYWdlJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHBhZ2VJZCA9IG51bGwsXG4gICAgICAgICAgdGl0bGUgPSAnJyxcbiAgICAgICAgICBzb3VyY2UgPSAnJyxcbiAgICAgICAgICBjb21tZW50ID0gJycsXG4gICAgICAgICAgZm9yY2VFZGl0ID0gZmFsc2UsXG4gICAgICAgICAgcmFpc2VPbkV4aXN0cyA9IGZhbHNlLFxuICAgICAgICB9ID0gb3B0aW9ucztcblxuICAgICAgICAvLyBBY3F1aXJlIHBhZ2UgbG9ja1xuICAgICAgICBjb25zdCBsb2NrUmVxdWVzdEJvZHk6IEFNQ1JlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgIG1vZGU6ICdwYWdlJyxcbiAgICAgICAgICB3aWtpX3BhZ2U6IGZ1bGxuYW1lLFxuICAgICAgICAgIG1vZHVsZU5hbWU6ICdlZGl0L1BhZ2VFZGl0TW9kdWxlJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGZvcmNlRWRpdCkge1xuICAgICAgICAgIGxvY2tSZXF1ZXN0Qm9keS5mb3JjZV9sb2NrID0gJ3llcyc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NrUmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFtsb2NrUmVxdWVzdEJvZHldKTtcbiAgICAgICAgaWYgKGxvY2tSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGxvY2tSZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NrUmVzcG9uc2UgPSBsb2NrUmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAobG9ja1Jlc3BvbnNlPy5sb2NrZWQgfHwgbG9ja1Jlc3BvbnNlPy5vdGhlcl9sb2Nrcykge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoYFBhZ2UgJHtmdWxsbmFtZX0gaXMgbG9ja2VkIG9yIG90aGVyIGxvY2tzIGV4aXN0YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0V4aXN0ID0gJ3BhZ2VfcmV2aXNpb25faWQnIGluIChsb2NrUmVzcG9uc2UgPz8ge30pO1xuXG4gICAgICAgIGlmIChyYWlzZU9uRXhpc3RzICYmIGlzRXhpc3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVGFyZ2V0RXhpc3RzRXJyb3IoYFBhZ2UgJHtmdWxsbmFtZX0gYWxyZWFkeSBleGlzdHNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0V4aXN0ICYmIHBhZ2VJZCA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkRXJyb3IoJ3BhZ2VfaWQgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBlZGl0aW5nIGV4aXN0aW5nIHBhZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2tJZCA9IFN0cmluZyhsb2NrUmVzcG9uc2U/LmxvY2tfaWQgPz8gJycpO1xuICAgICAgICBjb25zdCBsb2NrU2VjcmV0ID0gU3RyaW5nKGxvY2tSZXNwb25zZT8ubG9ja19zZWNyZXQgPz8gJycpO1xuICAgICAgICBjb25zdCBwYWdlUmV2aXNpb25JZCA9IFN0cmluZyhsb2NrUmVzcG9uc2U/LnBhZ2VfcmV2aXNpb25faWQgPz8gJycpO1xuXG4gICAgICAgIC8vIFNhdmUgcGFnZVxuICAgICAgICBjb25zdCBlZGl0UmVxdWVzdEJvZHk6IEFNQ1JlcXVlc3RCb2R5ID0ge1xuICAgICAgICAgIGFjdGlvbjogJ1dpa2lQYWdlQWN0aW9uJyxcbiAgICAgICAgICBldmVudDogJ3NhdmVQYWdlJyxcbiAgICAgICAgICBtb2R1bGVOYW1lOiAnRW1wdHknLFxuICAgICAgICAgIG1vZGU6ICdwYWdlJyxcbiAgICAgICAgICBsb2NrX2lkOiBsb2NrSWQsXG4gICAgICAgICAgbG9ja19zZWNyZXQ6IGxvY2tTZWNyZXQsXG4gICAgICAgICAgcmV2aXNpb25faWQ6IHBhZ2VSZXZpc2lvbklkLFxuICAgICAgICAgIHdpa2lfcGFnZTogZnVsbG5hbWUsXG4gICAgICAgICAgcGFnZV9pZDogcGFnZUlkID8/ICcnLFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICBjb21tZW50czogY29tbWVudCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBlZGl0UmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFtlZGl0UmVxdWVzdEJvZHldKTtcbiAgICAgICAgaWYgKGVkaXRSZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IGVkaXRSZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVGFyZ2V0RXhpc3RzRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUvZWRpdCBwYWdlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgeyBTZWFyY2hQYWdlc1F1ZXJ5IH07XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgeyBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2UgfSBmcm9tICcuL3BhZ2UnO1xuXG4vKipcbiAqIFBhZ2UgZmlsZSBkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZUZpbGVEYXRhIHtcbiAgcGFnZTogUGFnZTtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgbWltZVR5cGU6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhZ2UgYXR0YWNobWVudCBmaWxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlRmlsZSB7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlOiBQYWdlO1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbWltZVR5cGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBQYWdlRmlsZURhdGEpIHtcbiAgICB0aGlzLnBhZ2UgPSBkYXRhLnBhZ2U7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMudXJsID0gZGF0YS51cmw7XG4gICAgdGhpcy5taW1lVHlwZSA9IGRhdGEubWltZVR5cGU7XG4gICAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFBhZ2VGaWxlKGlkPSR7dGhpcy5pZH0sIG5hbWU9JHt0aGlzLm5hbWV9LCBzaXplPSR7dGhpcy5zaXplfSlgO1xuICB9XG59XG5cbi8qKlxuICogUGFnZSBmaWxlIGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VGaWxlQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PFBhZ2VGaWxlPiB7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlOiBQYWdlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IFBhZ2UsIGZpbGVzPzogUGFnZUZpbGVbXSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wYWdlID0gcGFnZTtcbiAgICBpZiAoZmlsZXMpIHtcbiAgICAgIHRoaXMucHVzaCguLi5maWxlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgSURcbiAgICovXG4gIGZpbmRCeUlkKGlkOiBudW1iZXIpOiBQYWdlRmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgoZmlsZSkgPT4gZmlsZS5pZCA9PT0gaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYnkgbmFtZVxuICAgKi9cbiAgZmluZEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBQYWdlRmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgoZmlsZSkgPT4gZmlsZS5uYW1lID09PSBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHNpemUgc3RyaW5nIHRvIGJ5dGVzXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBwYXJzZVNpemUoc2l6ZVRleHQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdGV4dCA9IHNpemVUZXh0LnRyaW0oKTtcbiAgICBpZiAodGV4dC5pbmNsdWRlcygnQnl0ZXMnKSkge1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTnVtYmVyLnBhcnNlRmxvYXQodGV4dC5yZXBsYWNlKCdCeXRlcycsICcnKS50cmltKCkpKTtcbiAgICB9XG4gICAgaWYgKHRleHQuaW5jbHVkZXMoJ2tCJykpIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKE51bWJlci5wYXJzZUZsb2F0KHRleHQucmVwbGFjZSgna0InLCAnJykudHJpbSgpKSAqIDEwMDApO1xuICAgIH1cbiAgICBpZiAodGV4dC5pbmNsdWRlcygnTUInKSkge1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTnVtYmVyLnBhcnNlRmxvYXQodGV4dC5yZXBsYWNlKCdNQicsICcnKS50cmltKCkpICogMTAwMDAwMCk7XG4gICAgfVxuICAgIGlmICh0ZXh0LmluY2x1ZGVzKCdHQicpKSB7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihOdW1iZXIucGFyc2VGbG9hdCh0ZXh0LnJlcGxhY2UoJ0dCJywgJycpLnRyaW0oKSkgKiAxMDAwMDAwMDAwKTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxpc3Qgb2YgZmlsZXMgYXR0YWNoZWQgdG8gcGFnZVxuICAgKi9cbiAgc3RhdGljIGFjcXVpcmUocGFnZTogUGFnZSk6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlRmlsZUNvbGxlY3Rpb24+IHtcbiAgICBpZiAocGFnZS5pZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1BhZ2UgSUQgbm90IGFjcXVpcmVkJykpLFxuICAgICAgICAoKSA9PiBuZXcgVW5leHBlY3RlZEVycm9yKCdQYWdlIElEIG11c3QgYmUgYWNxdWlyZWQgYmVmb3JlIGdldHRpbmcgZmlsZXMnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlSWQgPSBwYWdlLmlkO1xuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGFnZS5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdmaWxlcy9QYWdlRmlsZXNNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZV9pZDogcGFnZUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcignRW1wdHkgcmVzcG9uc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0bWwgPSBTdHJpbmcocmVzcG9uc2UuYm9keSA/PyAnJyk7XG4gICAgICAgIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoaHRtbCk7XG5cbiAgICAgICAgY29uc3QgZmlsZXNUYWJsZSA9ICQoJ3RhYmxlLnBhZ2UtZmlsZXMnKTtcbiAgICAgICAgaWYgKGZpbGVzVGFibGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQYWdlRmlsZUNvbGxlY3Rpb24ocGFnZSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZXM6IFBhZ2VGaWxlW10gPSBbXTtcblxuICAgICAgICBmaWxlc1RhYmxlLmZpbmQoXCJ0Ym9keSB0cltpZF49J2ZpbGUtcm93LSddXCIpLmVhY2goKF9pLCByb3cpID0+IHtcbiAgICAgICAgICBjb25zdCByb3dJZCA9ICQocm93KS5hdHRyKCdpZCcpO1xuICAgICAgICAgIGlmICghcm93SWQpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGZpbGVJZCA9IE51bWJlci5wYXJzZUludChyb3dJZC5yZXBsYWNlKCdmaWxlLXJvdy0nLCAnJyksIDEwKTtcbiAgICAgICAgICBjb25zdCB0ZHMgPSAkKHJvdykuZmluZCgndGQnKTtcbiAgICAgICAgICBpZiAodGRzLmxlbmd0aCA8IDMpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGxpbmtFbGVtID0gJCh0ZHNbMF0pLmZpbmQoJ2EnKTtcbiAgICAgICAgICBpZiAobGlua0VsZW0ubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBuYW1lID0gbGlua0VsZW0udGV4dCgpLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBocmVmID0gbGlua0VsZW0uYXR0cignaHJlZicpID8/ICcnO1xuICAgICAgICAgIGNvbnN0IHVybCA9IGAke3BhZ2Uuc2l0ZS5nZXRCYXNlVXJsKCl9JHtocmVmfWA7XG5cbiAgICAgICAgICBjb25zdCBtaW1lRWxlbSA9ICQodGRzWzFdKS5maW5kKCdzcGFuJyk7XG4gICAgICAgICAgY29uc3QgbWltZVR5cGUgPSBtaW1lRWxlbS5hdHRyKCd0aXRsZScpID8/ICcnO1xuXG4gICAgICAgICAgY29uc3Qgc2l6ZVRleHQgPSAkKHRkc1syXSkudGV4dCgpLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBzaXplID0gUGFnZUZpbGVDb2xsZWN0aW9uLnBhcnNlU2l6ZShzaXplVGV4dCk7XG5cbiAgICAgICAgICBmaWxlcy5wdXNoKFxuICAgICAgICAgICAgbmV3IFBhZ2VGaWxlKHtcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgICAgaWQ6IGZpbGVJZCxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICBtaW1lVHlwZSxcbiAgICAgICAgICAgICAgc2l6ZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlRmlsZUNvbGxlY3Rpb24ocGFnZSwgZmlsZXMpO1xuICAgICAgfSkoKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGFjcXVpcmUgZmlsZXM6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgTG9naW5SZXF1aXJlZEVycm9yLCBOb0VsZW1lbnRFcnJvciwgVW5leHBlY3RlZEVycm9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyBmcm9tUHJvbWlzZSwgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMgfSBmcm9tICcuLi8uLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBQYWdlUmVmIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFBhZ2UgbWV0YSB0YWcgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VNZXRhRGF0YSB7XG4gIHBhZ2U6IFBhZ2VSZWY7XG4gIG5hbWU6IHN0cmluZztcbiAgY29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhZ2UgbWV0YSB0YWdcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VNZXRhIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2U6IFBhZ2VSZWY7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBjb250ZW50OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogUGFnZU1ldGFEYXRhKSB7XG4gICAgdGhpcy5wYWdlID0gZGF0YS5wYWdlO1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBkYXRhLmNvbnRlbnQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1ldGEgdGFnIHZhbHVlXG4gICAqIEBwYXJhbSBjb250ZW50IC0gTmV3IHZhbHVlXG4gICAqL1xuICB1cGRhdGUoY29udGVudDogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPHZvaWQ+IHtcbiAgICByZXR1cm4gUGFnZU1ldGFDb2xsZWN0aW9uLnNldE1ldGEodGhpcy5wYWdlLCB0aGlzLm5hbWUsIGNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBtZXRhIHRhZ1xuICAgKi9cbiAgZGVsZXRlKCk6IFdpa2lkb3RSZXN1bHRBc3luYzx2b2lkPiB7XG4gICAgcmV0dXJuIFBhZ2VNZXRhQ29sbGVjdGlvbi5kZWxldGVNZXRhKHRoaXMucGFnZSwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBQYWdlTWV0YShuYW1lPSR7dGhpcy5uYW1lfSwgY29udGVudD0ke3RoaXMuY29udGVudH0pYDtcbiAgfVxufVxuXG4vKipcbiAqIFBhZ2UgbWV0YSB0YWcgY29sbGVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgUGFnZU1ldGFDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8UGFnZU1ldGE+IHtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2U6IFBhZ2VSZWY7XG5cbiAgY29uc3RydWN0b3IocGFnZTogUGFnZVJlZiwgbWV0YXM/OiBQYWdlTWV0YVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgIGlmIChtZXRhcykge1xuICAgICAgdGhpcy5wdXNoKC4uLm1ldGFzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBieSBuYW1lXG4gICAqIEBwYXJhbSBuYW1lIC0gTWV0YSB0YWcgbmFtZVxuICAgKiBAcmV0dXJucyBNZXRhIHRhZyAodW5kZWZpbmVkIGlmIG5vdCBmb3VuZClcbiAgICovXG4gIGZpbmRCeU5hbWUobmFtZTogc3RyaW5nKTogUGFnZU1ldGEgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbmQoKG1ldGEpID0+IG1ldGEubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhZ2UgbWV0YSB0YWdzXG4gICAqIEBwYXJhbSBwYWdlIC0gUGFnZSByZWZlcmVuY2VcbiAgICogQHJldHVybnMgTWV0YSB0YWcgY29sbGVjdGlvblxuICAgKi9cbiAgc3RhdGljIGFjcXVpcmUocGFnZTogUGFnZVJlZik6IFdpa2lkb3RSZXN1bHRBc3luYzxQYWdlTWV0YUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdlLnNpdGUuYW1jUmVxdWVzdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2VkaXQvRWRpdE1ldGFNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZUlkOiBwYWdlLmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSkge1xuICAgICAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgbWV0YXM6IFBhZ2VNZXRhW10gPSBbXTtcblxuICAgICAgICAvLyBQYXJzZSBIVE1MLWVuY29kZWQgbWV0YSB0YWdzIHdpdGggcmVnZXhcbiAgICAgICAgLy8gRm9ybWF0OiAmbHQ7bWV0YSBuYW1lPVwieHh4XCIgY29udGVudD1cInl5eVwiLyZndDtcbiAgICAgICAgY29uc3QgbWV0YVJlZ2V4ID0gLyZsdDttZXRhIG5hbWU9XCIoW15cIl0rKVwiIGNvbnRlbnQ9XCIoW15cIl0qKVwiXFwvPyZndDsvZztcbiAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiBodG1sLm1hdGNoQWxsKG1ldGFSZWdleCkpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gbWF0Y2hbMV07XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IG1hdGNoWzJdO1xuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBtZXRhcy5wdXNoKFxuICAgICAgICAgICAgICBuZXcgUGFnZU1ldGEoe1xuICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50ID8/ICcnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFBhZ2VNZXRhQ29sbGVjdGlvbihwYWdlLCBtZXRhcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBwYWdlIG1ldGFzOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbWV0YSB0YWdcbiAgICogQHBhcmFtIHBhZ2UgLSBQYWdlIHJlZmVyZW5jZVxuICAgKiBAcGFyYW0gbmFtZSAtIE1ldGEgdGFnIG5hbWVcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBNZXRhIHRhZyB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIHNldE1ldGEocGFnZTogUGFnZVJlZiwgbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gcGFnZS5zaXRlLmNsaWVudC5yZXF1aXJlTG9naW4oKTtcbiAgICBpZiAobG9naW5SZXN1bHQuaXNFcnIoKSkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlamVjdChsb2dpblJlc3VsdC5lcnJvciksXG4gICAgICAgICgpID0+IG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0xvZ2luIHJlcXVpcmVkIHRvIHNldCBtZXRhIHRhZycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhZ2Uuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdXaWtpUGFnZUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ3NhdmVNZXRhVGFnJyxcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdlZGl0L0VkaXRNZXRhTW9kdWxlJyxcbiAgICAgICAgICAgIHBhZ2VJZDogcGFnZS5pZCxcbiAgICAgICAgICAgIG1ldGFOYW1lOiBuYW1lLFxuICAgICAgICAgICAgbWV0YUNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIExvZ2luUmVxdWlyZWRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIHNldCBtZXRhIHRhZzogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG1ldGEgdGFnXG4gICAqIEBwYXJhbSBwYWdlIC0gUGFnZSByZWZlcmVuY2VcbiAgICogQHBhcmFtIG5hbWUgLSBNZXRhIHRhZyBuYW1lXG4gICAqL1xuICBzdGF0aWMgZGVsZXRlTWV0YShwYWdlOiBQYWdlUmVmLCBuYW1lOiBzdHJpbmcpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2luUmVzdWx0ID0gcGFnZS5zaXRlLmNsaWVudC5yZXF1aXJlTG9naW4oKTtcbiAgICBpZiAobG9naW5SZXN1bHQuaXNFcnIoKSkge1xuICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgICBQcm9taXNlLnJlamVjdChsb2dpblJlc3VsdC5lcnJvciksXG4gICAgICAgICgpID0+IG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoJ0xvZ2luIHJlcXVpcmVkIHRvIGRlbGV0ZSBtZXRhIHRhZycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBhZ2Uuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdXaWtpUGFnZUFjdGlvbicsXG4gICAgICAgICAgICBldmVudDogJ2RlbGV0ZU1ldGFUYWcnLFxuICAgICAgICAgICAgbW9kdWxlTmFtZTogJ2VkaXQvRWRpdE1ldGFNb2R1bGUnLFxuICAgICAgICAgICAgcGFnZUlkOiBwYWdlLmlkLFxuICAgICAgICAgICAgbWV0YU5hbWU6IG5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIExvZ2luUmVxdWlyZWRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBtZXRhIHRhZzogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbmltcG9ydCB7IE5vRWxlbWVudEVycm9yLCBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFic3RyYWN0VXNlciB9IGZyb20gJy4uL3VzZXInO1xuaW1wb3J0IHR5cGUgeyBQYWdlIH0gZnJvbSAnLi9wYWdlJztcbmltcG9ydCB0eXBlIHsgUGFnZVNvdXJjZSB9IGZyb20gJy4vcGFnZS1zb3VyY2UnO1xuXG4vKipcbiAqIFBhZ2UgcmV2aXNpb24gZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VSZXZpc2lvbkRhdGEge1xuICBwYWdlOiBQYWdlO1xuICBpZDogbnVtYmVyO1xuICByZXZObzogbnVtYmVyO1xuICBjcmVhdGVkQnk6IEFic3RyYWN0VXNlcjtcbiAgY3JlYXRlZEF0OiBEYXRlO1xuICBjb21tZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFnZSByZXZpc2lvbiAodmVyc2lvbiBpbiBlZGl0IGhpc3RvcnkpXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlUmV2aXNpb24ge1xuICAvKiogUGFnZSB0aGlzIHJldmlzaW9uIGJlbG9uZ3MgdG8gKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhZ2U6IFBhZ2U7XG5cbiAgLyoqIFJldmlzaW9uIElEICovXG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKiBSZXZpc2lvbiBudW1iZXIgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJldk5vOiBudW1iZXI7XG5cbiAgLyoqIFJldmlzaW9uIGNyZWF0b3IgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRCeTogQWJzdHJhY3RVc2VyO1xuXG4gIC8qKiBSZXZpc2lvbiBjcmVhdGlvbiBkYXRlICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ6IERhdGU7XG5cbiAgLyoqIEVkaXQgY29tbWVudCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tbWVudDogc3RyaW5nO1xuXG4gIC8qKiBTb3VyY2UgY29kZSAoaW50ZXJuYWwgY2FjaGUpICovXG4gIHByaXZhdGUgX3NvdXJjZTogUGFnZVNvdXJjZSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBIVE1MIGRpc3BsYXkgKGludGVybmFsIGNhY2hlKSAqL1xuICBwcml2YXRlIF9odG1sOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBQYWdlUmV2aXNpb25EYXRhKSB7XG4gICAgdGhpcy5wYWdlID0gZGF0YS5wYWdlO1xuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgIHRoaXMucmV2Tm8gPSBkYXRhLnJldk5vO1xuICAgIHRoaXMuY3JlYXRlZEJ5ID0gZGF0YS5jcmVhdGVkQnk7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBkYXRhLmNyZWF0ZWRBdDtcbiAgICB0aGlzLmNvbW1lbnQgPSBkYXRhLmNvbW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBzb3VyY2UgY29kZSBoYXMgYmVlbiBhY3F1aXJlZFxuICAgKi9cbiAgaXNTb3VyY2VBY3F1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgSFRNTCBkaXNwbGF5IGhhcyBiZWVuIGFjcXVpcmVkXG4gICAqL1xuICBpc0h0bWxBY3F1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faHRtbCAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc291cmNlIGNvZGUgKGNhY2hlZClcbiAgICovXG4gIGdldCBzb3VyY2UoKTogUGFnZVNvdXJjZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHNvdXJjZSBjb2RlXG4gICAqL1xuICBzZXQgc291cmNlKHZhbHVlOiBQYWdlU291cmNlIHwgbnVsbCkge1xuICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBIVE1MIGRpc3BsYXkgKGNhY2hlZClcbiAgICovXG4gIGdldCBodG1sKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9odG1sO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBIVE1MIGRpc3BsYXlcbiAgICovXG4gIHNldCBodG1sKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5faHRtbCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZXZpc2lvbiBzb3VyY2UgKFJFVi0wMDEpXG4gICAqIEByZXR1cm5zIFNvdXJjZSBzdHJpbmdcbiAgICovXG4gIGdldFNvdXJjZSgpOiBXaWtpZG90UmVzdWx0QXN5bmM8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gUmV0dXJuIGNhY2hlIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS53aWtpVGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGFnZS5zaXRlLmFtY1JlcXVlc3QoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6ICdoaXN0b3J5L1BhZ2VTb3VyY2VNb2R1bGUnLFxuICAgICAgICAgICAgcmV2aXNpb25faWQ6IHRoaXMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0VtcHR5IHJlc3BvbnNlIGZyb20gUGFnZVNvdXJjZU1vZHVsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcblxuICAgICAgICAvLyBTb3VyY2UgY29kZSBpcyBpbnNpZGUgPGRpdiBjbGFzcz1cInBhZ2Utc291cmNlXCI+XG4gICAgICAgIGNvbnN0IHNvdXJjZUVsZW0gPSAkKCdkaXYucGFnZS1zb3VyY2UnKTtcbiAgICAgICAgaWYgKHNvdXJjZUVsZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdTb3VyY2UgZWxlbWVudCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZVRleHQgPSBzb3VyY2VFbGVtLnRleHQoKTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZVRleHQ7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gZ2V0IHJldmlzaW9uIHNvdXJjZTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJldmlzaW9uIEhUTUwgKFJFVi0wMDIpXG4gICAqIEByZXR1cm5zIEhUTUwgc3RyaW5nXG4gICAqL1xuICBnZXRIdG1sKCk6IFdpa2lkb3RSZXN1bHRBc3luYzxzdHJpbmc+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBSZXR1cm4gY2FjaGUgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICh0aGlzLl9odG1sKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2h0bWw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBhZ2Uuc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnaGlzdG9yeS9QYWdlVmVyc2lvbk1vZHVsZScsXG4gICAgICAgICAgICByZXZpc2lvbl9pZDogdGhpcy5pZCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHRocm93IG5ldyBOb0VsZW1lbnRFcnJvcignRW1wdHkgcmVzcG9uc2UgZnJvbSBQYWdlVmVyc2lvbk1vZHVsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHRtbCA9IFN0cmluZyhyZXNwb25zZS5ib2R5ID8/ICcnKTtcbiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcblxuICAgICAgICAvLyBIVE1MIGNvbnRlbnQgaXMgaW5zaWRlIDxkaXYgaWQ9XCJwYWdlLWNvbnRlbnRcIj5cbiAgICAgICAgY29uc3QgY29udGVudEVsZW0gPSAkKCcjcGFnZS1jb250ZW50Jyk7XG4gICAgICAgIGlmIChjb250ZW50RWxlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBSZXR1cm4gZW50aXJlIGJvZHkgaWYgcGFnZS1jb250ZW50IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICB0aGlzLl9odG1sID0gaHRtbDtcbiAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRIdG1sID0gY29udGVudEVsZW0uaHRtbCgpID8/ICcnO1xuICAgICAgICB0aGlzLl9odG1sID0gY29udGVudEh0bWw7XG4gICAgICAgIHJldHVybiBjb250ZW50SHRtbDtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgcmV2aXNpb24gSFRNTDogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgUGFnZVJldmlzaW9uKGlkPSR7dGhpcy5pZH0sIHJldk5vPSR7dGhpcy5yZXZOb30pYDtcbiAgfVxufVxuXG4vKipcbiAqIFBhZ2UgcmV2aXNpb24gY29sbGVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgUGFnZVJldmlzaW9uQ29sbGVjdGlvbiBleHRlbmRzIEFycmF5PFBhZ2VSZXZpc2lvbj4ge1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnZTogUGFnZSB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IocGFnZTogUGFnZSB8IG51bGwsIHJldmlzaW9ucz86IFBhZ2VSZXZpc2lvbltdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgIGlmIChyZXZpc2lvbnMpIHtcbiAgICAgIHRoaXMucHVzaCguLi5yZXZpc2lvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGJ5IElEXG4gICAqIEBwYXJhbSBpZCAtIFJldmlzaW9uIElEXG4gICAqIEByZXR1cm5zIFJldmlzaW9uICh1bmRlZmluZWQgaWYgbm90IGZvdW5kKVxuICAgKi9cbiAgZmluZEJ5SWQoaWQ6IG51bWJlcik6IFBhZ2VSZXZpc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZCgocmV2aXNpb24pID0+IHJldmlzaW9uLmlkID09PSBpZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvdXJjZXMgZm9yIGFsbCByZXZpc2lvbnNcbiAgICogQHJldHVybnMgQXJyYXkgb2Ygc291cmNlIHN0cmluZ3NcbiAgICovXG4gIGdldFNvdXJjZXMoKTogV2lraWRvdFJlc3VsdEFzeW5jPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHRoaXMubWFwKGFzeW5jIChyZXZpc2lvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmV2aXNpb24uZ2V0U291cmNlKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgc291cmNlczogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEhUTUwgZm9yIGFsbCByZXZpc2lvbnNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgSFRNTCBzdHJpbmdzXG4gICAqL1xuICBnZXRIdG1scygpOiBXaWtpZG90UmVzdWx0QXN5bmM8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgdGhpcy5tYXAoYXN5bmMgKHJldmlzaW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXZpc2lvbi5nZXRIdG1sKCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9FbGVtZW50RXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBnZXQgSFRNTHM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgUGFnZSB9IGZyb20gJy4vcGFnZSc7XG5cbi8qKlxuICogUGFnZSBzb3VyY2UgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VTb3VyY2VEYXRhIHtcbiAgcGFnZTogUGFnZTtcbiAgd2lraVRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYWdlIHNvdXJjZSBjb2RlIChXaWtpZG90IHN5bnRheClcbiAqL1xuZXhwb3J0IGNsYXNzIFBhZ2VTb3VyY2Uge1xuICAvKiogUGFnZSB0aGlzIHNvdXJjZSBiZWxvbmdzIHRvICovXG4gIHB1YmxpYyByZWFkb25seSBwYWdlOiBQYWdlO1xuXG4gIC8qKiBTb3VyY2UgY29kZSAoV2lraWRvdCBzeW50YXgpICovXG4gIHB1YmxpYyByZWFkb25seSB3aWtpVGV4dDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFBhZ2VTb3VyY2VEYXRhKSB7XG4gICAgdGhpcy5wYWdlID0gZGF0YS5wYWdlO1xuICAgIHRoaXMud2lraVRleHQgPSBkYXRhLndpa2lUZXh0O1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFBhZ2VTb3VyY2UocGFnZT0ke3RoaXMucGFnZS5mdWxsbmFtZX0sIGxlbmd0aD0ke3RoaXMud2lraVRleHQubGVuZ3RofSlgO1xuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQWJzdHJhY3RVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5pbXBvcnQgdHlwZSB7IFBhZ2UgfSBmcm9tICcuL3BhZ2UnO1xuXG4vKipcbiAqIFBhZ2Ugdm90ZSBkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVZvdGVEYXRhIHtcbiAgcGFnZTogUGFnZTtcbiAgdXNlcjogQWJzdHJhY3RVc2VyO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhZ2Ugdm90ZSAocmF0aW5nKVxuICovXG5leHBvcnQgY2xhc3MgUGFnZVZvdGUge1xuICAvKiogUGFnZSB0aGlzIHZvdGUgYmVsb25ncyB0byAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFnZTogUGFnZTtcblxuICAvKiogVXNlciB3aG8gdm90ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXI6IEFic3RyYWN0VXNlcjtcblxuICAvKiogVm90ZSB2YWx1ZSAoKzEvLTEgb3IgbnVtZXJpYykgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogUGFnZVZvdGVEYXRhKSB7XG4gICAgdGhpcy5wYWdlID0gZGF0YS5wYWdlO1xuICAgIHRoaXMudXNlciA9IGRhdGEudXNlcjtcbiAgICB0aGlzLnZhbHVlID0gZGF0YS52YWx1ZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBQYWdlVm90ZSh1c2VyPSR7dGhpcy51c2VyLm5hbWV9LCB2YWx1ZT0ke3RoaXMudmFsdWV9KWA7XG4gIH1cbn1cblxuLyoqXG4gKiBQYWdlIHZvdGUgY29sbGVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgUGFnZVZvdGVDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8UGFnZVZvdGU+IHtcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2U6IFBhZ2U7XG5cbiAgY29uc3RydWN0b3IocGFnZTogUGFnZSwgdm90ZXM/OiBQYWdlVm90ZVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgIGlmICh2b3Rlcykge1xuICAgICAgdGhpcy5wdXNoKC4uLnZvdGVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBieSB1c2VyXG4gICAqIEBwYXJhbSB1c2VyIC0gVXNlciB0byBzZWFyY2ggZm9yXG4gICAqIEByZXR1cm5zIFZvdGUgKHVuZGVmaW5lZCBpZiBub3QgZm91bmQpXG4gICAqL1xuICBmaW5kQnlVc2VyKHVzZXI6IEFic3RyYWN0VXNlcik6IFBhZ2VWb3RlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5maW5kKCh2b3RlKSA9PiB2b3RlLnVzZXIuaWQgPT09IHVzZXIuaWQpO1xuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQWJzdHJhY3RVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5cbi8qKlxuICogUGFnZSBzZWFyY2ggcXVlcnkgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFBhZ2VzUXVlcnlQYXJhbXMge1xuICAvKiogUGFnZSB0eXBlIChlLmcuLCAnbm9ybWFsJywgJ2FkbWluJykgKi9cbiAgcGFnZXR5cGU/OiBzdHJpbmc7XG4gIC8qKiBDYXRlZ29yeSBuYW1lICovXG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogVGFncyB0byBzZWFyY2ggKEFORCBjb25kaXRpb24pICovXG4gIHRhZ3M/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgLyoqIFBhcmVudCBwYWdlIG5hbWUgKi9cbiAgcGFyZW50Pzogc3RyaW5nO1xuICAvKiogTGlua2VkIHBhZ2UgbmFtZSAqL1xuICBsaW5rVG8/OiBzdHJpbmc7XG4gIC8qKiBDcmVhdGVkIGRhdGUgY29uZGl0aW9uICovXG4gIGNyZWF0ZWRBdD86IHN0cmluZztcbiAgLyoqIFVwZGF0ZWQgZGF0ZSBjb25kaXRpb24gKi9cbiAgdXBkYXRlZEF0Pzogc3RyaW5nO1xuICAvKiogQ3JlYXRvciAqL1xuICBjcmVhdGVkQnk/OiBBYnN0cmFjdFVzZXIgfCBzdHJpbmc7XG4gIC8qKiBSYXRpbmcgY29uZGl0aW9uICovXG4gIHJhdGluZz86IHN0cmluZztcbiAgLyoqIFZvdGUgY291bnQgY29uZGl0aW9uICovXG4gIHZvdGVzPzogc3RyaW5nO1xuICAvKiogUGFnZSBuYW1lIGNvbmRpdGlvbiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogRnVsbG5hbWUgKGV4YWN0IG1hdGNoKSAqL1xuICBmdWxsbmFtZT86IHN0cmluZztcbiAgLyoqIFJhbmdlIHNwZWNpZmljYXRpb24gKi9cbiAgcmFuZ2U/OiBzdHJpbmc7XG4gIC8qKiBTb3J0IG9yZGVyIChlLmcuLCAnY3JlYXRlZF9hdCBkZXNjJykgKi9cbiAgb3JkZXI/OiBzdHJpbmc7XG4gIC8qKiBTdGFydCBvZmZzZXQgKi9cbiAgb2Zmc2V0PzogbnVtYmVyO1xuICAvKiogUmVzdWx0IGxpbWl0ICovXG4gIGxpbWl0PzogbnVtYmVyO1xuICAvKiogSXRlbXMgcGVyIHBhZ2UgKi9cbiAgcGVyUGFnZT86IG51bWJlcjtcbiAgLyoqIFNlcGFyYXRlIGRpc3BsYXkgKi9cbiAgc2VwYXJhdGU/OiBzdHJpbmc7XG4gIC8qKiBXcmFwcGVyIGRpc3BsYXkgKi9cbiAgd3JhcHBlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGl0ZW1zIHBlciBwYWdlXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1BFUl9QQUdFID0gMjUwO1xuXG4vKipcbiAqIERlZmF1bHQgbW9kdWxlIGJvZHkgZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01PRFVMRV9CT0RZID0gW1xuICAnZnVsbG5hbWUnLFxuICAnY2F0ZWdvcnknLFxuICAnbmFtZScsXG4gICd0aXRsZScsXG4gICdjcmVhdGVkX2F0JyxcbiAgJ2NyZWF0ZWRfYnlfbGlua2VkJyxcbiAgJ3VwZGF0ZWRfYXQnLFxuICAndXBkYXRlZF9ieV9saW5rZWQnLFxuICAnY29tbWVudGVkX2F0JyxcbiAgJ2NvbW1lbnRlZF9ieV9saW5rZWQnLFxuICAncGFyZW50X2Z1bGxuYW1lJyxcbiAgJ2NvbW1lbnRzJyxcbiAgJ3NpemUnLFxuICAnY2hpbGRyZW4nLFxuICAncmF0aW5nX3ZvdGVzJyxcbiAgJ3JhdGluZycsXG4gICdyYXRpbmdfcGVyY2VudCcsXG4gICdyZXZpc2lvbnMnLFxuICAndGFncycsXG4gICdfdGFncycsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFBhZ2Ugc2VhcmNoIHF1ZXJ5XG4gKi9cbmV4cG9ydCBjbGFzcyBTZWFyY2hQYWdlc1F1ZXJ5IHtcbiAgLyoqIFBhZ2UgdHlwZSAqL1xuICBwYWdldHlwZTogc3RyaW5nO1xuICAvKiogQ2F0ZWdvcnkgKi9cbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgLyoqIFRhZ3MgKi9cbiAgdGFnczogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuICAvKiogUGFyZW50IHBhZ2UgKi9cbiAgcGFyZW50OiBzdHJpbmcgfCBudWxsO1xuICAvKiogTGluayB0YXJnZXQgKi9cbiAgbGlua1RvOiBzdHJpbmcgfCBudWxsO1xuICAvKiogQ3JlYXRlZCBkYXRlIGNvbmRpdGlvbiAqL1xuICBjcmVhdGVkQXQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBVcGRhdGVkIGRhdGUgY29uZGl0aW9uICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIENyZWF0b3IgKi9cbiAgY3JlYXRlZEJ5OiBBYnN0cmFjdFVzZXIgfCBzdHJpbmcgfCBudWxsO1xuICAvKiogUmF0aW5nIGNvbmRpdGlvbiAqL1xuICByYXRpbmc6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBWb3RlIGNvdW50IGNvbmRpdGlvbiAqL1xuICB2b3Rlczogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFBhZ2UgbmFtZSBjb25kaXRpb24gKi9cbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIEZ1bGxuYW1lIGNvbmRpdGlvbiAqL1xuICBmdWxsbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFJhbmdlICovXG4gIHJhbmdlOiBzdHJpbmcgfCBudWxsO1xuICAvKiogU29ydCBvcmRlciAqL1xuICBvcmRlcjogc3RyaW5nO1xuICAvKiogT2Zmc2V0ICovXG4gIG9mZnNldDogbnVtYmVyO1xuICAvKiogUmVzdWx0IGxpbWl0ICovXG4gIGxpbWl0OiBudW1iZXIgfCBudWxsO1xuICAvKiogSXRlbXMgcGVyIHBhZ2UgKi9cbiAgcGVyUGFnZTogbnVtYmVyO1xuICAvKiogU2VwYXJhdGUgZGlzcGxheSAqL1xuICBzZXBhcmF0ZTogc3RyaW5nO1xuICAvKiogV3JhcHBlciBkaXNwbGF5ICovXG4gIHdyYXBwZXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJhbXM6IFNlYXJjaFBhZ2VzUXVlcnlQYXJhbXMgPSB7fSkge1xuICAgIHRoaXMucGFnZXR5cGUgPSBwYXJhbXMucGFnZXR5cGUgPz8gJyonO1xuICAgIHRoaXMuY2F0ZWdvcnkgPSBwYXJhbXMuY2F0ZWdvcnkgPz8gJyonO1xuICAgIHRoaXMudGFncyA9IHBhcmFtcy50YWdzID8/IG51bGw7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJhbXMucGFyZW50ID8/IG51bGw7XG4gICAgdGhpcy5saW5rVG8gPSBwYXJhbXMubGlua1RvID8/IG51bGw7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBwYXJhbXMuY3JlYXRlZEF0ID8/IG51bGw7XG4gICAgdGhpcy51cGRhdGVkQXQgPSBwYXJhbXMudXBkYXRlZEF0ID8/IG51bGw7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBwYXJhbXMuY3JlYXRlZEJ5ID8/IG51bGw7XG4gICAgdGhpcy5yYXRpbmcgPSBwYXJhbXMucmF0aW5nID8/IG51bGw7XG4gICAgdGhpcy52b3RlcyA9IHBhcmFtcy52b3RlcyA/PyBudWxsO1xuICAgIHRoaXMubmFtZSA9IHBhcmFtcy5uYW1lID8/IG51bGw7XG4gICAgdGhpcy5mdWxsbmFtZSA9IHBhcmFtcy5mdWxsbmFtZSA/PyBudWxsO1xuICAgIHRoaXMucmFuZ2UgPSBwYXJhbXMucmFuZ2UgPz8gbnVsbDtcbiAgICB0aGlzLm9yZGVyID0gcGFyYW1zLm9yZGVyID8/ICdjcmVhdGVkX2F0IGRlc2MnO1xuICAgIHRoaXMub2Zmc2V0ID0gcGFyYW1zLm9mZnNldCA/PyAwO1xuICAgIHRoaXMubGltaXQgPSBwYXJhbXMubGltaXQgPz8gbnVsbDtcbiAgICB0aGlzLnBlclBhZ2UgPSBwYXJhbXMucGVyUGFnZSA/PyBERUZBVUxUX1BFUl9QQUdFO1xuICAgIHRoaXMuc2VwYXJhdGUgPSBwYXJhbXMuc2VwYXJhdGUgPz8gJ25vJztcbiAgICB0aGlzLndyYXBwZXIgPSBwYXJhbXMud3JhcHBlciA/PyAnbm8nO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gZGljdGlvbmFyeSBmb3JtYXRcbiAgICovXG4gIGFzRGljdCgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgaWYgKHRoaXMucGFnZXR5cGUgIT09ICcqJykgcmVzdWx0LnBhZ2V0eXBlID0gdGhpcy5wYWdldHlwZTtcbiAgICBpZiAodGhpcy5jYXRlZ29yeSAhPT0gJyonKSByZXN1bHQuY2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3J5O1xuICAgIGlmICh0aGlzLnRhZ3MgIT09IG51bGwpIHtcbiAgICAgIHJlc3VsdC50YWdzID0gQXJyYXkuaXNBcnJheSh0aGlzLnRhZ3MpID8gdGhpcy50YWdzLmpvaW4oJyAnKSA6IHRoaXMudGFncztcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyZW50ICE9PSBudWxsKSByZXN1bHQucGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgaWYgKHRoaXMubGlua1RvICE9PSBudWxsKSByZXN1bHQubGlua190byA9IHRoaXMubGlua1RvO1xuICAgIGlmICh0aGlzLmNyZWF0ZWRBdCAhPT0gbnVsbCkgcmVzdWx0LmNyZWF0ZWRfYXQgPSB0aGlzLmNyZWF0ZWRBdDtcbiAgICBpZiAodGhpcy51cGRhdGVkQXQgIT09IG51bGwpIHJlc3VsdC51cGRhdGVkX2F0ID0gdGhpcy51cGRhdGVkQXQ7XG4gICAgaWYgKHRoaXMuY3JlYXRlZEJ5ICE9PSBudWxsKSB7XG4gICAgICByZXN1bHQuY3JlYXRlZF9ieSA9IHR5cGVvZiB0aGlzLmNyZWF0ZWRCeSA9PT0gJ3N0cmluZycgPyB0aGlzLmNyZWF0ZWRCeSA6IHRoaXMuY3JlYXRlZEJ5Lm5hbWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnJhdGluZyAhPT0gbnVsbCkgcmVzdWx0LnJhdGluZyA9IHRoaXMucmF0aW5nO1xuICAgIGlmICh0aGlzLnZvdGVzICE9PSBudWxsKSByZXN1bHQudm90ZXMgPSB0aGlzLnZvdGVzO1xuICAgIGlmICh0aGlzLm5hbWUgIT09IG51bGwpIHJlc3VsdC5uYW1lID0gdGhpcy5uYW1lO1xuICAgIGlmICh0aGlzLmZ1bGxuYW1lICE9PSBudWxsKSByZXN1bHQuZnVsbG5hbWUgPSB0aGlzLmZ1bGxuYW1lO1xuICAgIGlmICh0aGlzLnJhbmdlICE9PSBudWxsKSByZXN1bHQucmFuZ2UgPSB0aGlzLnJhbmdlO1xuXG4gICAgcmVzdWx0Lm9yZGVyID0gdGhpcy5vcmRlcjtcbiAgICByZXN1bHQub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgaWYgKHRoaXMubGltaXQgIT09IG51bGwpIHJlc3VsdC5saW1pdCA9IHRoaXMubGltaXQ7XG4gICAgcmVzdWx0LnBlclBhZ2UgPSB0aGlzLnBlclBhZ2U7XG4gICAgcmVzdWx0LnNlcGFyYXRlID0gdGhpcy5zZXBhcmF0ZTtcbiAgICByZXN1bHQud3JhcHBlciA9IHRoaXMud3JhcHBlcjtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbmltcG9ydCB7IE5vRWxlbWVudEVycm9yLCBVbmV4cGVjdGVkRXJyb3IgfSBmcm9tICcuLi8uLi9jb21tb24vZXJyb3JzJztcbmltcG9ydCB7IGZyb21Qcm9taXNlLCB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBwYXJzZU9kYXRlLCBwYXJzZVVzZXIgfSBmcm9tICcuLi8uLi91dGlsL3BhcnNlcic7XG5pbXBvcnQgdHlwZSB7IFNpdGUgfSBmcm9tICcuLi9zaXRlJztcbmltcG9ydCB0eXBlIHsgQWJzdHJhY3RVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5cbi8qKlxuICogU2l0ZSBjaGFuZ2UgaGlzdG9yeSBkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2l0ZUNoYW5nZURhdGEge1xuICBzaXRlOiBTaXRlO1xuICBwYWdlRnVsbG5hbWU6IHN0cmluZztcbiAgcGFnZVRpdGxlOiBzdHJpbmc7XG4gIHJldmlzaW9uTm86IG51bWJlcjtcbiAgY2hhbmdlZEJ5OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBjaGFuZ2VkQXQ6IERhdGUgfCBudWxsO1xuICBmbGFnczogc3RyaW5nW107XG4gIGNvbW1lbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTaXRlIGNoYW5nZSBoaXN0b3J5XG4gKi9cbmV4cG9ydCBjbGFzcyBTaXRlQ2hhbmdlIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG4gIHB1YmxpYyByZWFkb25seSBwYWdlRnVsbG5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhZ2VUaXRsZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmV2aXNpb25ObzogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlZEJ5OiBBYnN0cmFjdFVzZXIgfCBudWxsO1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlZEF0OiBEYXRlIHwgbnVsbDtcbiAgcHVibGljIHJlYWRvbmx5IGZsYWdzOiBzdHJpbmdbXTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbW1lbnQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTaXRlQ2hhbmdlRGF0YSkge1xuICAgIHRoaXMuc2l0ZSA9IGRhdGEuc2l0ZTtcbiAgICB0aGlzLnBhZ2VGdWxsbmFtZSA9IGRhdGEucGFnZUZ1bGxuYW1lO1xuICAgIHRoaXMucGFnZVRpdGxlID0gZGF0YS5wYWdlVGl0bGU7XG4gICAgdGhpcy5yZXZpc2lvbk5vID0gZGF0YS5yZXZpc2lvbk5vO1xuICAgIHRoaXMuY2hhbmdlZEJ5ID0gZGF0YS5jaGFuZ2VkQnk7XG4gICAgdGhpcy5jaGFuZ2VkQXQgPSBkYXRhLmNoYW5nZWRBdDtcbiAgICB0aGlzLmZsYWdzID0gZGF0YS5mbGFncztcbiAgICB0aGlzLmNvbW1lbnQgPSBkYXRhLmNvbW1lbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhZ2UgVVJMXG4gICAqL1xuICBnZXRQYWdlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2l0ZS5nZXRCYXNlVXJsKCl9LyR7dGhpcy5wYWdlRnVsbG5hbWV9YDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBTaXRlQ2hhbmdlKHBhZ2U9JHt0aGlzLnBhZ2VGdWxsbmFtZX0sIHJldj0ke3RoaXMucmV2aXNpb25Ob30sIGJ5PSR7dGhpcy5jaGFuZ2VkQnl9KWA7XG4gIH1cbn1cblxuLyoqXG4gKiBTaXRlIGNoYW5nZSBoaXN0b3J5IGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFNpdGVDaGFuZ2VDb2xsZWN0aW9uIGV4dGVuZHMgQXJyYXk8U2l0ZUNoYW5nZT4ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2l0ZTogU2l0ZTtcblxuICBjb25zdHJ1Y3RvcihzaXRlOiBTaXRlLCBjaGFuZ2VzPzogU2l0ZUNoYW5nZVtdKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNpdGUgPSBzaXRlO1xuICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICB0aGlzLnB1c2goLi4uY2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWNlbnQgY2hhbmdlIGhpc3RvcnlcbiAgICogQHBhcmFtIHNpdGUgLSBTaXRlIGluc3RhbmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uc1xuICAgKiBAcmV0dXJucyBDaGFuZ2UgaGlzdG9yeSBjb2xsZWN0aW9uXG4gICAqL1xuICBzdGF0aWMgYWNxdWlyZShcbiAgICBzaXRlOiBTaXRlLFxuICAgIG9wdGlvbnM/OiB7IHBlclBhZ2U/OiBudW1iZXI7IHBhZ2U/OiBudW1iZXI7IGxpbWl0PzogbnVtYmVyIH1cbiAgKTogV2lraWRvdFJlc3VsdEFzeW5jPFNpdGVDaGFuZ2VDb2xsZWN0aW9uPiB7XG4gICAgY29uc3QgcGVyUGFnZSA9IG9wdGlvbnM/LnBlclBhZ2UgPz8gMjA7XG4gICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2UgPz8gMTtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnM/LmxpbWl0O1xuXG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2l0ZS5hbWNSZXF1ZXN0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiAnY2hhbmdlcy9TaXRlQ2hhbmdlc0xpc3RNb2R1bGUnLFxuICAgICAgICAgICAgcGVycGFnZTogcGVyUGFnZSxcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQudmFsdWVbMF07XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9FbGVtZW50RXJyb3IoJ0VtcHR5IHJlc3BvbnNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodG1sID0gU3RyaW5nKHJlc3BvbnNlLmJvZHkgPz8gJycpO1xuICAgICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpO1xuICAgICAgICBjb25zdCBjaGFuZ2VzOiBTaXRlQ2hhbmdlW10gPSBbXTtcblxuICAgICAgICAvLyBQYXJzZSB0YWJsZSByb3dzXG4gICAgICAgICQoJ3RhYmxlLndpa2ktY29udGVudC10YWJsZSB0cicpLmVhY2goKF9pLCBlbGVtKSA9PiB7XG4gICAgICAgICAgY29uc3QgJHJvdyA9ICQoZWxlbSk7XG4gICAgICAgICAgY29uc3QgJGNlbGxzID0gJHJvdy5maW5kKCd0ZCcpO1xuICAgICAgICAgIGlmICgkY2VsbHMubGVuZ3RoIDwgNCkgcmV0dXJuO1xuXG4gICAgICAgICAgLy8gUGFnZSBsaW5rXG4gICAgICAgICAgY29uc3QgcGFnZUxpbmsgPSAkKCRjZWxsc1swXSkuZmluZCgnYScpO1xuICAgICAgICAgIGNvbnN0IGhyZWYgPSBwYWdlTGluay5hdHRyKCdocmVmJykgPz8gJyc7XG4gICAgICAgICAgY29uc3QgcGFnZUZ1bGxuYW1lID0gaHJlZi5yZXBsYWNlKC9eXFwvLywgJycpLnNwbGl0KCcvJylbMF0gPz8gJyc7XG4gICAgICAgICAgY29uc3QgcGFnZVRpdGxlID0gcGFnZUxpbmsudGV4dCgpLnRyaW0oKTtcblxuICAgICAgICAgIC8vIFJldmlzaW9uIG51bWJlclxuICAgICAgICAgIGNvbnN0IHJldlRleHQgPSAkKCRjZWxsc1sxXSkudGV4dCgpLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCByZXZNYXRjaCA9IHJldlRleHQubWF0Y2goLyhcXGQrKS8pO1xuICAgICAgICAgIGNvbnN0IHJldmlzaW9uTm8gPSByZXZNYXRjaD8uWzFdID8gTnVtYmVyLnBhcnNlSW50KHJldk1hdGNoWzFdLCAxMCkgOiAwO1xuXG4gICAgICAgICAgLy8gRmxhZ3NcbiAgICAgICAgICBjb25zdCBmbGFnc0NlbGwgPSAkKCRjZWxsc1syXSk7XG4gICAgICAgICAgY29uc3QgZmxhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgZmxhZ3NDZWxsLmZpbmQoJ3NwYW4nKS5lYWNoKChfaiwgZmxhZ0VsZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdDbGFzcyA9ICQoZmxhZ0VsZW0pLmF0dHIoJ2NsYXNzJykgPz8gJyc7XG4gICAgICAgICAgICBpZiAoZmxhZ0NsYXNzLmluY2x1ZGVzKCdzcGFudGlwJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSAkKGZsYWdFbGVtKS5hdHRyKCd0aXRsZScpID8/ICcnO1xuICAgICAgICAgICAgICBpZiAodGl0bGUpIGZsYWdzLnB1c2godGl0bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gVXNlciBhbmQgdGltZXN0YW1wXG4gICAgICAgICAgY29uc3QgaW5mb0NlbGwgPSAkKCRjZWxsc1szXSk7XG4gICAgICAgICAgY29uc3QgdXNlckVsZW0gPSBpbmZvQ2VsbC5maW5kKCdzcGFuLnByaW50dXNlcicpO1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWRCeSA9IHVzZXJFbGVtLmxlbmd0aCA+IDAgPyBwYXJzZVVzZXIoc2l0ZS5jbGllbnQsIHVzZXJFbGVtKSA6IG51bGw7XG5cbiAgICAgICAgICBjb25zdCBvZGF0ZUVsZW0gPSBpbmZvQ2VsbC5maW5kKCdzcGFuLm9kYXRlJyk7XG4gICAgICAgICAgY29uc3QgY2hhbmdlZEF0ID0gb2RhdGVFbGVtLmxlbmd0aCA+IDAgPyBwYXJzZU9kYXRlKG9kYXRlRWxlbSkgOiBudWxsO1xuXG4gICAgICAgICAgLy8gQ29tbWVudFxuICAgICAgICAgIGNvbnN0IGNvbW1lbnRFbGVtID0gaW5mb0NlbGwuZmluZCgnc3Bhbi5jb21tZW50cycpO1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnQgPSBjb21tZW50RWxlbVxuICAgICAgICAgICAgLnRleHQoKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15bXCJcIl18W1wiXCJdJC9nLCAnJyk7XG5cbiAgICAgICAgICBjaGFuZ2VzLnB1c2goXG4gICAgICAgICAgICBuZXcgU2l0ZUNoYW5nZSh7XG4gICAgICAgICAgICAgIHNpdGUsXG4gICAgICAgICAgICAgIHBhZ2VGdWxsbmFtZSxcbiAgICAgICAgICAgICAgcGFnZVRpdGxlLFxuICAgICAgICAgICAgICByZXZpc2lvbk5vLFxuICAgICAgICAgICAgICBjaGFuZ2VkQnksXG4gICAgICAgICAgICAgIGNoYW5nZWRBdCxcbiAgICAgICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIExpbWl0IHJlc3VsdHMgaWYgbGltaXQgaXMgc3BlY2lmaWVkXG4gICAgICAgIGNvbnN0IGxpbWl0ZWRDaGFuZ2VzID0gbGltaXQgIT09IHVuZGVmaW5lZCA/IGNoYW5nZXMuc2xpY2UoMCwgbGltaXQpIDogY2hhbmdlcztcbiAgICAgICAgcmV0dXJuIG5ldyBTaXRlQ2hhbmdlQ29sbGVjdGlvbihzaXRlLCBsaW1pdGVkQ2hhbmdlcyk7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vRWxlbWVudEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW5leHBlY3RlZEVycm9yKGBGYWlsZWQgdG8gYWNxdWlyZSBzaXRlIGNoYW5nZXM6ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG59XG4iLAogICAgImltcG9ydCB7IFVuZXhwZWN0ZWRFcnJvciB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IHBhcnNlVXNlciB9IGZyb20gJy4uLy4uLy4uL3V0aWwvcGFyc2VyJztcbmltcG9ydCB7XG4gIFBhZ2UsXG4gIFBhZ2VDb2xsZWN0aW9uLFxuICBTZWFyY2hQYWdlc1F1ZXJ5LFxuICB0eXBlIFNlYXJjaFBhZ2VzUXVlcnlQYXJhbXMsXG4gIFNpdGVDaGFuZ2VDb2xsZWN0aW9uLFxufSBmcm9tICcuLi8uLi9wYWdlJztcbmltcG9ydCB0eXBlIHsgU2l0ZSB9IGZyb20gJy4uL3NpdGUnO1xuXG4vKipcbiAqIFBhZ2UgbGlzdCBvcGVyYXRpb25zIGFjY2Vzc29yXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWdlc0FjY2Vzc29yIHtcbiAgcHVibGljIHJlYWRvbmx5IHNpdGU6IFNpdGU7XG5cbiAgY29uc3RydWN0b3Ioc2l0ZTogU2l0ZSkge1xuICAgIHRoaXMuc2l0ZSA9IHNpdGU7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIHBhZ2VzIG1hdGNoaW5nIGNvbmRpdGlvbnNcbiAgICogQHBhcmFtIHBhcmFtcyAtIFNlYXJjaCBjb25kaXRpb25zXG4gICAqIEByZXR1cm5zIFBhZ2UgY29sbGVjdGlvblxuICAgKi9cbiAgc2VhcmNoKHBhcmFtcz86IFNlYXJjaFBhZ2VzUXVlcnlQYXJhbXMpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBTZWFyY2hQYWdlc1F1ZXJ5KHBhcmFtcyk7XG4gICAgICAgIGNvbnN0IHVzZXJQYXJzZXIgPSBwYXJzZVVzZXIuYmluZChudWxsLCB0aGlzLnNpdGUuY2xpZW50KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQYWdlQ29sbGVjdGlvbi5zZWFyY2hQYWdlcyh0aGlzLnNpdGUsIHVzZXJQYXJzZXIsIHF1ZXJ5KTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IG5ldyBVbmV4cGVjdGVkRXJyb3IoYEZhaWxlZCB0byBzZWFyY2ggcGFnZXM6ICR7U3RyaW5nKGVycm9yKX1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBwYWdlc1xuICAgKiBAcmV0dXJucyBQYWdlIGNvbGxlY3Rpb25cbiAgICovXG4gIGFsbCgpOiBXaWtpZG90UmVzdWx0QXN5bmM8UGFnZUNvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2goe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWNlbnQgY2hhbmdlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnMucGVyUGFnZSAtIEl0ZW1zIHBlciBwYWdlIChkZWZhdWx0OiAyMClcbiAgICogQHBhcmFtIG9wdGlvbnMucGFnZSAtIFBhZ2UgbnVtYmVyIChkZWZhdWx0OiAxKVxuICAgKiBAcmV0dXJucyBDaGFuZ2UgaGlzdG9yeSBjb2xsZWN0aW9uXG4gICAqL1xuICBnZXRSZWNlbnRDaGFuZ2VzKG9wdGlvbnM/OiB7XG4gICAgcGVyUGFnZT86IG51bWJlcjtcbiAgICBwYWdlPzogbnVtYmVyO1xuICB9KTogV2lraWRvdFJlc3VsdEFzeW5jPFNpdGVDaGFuZ2VDb2xsZWN0aW9uPiB7XG4gICAgcmV0dXJuIFNpdGVDaGFuZ2VDb2xsZWN0aW9uLmFjcXVpcmUodGhpcy5zaXRlLCBvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQge1xuICBQYWdlLFxuICBQYWdlQ29sbGVjdGlvbixcbiAgU2VhcmNoUGFnZXNRdWVyeSxcbiAgU2l0ZUNoYW5nZUNvbGxlY3Rpb24sXG4gIHR5cGUgU2VhcmNoUGFnZXNRdWVyeVBhcmFtcyxcbn07XG4iLAogICAgImltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG5pbXBvcnQgeyBOb0VsZW1lbnRFcnJvciwgTm90Rm91bmRFeGNlcHRpb24sIFVuZXhwZWN0ZWRFcnJvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHsgZnJvbVByb21pc2UsIHR5cGUgV2lraWRvdFJlc3VsdEFzeW5jIH0gZnJvbSAnLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQU1DUmVxdWVzdEJvZHksIEFNQ1Jlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY29ubmVjdG9yJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50L2NsaWVudCc7XG5pbXBvcnQgeyBGb3J1bUFjY2Vzc29yIH0gZnJvbSAnLi9hY2Nlc3NvcnMvZm9ydW0tYWNjZXNzb3InO1xuaW1wb3J0IHsgTWVtYmVyQWNjZXNzb3IgfSBmcm9tICcuL2FjY2Vzc29ycy9tZW1iZXItYWNjZXNzb3InO1xuaW1wb3J0IHsgUGFnZUFjY2Vzc29yIH0gZnJvbSAnLi9hY2Nlc3NvcnMvcGFnZS1hY2Nlc3Nvcic7XG5pbXBvcnQgeyBQYWdlc0FjY2Vzc29yIH0gZnJvbSAnLi9hY2Nlc3NvcnMvcGFnZXMtYWNjZXNzb3InO1xuXG4vKipcbiAqIFNpdGUgZGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpdGVEYXRhIHtcbiAgaWQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgdW5peE5hbWU6IHN0cmluZztcbiAgZG9tYWluOiBzdHJpbmc7XG4gIHNzbFN1cHBvcnRlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTaXRlIGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBTaXRlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50O1xuXG4gIC8qKiBTaXRlIElEICovXG4gIHB1YmxpYyByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKiBTaXRlIHRpdGxlICovXG4gIHB1YmxpYyByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuXG4gIC8qKiBVTklYIG5hbWUgKGUuZy4sIHNjcC1qcCkgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVuaXhOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIERvbWFpbiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluOiBzdHJpbmc7XG5cbiAgLyoqIFNTTCBzdXBwb3J0IGZsYWcgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNzbFN1cHBvcnRlZDogYm9vbGVhbjtcblxuICAvKiogUGFnZSBhY2Nlc3NvciAqL1xuICBwcml2YXRlIF9wYWdlOiBQYWdlQWNjZXNzb3IgfCBudWxsID0gbnVsbDtcblxuICAvKiogUGFnZXMgYWNjZXNzb3IgKi9cbiAgcHJpdmF0ZSBfcGFnZXM6IFBhZ2VzQWNjZXNzb3IgfCBudWxsID0gbnVsbDtcblxuICAvKiogRm9ydW0gYWNjZXNzb3IgKi9cbiAgcHJpdmF0ZSBfZm9ydW06IEZvcnVtQWNjZXNzb3IgfCBudWxsID0gbnVsbDtcblxuICAvKiogTWVtYmVyIGFjY2Vzc29yICovXG4gIHByaXZhdGUgX21lbWJlcjogTWVtYmVyQWNjZXNzb3IgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IENsaWVudCwgZGF0YTogU2l0ZURhdGEpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICB0aGlzLnRpdGxlID0gZGF0YS50aXRsZTtcbiAgICB0aGlzLnVuaXhOYW1lID0gZGF0YS51bml4TmFtZTtcbiAgICB0aGlzLmRvbWFpbiA9IGRhdGEuZG9tYWluO1xuICAgIHRoaXMuc3NsU3VwcG9ydGVkID0gZGF0YS5zc2xTdXBwb3J0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhZ2UgYWNjZXNzb3JcbiAgICovXG4gIGdldCBwYWdlKCk6IFBhZ2VBY2Nlc3NvciB7XG4gICAgaWYgKCF0aGlzLl9wYWdlKSB7XG4gICAgICB0aGlzLl9wYWdlID0gbmV3IFBhZ2VBY2Nlc3Nvcih0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhZ2VzIGFjY2Vzc29yXG4gICAqL1xuICBnZXQgcGFnZXMoKTogUGFnZXNBY2Nlc3NvciB7XG4gICAgaWYgKCF0aGlzLl9wYWdlcykge1xuICAgICAgdGhpcy5fcGFnZXMgPSBuZXcgUGFnZXNBY2Nlc3Nvcih0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmb3J1bSBhY2Nlc3NvclxuICAgKi9cbiAgZ2V0IGZvcnVtKCk6IEZvcnVtQWNjZXNzb3Ige1xuICAgIGlmICghdGhpcy5fZm9ydW0pIHtcbiAgICAgIHRoaXMuX2ZvcnVtID0gbmV3IEZvcnVtQWNjZXNzb3IodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mb3J1bTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWVtYmVyIGFjY2Vzc29yXG4gICAqL1xuICBnZXQgbWVtYmVyKCk6IE1lbWJlckFjY2Vzc29yIHtcbiAgICBpZiAoIXRoaXMuX21lbWJlcikge1xuICAgICAgdGhpcy5fbWVtYmVyID0gbmV3IE1lbWJlckFjY2Vzc29yKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbWVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBiYXNlIFVSTCBvZiB0aGUgc2l0ZVxuICAgKi9cbiAgZ2V0QmFzZVVybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByb3RvY29sID0gdGhpcy5zc2xTdXBwb3J0ZWQgPyAnaHR0cHMnIDogJ2h0dHAnO1xuICAgIHJldHVybiBgJHtwcm90b2NvbH06Ly8ke3RoaXMuZG9tYWlufWA7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBBTUMgcmVxdWVzdCB0byB0aGlzIHNpdGVcbiAgICogQHBhcmFtIGJvZGllcyAtIFJlcXVlc3QgYm9keSBhcnJheVxuICAgKiBAcmV0dXJucyBBTUMgcmVzcG9uc2UgYXJyYXlcbiAgICovXG4gIGFtY1JlcXVlc3QoYm9kaWVzOiBBTUNSZXF1ZXN0Qm9keVtdKTogV2lraWRvdFJlc3VsdEFzeW5jPEFNQ1Jlc3BvbnNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuYW1jQ2xpZW50LnJlcXVlc3QoYm9kaWVzLCB0aGlzLnVuaXhOYW1lLCB0aGlzLnNzbFN1cHBvcnRlZCk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHNpbmdsZSBBTUMgcmVxdWVzdFxuICAgKiBAcGFyYW0gYm9keSAtIFJlcXVlc3QgYm9keVxuICAgKiBAcmV0dXJucyBBTUMgcmVzcG9uc2VcbiAgICovXG4gIGFtY1JlcXVlc3RTaW5nbGUoYm9keTogQU1DUmVxdWVzdEJvZHkpOiBXaWtpZG90UmVzdWx0QXN5bmM8QU1DUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2UoXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFtY1JlcXVlc3QoW2JvZHldKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcignQU1DIHJlcXVlc3QgcmV0dXJuZWQgZW1wdHkgcmVzcG9uc2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICB9KSgpLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFVuZXhwZWN0ZWRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgQU1DIHJlcXVlc3QgZmFpbGVkOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2l0ZSBmcm9tIFVOSVggbmFtZVxuICAgKiBAcGFyYW0gY2xpZW50IC0gQ2xpZW50XG4gICAqIEBwYXJhbSB1bml4TmFtZSAtIFNpdGUgVU5JWCBuYW1lIChlLmcuLCAnc2NwLWpwJylcbiAgICogQHJldHVybnMgU2l0ZVxuICAgKi9cbiAgc3RhdGljIGZyb21Vbml4TmFtZShjbGllbnQ6IENsaWVudCwgdW5peE5hbWU6IHN0cmluZyk6IFdpa2lkb3RSZXN1bHRBc3luYzxTaXRlPiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlKFxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gRmV0Y2ggc2l0ZSBwYWdlIChIVFRQIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHMpXG4gICAgICAgIGNvbnN0IHVybCA9IGBodHRwOi8vJHt1bml4TmFtZX0ud2lraWRvdC5jb21gO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgIGhlYWRlcnM6IGNsaWVudC5hbWNDbGllbnQuaGVhZGVyLmdldEhlYWRlcnMoKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKGBTaXRlIG5vdCBmb3VuZDogJHt1bml4TmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGZldGNoIHNpdGU6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHRtbCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgY29uc3QgJCA9IGNoZWVyaW8ubG9hZChodG1sKTtcblxuICAgICAgICAvLyBQYXJzZSBXSUtJUkVRVUVTVC5pbmZvXG4gICAgICAgIGNvbnN0IHNjcmlwdHMgPSAkKCdzY3JpcHQnKS50b0FycmF5KCk7XG4gICAgICAgIGxldCBzaXRlSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgICBsZXQgc2l0ZVVuaXhOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGRvbWFpbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgZm9yIChjb25zdCBzY3JpcHQgb2Ygc2NyaXB0cykge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAkKHNjcmlwdCkuaHRtbCgpO1xuICAgICAgICAgIGlmICghY29udGVudCB8fCAhY29udGVudC5pbmNsdWRlcygnV0lLSVJFUVVFU1QnKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc2l0ZUlkXG4gICAgICAgICAgY29uc3Qgc2l0ZUlkTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9XSUtJUkVRVUVTVFxcLmluZm9cXC5zaXRlSWRcXHMqPVxccyooXFxkKykvKTtcbiAgICAgICAgICBpZiAoc2l0ZUlkTWF0Y2g/LlsxXSkge1xuICAgICAgICAgICAgc2l0ZUlkID0gTnVtYmVyLnBhcnNlSW50KHNpdGVJZE1hdGNoWzFdLCAxMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc2l0ZVVuaXhOYW1lXG4gICAgICAgICAgY29uc3Qgc2l0ZVVuaXhOYW1lTWF0Y2ggPSBjb250ZW50Lm1hdGNoKFxuICAgICAgICAgICAgL1dJS0lSRVFVRVNUXFwuaW5mb1xcLnNpdGVVbml4TmFtZVxccyo9XFxzKltcIiddKFteXCInXSspW1wiJ10vXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc2l0ZVVuaXhOYW1lTWF0Y2g/LlsxXSkge1xuICAgICAgICAgICAgc2l0ZVVuaXhOYW1lID0gc2l0ZVVuaXhOYW1lTWF0Y2hbMV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZG9tYWluXG4gICAgICAgICAgY29uc3QgZG9tYWluTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9XSUtJUkVRVUVTVFxcLmluZm9cXC5kb21haW5cXHMqPVxccypbXCInXShbXlwiJ10rKVtcIiddLyk7XG4gICAgICAgICAgaWYgKGRvbWFpbk1hdGNoPy5bMV0pIHtcbiAgICAgICAgICAgIGRvbWFpbiA9IGRvbWFpbk1hdGNoWzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRpdGxlIGZyb20gPHRpdGxlPiB0YWdcbiAgICAgICAgdGl0bGUgPSAkKCd0aXRsZScpLnRleHQoKS50cmltKCkgfHwgbnVsbDtcbiAgICAgICAgLy8gUmVtb3ZlIFwiIC0gV2lraWRvdFwiIHN1ZmZpeCBpZiBwcmVzZW50XG4gICAgICAgIGlmICh0aXRsZT8uZW5kc1dpdGgoJyAtIFdpa2lkb3QnKSkge1xuICAgICAgICAgIHRpdGxlID0gdGl0bGUuc2xpY2UoMCwgLTEwKS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2l0ZUlkID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRWxlbWVudEVycm9yKCdTaXRlIElEIG5vdCBmb3VuZCBpbiBXSUtJUkVRVUVTVCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaXRlVW5peE5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICBzaXRlVW5peE5hbWUgPSB1bml4TmFtZTsgLy8gRmFsbGJhY2tcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tYWluID09PSBudWxsKSB7XG4gICAgICAgICAgZG9tYWluID0gYCR7dW5peE5hbWV9Lndpa2lkb3QuY29tYDsgLy8gRmFsbGJhY2tcbiAgICAgICAgfVxuICAgICAgICBpZiAodGl0bGUgPT09IG51bGwpIHtcbiAgICAgICAgICB0aXRsZSA9IHVuaXhOYW1lOyAvLyBGYWxsYmFja1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgU1NMIHN1cHBvcnQgKGJhc2VkIG9uIHdoZXRoZXIgdGhlIHJlZGlyZWN0IFVSTCBzdGFydHMgd2l0aCBodHRwcylcbiAgICAgICAgY29uc3Qgc3NsU3VwcG9ydGVkID0gcmVzcG9uc2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzJyk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTaXRlKGNsaWVudCwge1xuICAgICAgICAgIGlkOiBzaXRlSWQsXG4gICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgdW5peE5hbWU6IHNpdGVVbml4TmFtZSxcbiAgICAgICAgICBkb21haW4sXG4gICAgICAgICAgc3NsU3VwcG9ydGVkLFxuICAgICAgICB9KTtcbiAgICAgIH0pKCksXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFeGNlcHRpb24gfHwgZXJyb3IgaW5zdGFuY2VvZiBOb0VsZW1lbnRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVuZXhwZWN0ZWRFcnJvcihgRmFpbGVkIHRvIGdldCBzaXRlOiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBTaXRlKGlkPSR7dGhpcy5pZH0sIHVuaXhOYW1lPSR7dGhpcy51bml4TmFtZX0sIHRpdGxlPSR7dGhpcy50aXRsZX0pYDtcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdpa2lkb3RSZXN1bHRBc3luYyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBTaXRlIH0gZnJvbSAnLi4vLi4vc2l0ZSc7XG5pbXBvcnQgdHlwZSB7IENsaWVudCB9IGZyb20gJy4uL2NsaWVudCc7XG5cbi8qKlxuICogU2l0ZSBvcGVyYXRpb25zIGFjY2Vzc29yXG4gKi9cbmV4cG9ydCBjbGFzcyBTaXRlQWNjZXNzb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnQpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2l0ZSBieSBVTklYIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHVuaXhOYW1lIC0gU2l0ZSBVTklYIG5hbWUgKGUuZy4sICdzY3AtanAnKVxuICAgKiBAcmV0dXJucyBTaXRlIG9iamVjdCB3cmFwcGVkIGluIFJlc3VsdCB0eXBlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc2l0ZVJlc3VsdCA9IGF3YWl0IGNsaWVudC5zaXRlLmdldCgnc2NwLWpwJyk7XG4gICAqIGlmICghc2l0ZVJlc3VsdC5pc09rKCkpIHtcbiAgICogICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgc2l0ZScpO1xuICAgKiB9XG4gICAqIGNvbnN0IHNpdGUgPSBzaXRlUmVzdWx0LnZhbHVlO1xuICAgKiBgYGBcbiAgICovXG4gIGdldCh1bml4TmFtZTogc3RyaW5nKTogV2lraWRvdFJlc3VsdEFzeW5jPFNpdGU+IHtcbiAgICByZXR1cm4gU2l0ZS5mcm9tVW5peE5hbWUodGhpcy5jbGllbnQsIHVuaXhOYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgeyBTaXRlIH07XG4iLAogICAgImltcG9ydCB7IE5vdEZvdW5kRXhjZXB0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Vycm9ycyc7XG5pbXBvcnQgeyB0eXBlIFdpa2lkb3RSZXN1bHRBc3luYywgd2RFcnJBc3luYywgd2RPa0FzeW5jIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFVzZXIsIHR5cGUgVXNlckNvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi91c2VyJztcbmltcG9ydCB0eXBlIHsgQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcblxuLyoqXG4gKiBVc2VyIHJldHJpZXZhbCBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0VXNlck9wdGlvbnMge1xuICAvKiogVGhyb3cgZXJyb3IgaWYgdXNlciBub3QgZm91bmQgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICByYWlzZVdoZW5Ob3RGb3VuZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVXNlciBvcGVyYXRpb25zIGFjY2Vzc29yXG4gKi9cbmV4cG9ydCBjbGFzcyBVc2VyQWNjZXNzb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBDbGllbnQpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBieSB1c2VybmFtZVxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFVzZXJuYW1lXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmV0cmlldmFsIG9wdGlvbnNcbiAgICogQHJldHVybnMgVXNlciB3cmFwcGVkIGluIFJlc3VsdCB0eXBlIChudWxsIGlmIG5vdCBmb3VuZCwgZXJyb3IgaWYgcmFpc2VXaGVuTm90Rm91bmQgaXMgdHJ1ZSlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB1c2VyUmVzdWx0ID0gYXdhaXQgY2xpZW50LnVzZXIuZ2V0KCd1c2VybmFtZScpO1xuICAgKiBpZiAoIXVzZXJSZXN1bHQuaXNPaygpKSB7XG4gICAqICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IHVzZXInKTtcbiAgICogfVxuICAgKiBjb25zdCB1c2VyID0gdXNlclJlc3VsdC52YWx1ZTtcbiAgICogYGBgXG4gICAqL1xuICBnZXQobmFtZTogc3RyaW5nLCBvcHRpb25zOiBHZXRVc2VyT3B0aW9ucyA9IHt9KTogV2lraWRvdFJlc3VsdEFzeW5jPFVzZXIgfCBudWxsPiB7XG4gICAgY29uc3QgeyByYWlzZVdoZW5Ob3RGb3VuZCA9IGZhbHNlIH0gPSBvcHRpb25zO1xuXG4gICAgcmV0dXJuIFVzZXIuZnJvbU5hbWUodGhpcy5jbGllbnQsIG5hbWUpLmFuZFRoZW4oKHVzZXIpID0+IHtcbiAgICAgIGlmICh1c2VyID09PSBudWxsICYmIHJhaXNlV2hlbk5vdEZvdW5kKSB7XG4gICAgICAgIHJldHVybiB3ZEVyckFzeW5jKG5ldyBOb3RGb3VuZEV4Y2VwdGlvbihgVXNlciBub3QgZm91bmQ6ICR7bmFtZX1gKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2RPa0FzeW5jKHVzZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VycyBmcm9tIG11bHRpcGxlIHVzZXJuYW1lc1xuICAgKiBAcGFyYW0gbmFtZXMgLSBBcnJheSBvZiB1c2VybmFtZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZXRyaWV2YWwgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBVc2VyIGNvbGxlY3Rpb24gKG51bGwgZm9yIG5vbi1leGlzdGVudCB1c2VycywgZXJyb3IgaWYgcmFpc2VXaGVuTm90Rm91bmQgaXMgdHJ1ZSlcbiAgICovXG4gIGdldE1hbnkobmFtZXM6IHN0cmluZ1tdLCBvcHRpb25zOiBHZXRVc2VyT3B0aW9ucyA9IHt9KTogV2lraWRvdFJlc3VsdEFzeW5jPFVzZXJDb2xsZWN0aW9uPiB7XG4gICAgY29uc3QgeyByYWlzZVdoZW5Ob3RGb3VuZCA9IGZhbHNlIH0gPSBvcHRpb25zO1xuXG4gICAgcmV0dXJuIFVzZXIuZnJvbU5hbWVzKHRoaXMuY2xpZW50LCBuYW1lcykuYW5kVGhlbigoY29sbGVjdGlvbikgPT4ge1xuICAgICAgaWYgKHJhaXNlV2hlbk5vdEZvdW5kKSB7XG4gICAgICAgIGNvbnN0IG5vdEZvdW5kTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gbmFtZXNbaV07XG4gICAgICAgICAgaWYgKGNvbGxlY3Rpb25baV0gPT09IG51bGwgJiYgbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBub3RGb3VuZE5hbWVzLnB1c2gobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub3RGb3VuZE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gd2RFcnJBc3luYyhuZXcgTm90Rm91bmRFeGNlcHRpb24oYFVzZXJzIG5vdCBmb3VuZDogJHtub3RGb3VuZE5hbWVzLmpvaW4oJywgJyl9YCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gd2RPa0FzeW5jKGNvbGxlY3Rpb24pO1xuICAgIH0pO1xuICB9XG59XG4iLAogICAgImltcG9ydCB7IExvZ2luUmVxdWlyZWRFcnJvciB9IGZyb20gJy4uLy4uL2NvbW1vbi9lcnJvcnMnO1xuaW1wb3J0IHtcbiAgZnJvbVByb21pc2UsXG4gIHR5cGUgV2lraWRvdFJlc3VsdCxcbiAgdHlwZSBXaWtpZG90UmVzdWx0QXN5bmMsXG4gIHdkRXJyLFxuICB3ZE9rLFxuICB3ZE9rQXN5bmMsXG59IGZyb20gJy4uLy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBBTUNDbGllbnQsIHR5cGUgQU1DQ29uZmlnLCBsb2dpbiwgbG9nb3V0IH0gZnJvbSAnLi4vLi4vY29ubmVjdG9yJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi91c2VyL3VzZXInO1xuaW1wb3J0IHsgUHJpdmF0ZU1lc3NhZ2VBY2Nlc3NvciB9IGZyb20gJy4vYWNjZXNzb3JzL3BtLWFjY2Vzc29yJztcbmltcG9ydCB7IFNpdGVBY2Nlc3NvciB9IGZyb20gJy4vYWNjZXNzb3JzL3NpdGUtYWNjZXNzb3InO1xuaW1wb3J0IHsgVXNlckFjY2Vzc29yIH0gZnJvbSAnLi9hY2Nlc3NvcnMvdXNlci1hY2Nlc3Nvcic7XG5cbi8qKlxuICogQ2xpZW50IGNyZWF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGllbnRPcHRpb25zIHtcbiAgLyoqIFdpa2lkb3QgdXNlcm5hbWUgKi9cbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIFdpa2lkb3QgcGFzc3dvcmQgKi9cbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG5cbiAgLyoqIEJhc2UgZG9tYWluIChkZWZhdWx0OiB3aWtpZG90LmNvbSkgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKiBBTUMgY29uZmlndXJhdGlvbiBvdmVycmlkZSAqL1xuICBhbWNDb25maWc/OiBQYXJ0aWFsPEFNQ0NvbmZpZz47XG59XG5cbi8qKlxuICogV2lraWRvdCBjbGllbnRcbiAqIE1haW4gZW50cnkgcG9pbnQgb2YgdGhlIGxpYnJhcnlcbiAqL1xuZXhwb3J0IGNsYXNzIENsaWVudCB7XG4gIC8qKiBBTUMgY2xpZW50ICovXG4gIHB1YmxpYyByZWFkb25seSBhbWNDbGllbnQ6IEFNQ0NsaWVudDtcblxuICAvKiogQmFzZSBkb21haW4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbjogc3RyaW5nO1xuXG4gIC8qKiBVc2VyIG9wZXJhdGlvbnMgYWNjZXNzb3IgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXI6IFVzZXJBY2Nlc3NvcjtcblxuICAvKiogU2l0ZSBvcGVyYXRpb25zIGFjY2Vzc29yICovXG4gIHB1YmxpYyByZWFkb25seSBzaXRlOiBTaXRlQWNjZXNzb3I7XG5cbiAgLyoqIFByaXZhdGUgbWVzc2FnZSBvcGVyYXRpb25zIGFjY2Vzc29yICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlTWVzc2FnZTogUHJpdmF0ZU1lc3NhZ2VBY2Nlc3NvcjtcblxuICAvKiogVXNlcm5hbWUgb2YgdGhlIGxvZ2dlZC1pbiB1c2VyICovXG4gIHByaXZhdGUgX3VzZXJuYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKiBMb2dnZWQtaW4gdXNlciAqL1xuICBwcml2YXRlIF9tZTogVXNlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIGNvbnN0cnVjdG9yXG4gICAqIFVzZSB0aGUgY3JlYXRlIG1ldGhvZCB0byBjcmVhdGUgYW4gaW5zdGFuY2VcbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IoYW1jQ2xpZW50OiBBTUNDbGllbnQsIGRvbWFpbjogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICB0aGlzLmFtY0NsaWVudCA9IGFtY0NsaWVudDtcbiAgICB0aGlzLmRvbWFpbiA9IGRvbWFpbjtcbiAgICB0aGlzLl91c2VybmFtZSA9IHVzZXJuYW1lO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhY2Nlc3NvcnNcbiAgICB0aGlzLnVzZXIgPSBuZXcgVXNlckFjY2Vzc29yKHRoaXMpO1xuICAgIHRoaXMuc2l0ZSA9IG5ldyBTaXRlQWNjZXNzb3IodGhpcyk7XG4gICAgdGhpcy5wcml2YXRlTWVzc2FnZSA9IG5ldyBQcml2YXRlTWVzc2FnZUFjY2Vzc29yKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdXNlcm5hbWUgb2YgdGhlIGxvZ2dlZC1pbiB1c2VyXG4gICAqL1xuICBnZXQgdXNlcm5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9nZ2VkLWluIHVzZXJcbiAgICogUmV0dXJucyBudWxsIGlmIG5vdCBsb2dnZWQgaW5cbiAgICovXG4gIGdldCBtZSgpOiBVc2VyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX21lO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsaWVudFxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENsaWVudCBvcHRpb25zXG4gICAqIEByZXR1cm5zIENsaWVudCBpbnN0YW5jZSB3cmFwcGVkIGluIFJlc3VsdCB0eXBlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnQHVrd2hhdG4vd2lraWRvdCc7XG4gICAqXG4gICAqIC8vIENyZWF0ZSBhIGNsaWVudFxuICAgKiBjb25zdCBjbGllbnRSZXN1bHQgPSBhd2FpdCBDbGllbnQuY3JlYXRlKHtcbiAgICogICB1c2VybmFtZTogJ3lvdXJfdXNlcm5hbWUnLFxuICAgKiAgIHBhc3N3b3JkOiAneW91cl9wYXNzd29yZCcsXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBSZXN1bHQgdHlwZSByZXF1aXJlcyBpc09rKCkgY2hlY2sgYmVmb3JlIGFjY2Vzc2luZyAudmFsdWVcbiAgICogaWYgKCFjbGllbnRSZXN1bHQuaXNPaygpKSB7XG4gICAqICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGNsaWVudCcpO1xuICAgKiB9XG4gICAqIGNvbnN0IGNsaWVudCA9IGNsaWVudFJlc3VsdC52YWx1ZTtcbiAgICpcbiAgICogLy8gTm93IHlvdSBjYW4gYWNjZXNzIGNsaWVudC5zaXRlLCBldGMuXG4gICAqIGNvbnN0IHNpdGVSZXN1bHQgPSBhd2FpdCBjbGllbnQuc2l0ZS5nZXQoJ3NjcC1qcCcpO1xuICAgKiBgYGBcbiAgICovXG4gIHN0YXRpYyBjcmVhdGUob3B0aW9uczogQ2xpZW50T3B0aW9ucyA9IHt9KTogV2lraWRvdFJlc3VsdEFzeW5jPENsaWVudD4ge1xuICAgIGNvbnN0IHsgdXNlcm5hbWUsIHBhc3N3b3JkLCBkb21haW4gPSAnd2lraWRvdC5jb20nLCBhbWNDb25maWcgPSB7fSB9ID0gb3B0aW9ucztcblxuICAgIC8vIENyZWF0ZSBBTUMgY2xpZW50XG4gICAgY29uc3QgYW1jQ2xpZW50ID0gbmV3IEFNQ0NsaWVudChhbWNDb25maWcsIGRvbWFpbik7XG5cbiAgICAvLyBMb2dpbiBpZiBjcmVkZW50aWFscyBhcmUgcHJvdmlkZWRcbiAgICBpZiAodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KGFtY0NsaWVudCwgZG9tYWluLCB1c2VybmFtZSk7XG4gICAgICAgICAgY29uc3QgbG9naW5SZXN1bHQgPSBhd2FpdCBsb2dpbihjbGllbnQsIHVzZXJuYW1lLCBwYXNzd29yZCk7XG4gICAgICAgICAgaWYgKGxvZ2luUmVzdWx0LmlzRXJyKCkpIHtcbiAgICAgICAgICAgIHRocm93IGxvZ2luUmVzdWx0LmVycm9yO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEdldCBsb2dnZWQtaW4gdXNlciBpbmZvcm1hdGlvblxuICAgICAgICAgIGNvbnN0IHVzZXJSZXN1bHQgPSBhd2FpdCBVc2VyLmZyb21OYW1lKGNsaWVudCwgdXNlcm5hbWUpO1xuICAgICAgICAgIGlmICh1c2VyUmVzdWx0LmlzT2soKSAmJiB1c2VyUmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICBjbGllbnQuX21lID0gdXNlclJlc3VsdC52YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY2xpZW50O1xuICAgICAgICB9KSgpLFxuICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBMb2dpblJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBMb2dpblJlcXVpcmVkRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgY2xpZW50OiAke1N0cmluZyhlcnJvcil9YCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHVuYXV0aGVudGljYXRlZCBjbGllbnRcbiAgICByZXR1cm4gd2RPa0FzeW5jKG5ldyBDbGllbnQoYW1jQ2xpZW50LCBkb21haW4pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gdW5hdXRoZW50aWNhdGVkIGNsaWVudFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENsaWVudCBvcHRpb25zIChleGNsdWRpbmcgY3JlZGVudGlhbHMpXG4gICAqIEByZXR1cm5zIENsaWVudCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUFub255bW91cyhvcHRpb25zOiBPbWl0PENsaWVudE9wdGlvbnMsICd1c2VybmFtZScgfCAncGFzc3dvcmQnPiA9IHt9KTogQ2xpZW50IHtcbiAgICBjb25zdCB7IGRvbWFpbiA9ICd3aWtpZG90LmNvbScsIGFtY0NvbmZpZyA9IHt9IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGFtY0NsaWVudCA9IG5ldyBBTUNDbGllbnQoYW1jQ29uZmlnLCBkb21haW4pO1xuICAgIHJldHVybiBuZXcgQ2xpZW50KGFtY0NsaWVudCwgZG9tYWluKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBsb2dpbiBzdGF0dXNcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBsb2dnZWQgaW5cbiAgICovXG4gIGlzTG9nZ2VkSW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJuYW1lICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgbG9naW5cbiAgICogUmV0dXJucyBMb2dpblJlcXVpcmVkRXJyb3IgaWYgbm90IGxvZ2dlZCBpblxuICAgKiBAcmV0dXJucyB2b2lkIG9uIHN1Y2Nlc3NcbiAgICovXG4gIHJlcXVpcmVMb2dpbigpOiBXaWtpZG90UmVzdWx0PHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNMb2dnZWRJbigpKSB7XG4gICAgICByZXR1cm4gd2RFcnIobmV3IExvZ2luUmVxdWlyZWRFcnJvcigpKTtcbiAgICB9XG4gICAgcmV0dXJuIHdkT2sodW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgY2xpZW50XG4gICAqIEF0dGVtcHRzIHRvIGxvZ291dCBpZiBhIHNlc3Npb24gZXhpc3RzXG4gICAqL1xuICBjbG9zZSgpOiBXaWtpZG90UmVzdWx0QXN5bmM8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzTG9nZ2VkSW4oKSkge1xuICAgICAgcmV0dXJuIGxvZ291dCh0aGlzKS5tYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl91c2VybmFtZSA9IG51bGw7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHdkT2tBc3luYyh1bmRlZmluZWQpO1xuICB9XG59XG4iLAogICAgImV4cG9ydCAqIGZyb20gJy4vY2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZm9ydW0nO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJpdmF0ZS1tZXNzYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vc2l0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcic7XG4iLAogICAgImV4cG9ydCAqIGZyb20gJy4vcGFy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S0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLElBQ1YsS0FBVTtBQUFBLEVBQ1o7QUFBQTs7O0FDdmNPLFNB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LElBQUksVUFBVSxXQUFXLE1BQU07QUFBQSxJQUdqRCxJQUFJLFlBQVksVUFBVTtBQUFBLE1BQ3hCLE9BQU8sYUFDSixZQUFZO0FBQUEsUUFDWCxNQUFNLFNBQVMsSUFBSSxPQUFPLFdBQVcsUUFBUSxRQUFRO0FBQUEsUUFDckQsTUFBTSxjQUFjLE1BQU0sTUFBTSxRQUFRLFVBQVUsUUFBUTtBQUFBLFFBQzFELElBQUksWUFBWSxNQUFNLEdBQUc7QUFBQSxVQUN2QixNQUFNLFlBQVk7QUFBQSxRQUNwQjtBQUFBLFFBR0EsTUFBTSxhQUFhLE1BQU0sS0FBSyxTQUFTLFFBQVEsUUFBUTtBQUFBLFFBQ3ZELElBQUksV0FBVyxLQUFLLEtBQUssV0FBVyxPQUFPO0FBQUEsVUFDekMsT0FBTyxNQUFNLFdBQVc7QUFBQSxRQUMxQjtBQUFBLFFBRUEsT0FBTztBQUFBLFNBQ04sR0FDSCxDQUFDLFVBQVU7QUFBQSxRQUNULElBQUksaUJBQWlCLG9CQUFvQjtBQUFBLFVBQ3ZDLE9BQU87QUFBQSxRQUNUO0FBQUEsUUFDQSxPQUFPLElBQUksbUJBQW1CLDRCQUE0QixPQUFPLEtBQUssR0FBRztBQUFBLE9BRTdFO0FBQUEsSUFDRjtBQUFBLElBR0EsT0FBTyxVQUFVLElBQUksT0FBTyxXQUFXLE1BQU0sQ0FBQztBQUFBO0FBQUEsU0FRekMsZUFBZSxDQUFDLFVBQXdELENBQUMsR0FBVztBQUFBLElBQ3pGLFFBQVEsU0FBUyxlQUFlLFlBQVksQ0FBQyxNQUFNO0FBQUEsSUFDbkQsTUFBTSxZQUFZLElBQUksVUFBVSxXQUFXLE1BQU07QUFBQSxJQUNqRCxPQUFPLElBQUksT0FBTyxXQUFXLE1BQU07QUFBQTtBQUFBLEVBT3JDLFVBQVUsR0FBWTtBQUFBLElBQ3BCLE9BQU8sS0FBSyxjQUFjO0FBQUE7QUFBQSxFQVE1QixZQUFZLEdBQXdCO0FBQUEsSUFDbEMsSUFBSSxDQUFDLEtBQUssV0FBVyxHQUFHO0FBQUEsTUFDdEIsT0FBTyxNQUFNLElBQUksa0JBQW9CO0FBQUEsSUFDdkM7QUFBQSxJQUNBLE9BQU8sS0FBSyxTQUFTO0FBQUE7QUFBQSxFQU92QixLQUFLLEdBQTZCO0FBQUEsSUFDaEMsSUFBSSxLQUFLLFdBQVcsR0FBRztBQUFBLE1BQ3JCLE9BQU8sT0FBTyxJQUFJLEVBQUUsSUFBSSxNQUFNO0FBQUEsUUFDNUIsS0FBSyxZQUFZO0FBQUEsUUFDakI7QUFBQSxPQUNEO0FBQUEsSUFDSDtBQUFBLElBQ0EsT0FBTyxVQUFVLFNBQVM7QUFBQTtBQUU5Qjs7QUNsTUE7QUFLQTs7QUNOQTsiLAogICJkZWJ1Z0lkIjogIkU0ODVENTAxMENEQURBM0M2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|