@yibozhang/pro-table 0.1.5 → 0.1.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/bundles/yibozhang-pro-table.umd.js +9 -1
- package/bundles/yibozhang-pro-table.umd.js.map +1 -1
- package/bundles/yibozhang-pro-table.umd.min.js +1 -1
- package/bundles/yibozhang-pro-table.umd.min.js.map +1 -1
- package/esm2015/lib/pro-table.component.js +5 -1
- package/fesm2015/yibozhang-pro-table.js +4 -0
- package/fesm2015/yibozhang-pro-table.js.map +1 -1
- package/lib/pro-table.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -158,6 +158,10 @@ export class ProTableComponent {
|
|
|
158
158
|
return true;
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
|
+
else if (res.code === 10) {
|
|
162
|
+
// code === 10 表示未初始化,需要继续执行后续逻辑
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
161
165
|
else {
|
|
162
166
|
return false;
|
|
163
167
|
}
|
|
@@ -1113,4 +1117,4 @@ ProTableComponent.propDecorators = {
|
|
|
1113
1117
|
imgActionBarTpl: [{ type: ContentChild, args: ["ImgActionBar",] }],
|
|
1114
1118
|
allTemplates: [{ type: ContentChildren, args: [TemplateRef,] }]
|
|
1115
1119
|
};
|
|
1116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9wcm9qZWN0cy92cHMtZnJvbnQvRnJvbnQvRGFzUE1TV2ViL2xpYi9wcm8tdGFibGUvc3JjLyIsInNvdXJjZXMiOlsibGliL3Byby10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFXaEYsT0FBTyxFQUFFLHVCQUF1QixFQUErQixNQUFNLFVBQVUsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3BDLE1BQU0sT0FBTyxpQkFBaUI7SUFzSTVCLFlBR1UsWUFBZ0Q7UUFBaEQsaUJBQVksR0FBWixZQUFZLENBQW9DO1FBeElqRCxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUU5QixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUU3QixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUU1QixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBRXZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFFL0Isa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFOUIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFOUIsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFFOUIsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFFNUIsZUFBVSxHQUFXLE1BQU0sQ0FBQztRQUU1QixlQUFVLEdB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biAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IGNsb25lRGVlcCwgaGFzSW4sIGlzTmlsLCBkZWJvdW5jZSwgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuaW1wb3J0IHsgUFJPX1RBQkxFX0RFRkFVTFRfQ09MVU1OLCBQUk9fVEFCTEVfREVGQVVMVF9QUk9QUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQge1xyXG4gIEF1dG9Db21wbGV0ZUZpZWxkUHJvcHMsXHJcbiAgQ2hlY2tib3hGaWVsZFByb3BzLFxyXG4gIE9wdGlvbnNUeXBlLFxyXG4gIFByb1RhYmxlQ29sdW1uLFxyXG4gIFByb1RhYmxlUGFnZUluZm8sXHJcbiAgUHJvVGFibGVSZXF1ZXN0UmVzdWx0LFxyXG4gIFByb1RhYmxlVmFsdWVzQ2hhbmdlLFxyXG4gIFNlbGVjdEZpZWxkUHJvcHMsXHJcbn0gZnJvbSBcIi4vdHlwZVwiO1xyXG5pbXBvcnQgeyBQUk9fVEFCTEVfQ09MVU1OX1JFTU9URSwgUHJvVGFibGVSZW1vdGVDb2x1bW5TZXJ2aWNlIH0gZnJvbSBcIi4vdG9rZW5zXCI7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtcHJvLXRhYmxlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9wcm8tdGFibGUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vcHJvLXRhYmxlLmNvbXBvbmVudC5sZXNzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBzaG93Q2xlYXJCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHRhYmxlTmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgQElucHV0KCkgbXVsdGlSb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBzaG93U2VhcmNoQmFyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0FjdGlvbkJhcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpcm1CdG5UZXh0OiBzdHJpbmcgPSBcIuafpeivolwiO1xyXG5cclxuICBASW5wdXQoKSBjbGVhckJ0blRleHQ6IHN0cmluZyA9IFwi5riF56m6XCI7XHJcblxyXG4gIEBJbnB1dCgpIGxhYmVsV2lkdGg6IHN0cmluZyA9IFwiOTBweFwiO1xyXG5cclxuICBASW5wdXQoKSBsYWJlbEFsaWduOiBzdHJpbmcgPSBcInJpZ2h0XCI7XHJcblxyXG4gIEBJbnB1dCgpIGZvcm1JdGVtV2lkdGg6IHN0cmluZyA9IFwiMjcwcHhcIjtcclxuXHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgYm9yZGVyZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBvdXRlckJvcmRlcmVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBmcm9udFBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2Nyb2xsOiB7IHg/OiBzdHJpbmcgfCBudW1iZXI7IHk/OiBzdHJpbmcgfCBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSByZXF1ZXN0OiAocGFyYW1zOiBhbnkpID0+IFByb21pc2U8UHJvVGFibGVSZXF1ZXN0UmVzdWx0PjtcclxuXHJcbiAgQElucHV0KCkgc3VtbWFyeURhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8g5o6S5bqP5qih5byP77yabG9jYWwg5pys5Zyw5o6S5bqP77ybc2VydmVyIOWcqOe6v+aOkuW6j++8iOaPkOS6pOe7meaOpeWPo++8iVxyXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBcImxvY2FsXCIgfCBcInNlcnZlclwiID0gXCJsb2NhbFwiO1xyXG5cclxuICBASW5wdXQoKSBzaG93Q29sdW1uU2V0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDmmK/lkKblvIDlkK/lpJrliJfmjpLluo/vvIjpu5jorqTljZXliJfvvIlcclxuICBASW5wdXQoKSBtdWx0aXBsZVNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOWIpOaWreihjOaYr+WQpuemgeeUqOeahOWHveaVsFxyXG4gIEBJbnB1dCgpIHJvd0Rpc2FibGVkOiAoZGF0YTogYW55KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XHJcblxyXG4gIC8vIOaYr+WQpuiHquWKqOinpuWPkeivt+axglxyXG4gIEBJbnB1dCgpIGF1dG9UcmlnZ2VyUmVxdWVzdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGN1c3RvbVRhYmxlUmVuZGVyPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQE91dHB1dCgpIG9uUm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uUm93RGJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25WYWx1ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFByb1RhYmxlVmFsdWVzQ2hhbmdlPigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25SZXNldEZvcm1CZWZvcmVSZWxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChcImFjdGlvbkJhclwiKSBhY3Rpb25CYXJUcGwhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAQ29udGVudENoaWxkKFwiSW1nQWN0aW9uQmFyXCIpIGltZ0FjdGlvbkJhclRwbCE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVSZWYpIGFsbFRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgcHJpdmF0ZSBfc2F2ZWRTZWFyY2hQYXJhbXM6IGFueSA9IHt9O1xyXG5cclxuICAvLyDlrZjlgqjmqKHmnb/mmKDlsITlhbPns7sgLSDpgJrov4flrZfnrKbkuLLlkI3np7DmmKDlsITliLDmqKHmnb/lvJXnlKhcclxuICBwcml2YXRlIHRlbXBsYXRlTWFwID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPGFueT4+KCk7XHJcblxyXG4gIC8vIOWtmOWCqOaJgOacieiHquWumuS5ieaooeadv+eahOW8leeUqFxyXG4gIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPGFueT4+KCk7XHJcblxyXG4gIC8vIOiusOW9leWQhOWIl+aOkuW6j+eKtuaAge+8midhc2NlbmQnIHwgJ2Rlc2NlbmQnIHwgbnVsbFxyXG5cclxuICBwcml2YXRlIF9zb3J0TWFwOiBSZWNvcmQ8c3RyaW5nLCBcImFzY2VuZFwiIHwgXCJkZXNjZW5kXCIgfCBudWxsPiA9IHt9O1xyXG5cclxuICAvLyDorrDlvZXlpJrliJfmjpLluo/nmoTkvJjlhYjnuqfvvIjlkI7orr7nva7nmoTkvJjlhYjvvIlcclxuICBwcml2YXRlIF9zb3J0UHJpb3JpdHk6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIOWtmOWCqOavj+S4qiBhdXRvQ29tcGxldGUg5a2X5q6155qE6Ziy5oqW5Ye95pWwXHJcbiAgcHJpdmF0ZSBfYXV0b0NvbXBsZXRlRGVib3VuY2VNYXA6IE1hcDxzdHJpbmcsIChldmVudDogRXZlbnQpID0+IHZvaWQ+ID1cclxuICAgIG5ldyBNYXAoKTtcclxuXHJcbiAgLy8g5LuF5Zyo5Yid5aeL5YyW5pe26L+Q6KGM5YiX6YWN572u6aKE5qOA5p+l77yM6YG/5YWN5ZCO57ut6LCD55So6YeN5aSN6Kem5Y+RXHJcbiAgcHJpdmF0ZSBfcHJlQ2hlY2tEb25lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIF9jb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XHJcblxyXG4gIC8vIOetm+mAieihqOWNleaVsOaNruWtmOWCqFxyXG4gIF9zZWFyY2hQYXJhbXM6IGFueSA9IHt9O1xyXG5cclxuICAvLyDnrZvpgInooajljZVsaXN05riy5p+T5pWw5o2uXHJcbiAgX3NlYXJjaEZpbGVkQ29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuICBfcGFnZUluZm86IFByb1RhYmxlUGFnZUluZm8gPSB7XHJcbiAgICBwYWdlSW5kZXg6IDEsXHJcbiAgICBwYWdlU2l6ZTogMTUsXHJcbiAgICB0b3RhbDogMTAwLFxyXG4gICAgcGFnZVNpemVPcHRpb25zOiBbMTAsIDE1LCAyMCwgNTAsIDEwMCwgNTAwLCAxMDAwXSxcclxuICB9O1xyXG5cclxuICBfbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBfc2VsZWN0ZWRUYWJsZVJvdzogYW55ID0gbnVsbDtcclxuXHJcbiAgLy8g6YCJ5Lit55qE6KGM5pWw5o2u77yI55So5LqO5aSN6YCJ5qGG6YCJ5oup77yJLSDkv53nlZnnlKjkuo7lhbzlrrnmgKdcclxuICBfc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyDkvb/nlKggU2V0IOWtmOWCqOmAieS4remhueeahCBJRO+8jOaUr+aMgei3qOmhtemAieS4rVxyXG4gIHByaXZhdGUgX3NlbGVjdGVkUm93SWRzID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XHJcblxyXG4gIC8vIOWFqOmAieeKtuaAgVxyXG4gIF9jaGVja2VkQWxsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOWNiumAieeKtuaAge+8iOmDqOWIhumAieS4re+8iVxyXG4gIF9pbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOi/nOeoi2NvbHVtbnNcclxuICBfc2VydmVyQ29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAvLyDlrZjlgqggYXV0b0NvbXBsZXRlIOWtl+auteeahOaVsOaNrua6kFxyXG4gIF9hdXRvQ29tcGxldGVEYXRhU291cmNlczogUmVjb3JkPHN0cmluZywgYW55W10+ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIEBJbmplY3QoUFJPX1RBQkxFX0NPTFVNTl9SRU1PVEUpXHJcbiAgICBwcml2YXRlIGNvbHVtblJlbW90ZTogUHJvVGFibGVSZW1vdGVDb2x1bW5TZXJ2aWNlIHwgbnVsbFxyXG4gICkge31cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFJlbW90ZUNvbHVtbnMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29sdW1uUmVtb3RlPy5nZXRDb2wgfHwgIXRoaXMudGFibGVOYW1lKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb2x1bW5SZW1vdGUuZ2V0Q29sKHRoaXMudGFibGVOYW1lLCB0aGlzLm11bHRpUm93KTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwZXJzaXN0UmVtb3RlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSkge1xyXG4gICAgaWYgKCF0aGlzLmNvbHVtblJlbW90ZT8uc2V0Q29sIHx8ICF0aGlzLnRhYmxlTmFtZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY29sdW1uUmVtb3RlLnNldENvbChcclxuICAgICAgICB0aGlzLnRhYmxlTmFtZSxcclxuICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgIHRoaXMubXVsdGlSb3dcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJlc3VsdCAmJiBpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bHQudG9Qcm9taXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXMgPSB7fTtcclxuICAgIHRoaXMuZm9ybWF0ZUlubmVyQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xyXG4gICAgYXdhaXQgdGhpcy5zZXRTZWFyY2hQYXJhbXModGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAvLyDkvb/nlKggUHJveHkg5YyF6KOFIF9zZWFyY2hQYXJhbXPvvIzmi6bmiKrooajljZXpobnlgLzlj5jljJblubblkJHlpJblj5Hlh7rkuovku7ZcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHRoaXMuY3JlYXRlU2VhcmNoUGFyYW1zUHJveHkodGhpcy5fc2VhcmNoUGFyYW1zKTtcclxuICAgIGlmICh0aGlzLmF1dG9UcmlnZ2VyUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIC8vIOiHquWKqOazqOWGjOaJgOacieiHquWumuS5ieaooeadv1xyXG4gICAgdGhpcy5hdXRvUmVnaXN0ZXJUZW1wbGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcHJlQ2hlY2tTZXJ2ZXJDb2x1bW5zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5mZXRjaFJlbW90ZUNvbHVtbnMoKTtcclxuICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBpbml0Q29sdW1ucyA9IHRoaXMuY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChjb2wpID0+ICFjb2wuYXV4aWxpYXJ5Q29sdW1uKVxyXG4gICAgICAubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5wcm9wLFxyXG4gICAgICAgICAgaXNTaG93OiAhY29sdW1uLmhpZGVJblRhYmxlLCAvLyDpu5jorqTlhajpg6jmmL7npLpcclxuICAgICAgICAgIGhlYWRlcjogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgc29ydE5hbWU6IGNvbHVtbi5zb3J0TmFtZSB8fCBudWxsLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHJlcy5jb2RlID09PSAwKSB7XHJcbiAgICAgIGlmICghaXNFcXVhbChyZXMuZGF0YS50YWJDb2x1bW4sIGluaXRDb2x1bW5zKSkge1xyXG4gICAgICAgIGNvbnN0IGluaXRSZXMgPSBhd2FpdCB0aGlzLnBlcnNpc3RSZW1vdGVDb2x1bW5zKGluaXRDb2x1bW5zKTtcclxuICAgICAgICBpZiAoaW5pdFJlcykge1xyXG4gICAgICAgICAgdGhpcy5xdWVyeUR5bmFtaWNDb2x1bW5zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLkuIDoh7RcIik7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcXVlcnlEeW5hbWljQ29sdW1ucygpIHtcclxuICAgIGlmICghdGhpcy50YWJsZU5hbWUgfHwgIXRoaXMuY29sdW1uUmVtb3RlKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuX3ByZUNoZWNrRG9uZSkge1xyXG4gICAgICBjb25zdCBjaGVja1Jlc3VsdCA9IGF3YWl0IHRoaXMucHJlQ2hlY2tTZXJ2ZXJDb2x1bW5zKCk7XHJcbiAgICAgIHRoaXMuX3ByZUNoZWNrRG9uZSA9IHRydWU7XHJcbiAgICAgIGlmICghY2hlY2tSZXN1bHQpIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZmV0Y2hSZW1vdGVDb2x1bW5zKCk7XHJcbiAgICBpZiAoIXJlcykgcmV0dXJuO1xyXG4gICAgaWYgKHJlcy5jb2RlID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IF90YWJDb2x1bW4gPSByZXMuZGF0YS50YWJDb2x1bW4ubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRpdGxlOiBpdGVtLmhlYWRlcixcclxuICAgICAgICAgIHByb3A6IGl0ZW0uZmllbGQsXHJcbiAgICAgICAgICBzb3J0TmFtZTogaXRlbS5zb3J0TmFtZSxcclxuICAgICAgICAgIGhpZGVJblRhYmxlOiAhaXRlbS5pc1Nob3csXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX3NlcnZlckNvbHVtbnMgPSBfdGFiQ29sdW1uO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRhYmxlQ29sdW1ucyhfdGFiQ29sdW1uKTtcclxuICAgIH0gZWxzZSBpZiAocmVzLmNvZGUgPT09IDEwKSB7XHJcbiAgICAgIC8vIOWmguaenOacquiuvue9ruaOpeWPo+i/lOWbnu+8jOmcgOimgem7mOiupOiwg+eUqOS4gOasoeS/ruaUueWHveaVsOWIneWni+WMluaVsOaNrlxyXG4gICAgICBjb25zdCBpbml0Q29sdW1ucyA9IHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5hdXhpbGlhcnlDb2x1bW4pXHJcbiAgICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLnByb3AsXHJcbiAgICAgICAgICAgIGlzU2hvdzogdHJ1ZSwgLy8g6buY6K6k5YWo6YOo5pi+56S6XHJcbiAgICAgICAgICAgIGhlYWRlcjogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgICBzb3J0TmFtZTogY29sdW1uLnNvcnROYW1lIHx8IG51bGwsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgLy8g6LCD55So5L+u5pS55o6l5Y+j5Yid5aeL5YyW5pWw5o2uXHJcbiAgICAgIGNvbnN0IGluaXRSZXMgPSBhd2FpdCB0aGlzLnBlcnNpc3RSZW1vdGVDb2x1bW5zKGluaXRDb2x1bW5zKTtcclxuICAgICAgaWYgKGluaXRSZXMpIHtcclxuICAgICAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRlSW5uZXJDb2x1bW5zKGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcclxuICAgIHRoaXMuX2NvbHVtbnMgPSBjb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmhpZGVJblRhYmxlKVxyXG4gICAgICAubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uUFJPX1RBQkxFX0RFRkFVTFRfQ09MVU1OLCAuLi5pdGVtIH0gYXMgUHJvVGFibGVDb2x1bW47XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g6Ieq5Yqo5rOo5YaM5qih5p2/55qE5pa55rOVXHJcbiAgcHJpdmF0ZSBhdXRvUmVnaXN0ZXJUZW1wbGF0ZXMoKSB7XHJcbiAgICAvLyDojrflj5bmiYDmnInpnIDopoHoh6rlrprkuYnmqKHmnb/nmoTliJdcclxuICAgIGNvbnN0IGNvbHVtbnNXaXRoQ3VzdG9tUmVuZGVyID0gdGhpcy5fY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21SZW5kZXJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGNvbHVtbnNXaXRoQ3VzdG9tUmVuZGVyLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8g5bCd6K+V5LuOQ29udGVudENoaWxkcmVu5Lit5p+l5om+5a+55bqU55qE5qih5p2/XHJcbiAgICAgIGNvbHVtbnNXaXRoQ3VzdG9tUmVuZGVyLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IGNvbHVtbi5jdXN0b21SZW5kZXIhO1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5maW5kVGVtcGxhdGVCeU5hbWUodGVtcGxhdGVOYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5zZXQodGVtcGxhdGVOYW1lLCB0ZW1wbGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOiOt+WPluaJgOaciemcgOimgeiHquWumuS5iWxhYmVs5qih5p2/55qE5YiX77yI5L2/55So5Y6f5aeLY29sdW1uc++8jOehruS/nemhuuW6j+ato+ehru+8iVxyXG4gICAgY29uc3QgY29sdW1uc1dpdGhDdXN0b21MYWJlbCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21MYWJlbFJlbmRlclxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY29sdW1uc1dpdGhDdXN0b21MYWJlbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIOWwneivleS7jkNvbnRlbnRDaGlsZHJlbuS4reafpeaJvuWvueW6lOeahGxhYmVs5qih5p2/XHJcbiAgICAgIGNvbHVtbnNXaXRoQ3VzdG9tTGFiZWwuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVOYW1lID0gY29sdW1uLmN1c3RvbUxhYmVsUmVuZGVyITtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuZmluZExhYmVsVGVtcGxhdGVCeU5hbWUoXHJcbiAgICAgICAgICB0ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICBjb2x1bW5zV2l0aEN1c3RvbUxhYmVsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5zZXQodGVtcGxhdGVOYW1lLCB0ZW1wbGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5qC55o2u5ZCN56ew5p+l5om+5qih5p2/XHJcbiAgcHJpdmF0ZSBmaW5kVGVtcGxhdGVCeU5hbWUodGVtcGxhdGVOYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUZW1wbGF0ZUZyb21Db250ZW50KHRlbXBsYXRlTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLyDku45Db250ZW50Q2hpbGRyZW7kuK3mn6Xmib7mjIflrprlkI3np7DnmoTmqKHmnb9cclxuICBwcml2YXRlIGdldFRlbXBsYXRlRnJvbUNvbnRlbnQoXHJcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZ1xyXG4gICk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcclxuICAgIGNvbnN0IGN1c3RvbVJlbmRlckNvbHVtbnMgPSB0aGlzLl9jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuY3VzdG9tUmVuZGVyKTtcclxuICAgIGNvbnN0IHRlbXBsYXRlSW5kZXggPSBjdXN0b21SZW5kZXJDb2x1bW5zLmZpbmRJbmRleChcclxuICAgICAgKGNvbCkgPT4gY29sLmN1c3RvbVJlbmRlciA9PT0gdGVtcGxhdGVOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0ZW1wbGF0ZUluZGV4ID49IDApIHtcclxuICAgICAgLy8g6I635Y+W5omA5pyJ5qih5p2/77yM5bm26L+H5ruk5o6J54m55q6K5qih5p2/77yIYWN0aW9uQmFy5ZKMSW1nQWN0aW9uQmFy77yJXHJcbiAgICAgIC8vIOi/meagt+WPr+S7pemBv+WFjeWboOS4uueJueauiuaooeadv+eahOS9jee9ruWvvOiHtOe0ouW8leiuoeeul+mUmeivr1xyXG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSB0aGlzLmFsbFRlbXBsYXRlcy50b0FycmF5KCk7XHJcbiAgICAgIGNvbnN0IGN1c3RvbVRlbXBsYXRlcyA9IHRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgICAgKHRwbCkgPT4gdHBsICE9PSB0aGlzLmFjdGlvbkJhclRwbCAmJiB0cGwgIT09IHRoaXMuaW1nQWN0aW9uQmFyVHBsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodGVtcGxhdGVJbmRleCA8IGN1c3RvbVRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGN1c3RvbVRlbXBsYXRlc1t0ZW1wbGF0ZUluZGV4XTtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLndhcm4oYOacquaJvuWIsOaooeadvyAke3RlbXBsYXRlTmFtZX1gKTtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8g5qC55o2u5ZCN56ew5p+l5om+bGFiZWzmqKHmnb9cclxuICBwcml2YXRlIGZpbmRMYWJlbFRlbXBsYXRlQnlOYW1lKFxyXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXHJcbiAgICBjdXN0b21MYWJlbENvbHVtbnM6IFByb1RhYmxlQ29sdW1uW11cclxuICApOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZUluZGV4ID0gY3VzdG9tTGFiZWxDb2x1bW5zLmZpbmRJbmRleChcclxuICAgICAgKGNvbCkgPT4gY29sLmN1c3RvbUxhYmVsUmVuZGVyID09PSB0ZW1wbGF0ZU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRlbXBsYXRlSW5kZXggPj0gMCkge1xyXG4gICAgICAvLyDojrflj5bmiYDmnInmqKHmnb/vvIzlubbov4fmu6TmjonnibnmrormqKHmnb/vvIhhY3Rpb25CYXLlkoxJbWdBY3Rpb25CYXLvvIlcclxuICAgICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5hbGxUZW1wbGF0ZXMudG9BcnJheSgpO1xyXG4gICAgICBjb25zdCBjdXN0b21UZW1wbGF0ZXMgPSB0ZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAgICh0cGwpID0+IHRwbCAhPT0gdGhpcy5hY3Rpb25CYXJUcGwgJiYgdHBsICE9PSB0aGlzLmltZ0FjdGlvbkJhclRwbFxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8g6K6h566XbGFiZWzmqKHmnb/nmoTntKLlvJXvvJrpnIDopoHot7Pov4fmiYDmnInnmoRjdXN0b21SZW5kZXLmqKHmnb9cclxuICAgICAgY29uc3QgY3VzdG9tUmVuZGVyQ29sdW1ucyA9IHRoaXMuX2NvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAgIChjb2wpID0+IGNvbC5jdXN0b21SZW5kZXJcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbGFiZWxUZW1wbGF0ZUluZGV4ID0gY3VzdG9tUmVuZGVyQ29sdW1ucy5sZW5ndGggKyB0ZW1wbGF0ZUluZGV4O1xyXG5cclxuICAgICAgaWYgKGxhYmVsVGVtcGxhdGVJbmRleCA8IGN1c3RvbVRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGN1c3RvbVRlbXBsYXRlc1tsYWJlbFRlbXBsYXRlSW5kZXhdO1xyXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUud2Fybihg5pyq5om+5YiwbGFiZWzmqKHmnb8gJHt0ZW1wbGF0ZU5hbWV9YCk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIOiuvue9ruetm+mAieihqOWNlem7mOiupOWxnuaAp1xyXG4gIHByaXZhdGUgc2V0U2VhcmNoRm9ybURlZmF1bHRQcm9wKGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS52YWx1ZVR5cGUpIHtcclxuICAgICAgICBpZiAoaXRlbS5maWVsZFByb3BzKSB7XHJcbiAgICAgICAgICBpdGVtLmZpZWxkUHJvcHMgPSB7XHJcbiAgICAgICAgICAgIC4uLlBST19UQUJMRV9ERUZBVUxUX1BST1BTW2l0ZW0udmFsdWVUeXBlXSxcclxuICAgICAgICAgICAgLi4uaXRlbS5maWVsZFByb3BzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbS5maWVsZFByb3BzID0geyAuLi5QUk9fVEFCTEVfREVGQVVMVF9QUk9QU1tpdGVtLnZhbHVlVHlwZV0gfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5Yqo5oCB6K6+572uT3B0aW9uc1xyXG4gIHByaXZhdGUgc2V0U2VsZWN0UmVxdWVzdChjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICBjb2x1bW5zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5maWVsZFByb3BzICYmIGhhc0luKGl0ZW0uZmllbGRQcm9wcywgXCJyZXF1ZXN0XCIpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCAoXHJcbiAgICAgICAgICAgIGl0ZW0uZmllbGRQcm9wcyBhcyBTZWxlY3RGaWVsZFByb3BzXHJcbiAgICAgICAgICApLnJlcXVlc3Q/LigpO1xyXG4gICAgICAgICAgKGl0ZW0uZmllbGRQcm9wcyBhcyBTZWxlY3RGaWVsZFByb3BzKS5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgKGl0ZW0uZmllbGRQcm9wcyBhcyBTZWxlY3RGaWVsZFByb3BzKS5vcHRpb25zID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0U2VhcmNoUGFyYW1zKGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcclxuICAgIHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucyA9IFtdO1xyXG4gICAgY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmxhZyA9ICFpdGVtLmhpZGVJblNlYXJjaCAmJiBpdGVtLnZhbHVlVHlwZTtcclxuICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLnB1c2goY2xvbmVEZWVwKGl0ZW0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZsYWc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCBrZXkgPSBjb2x1bW4uZmllbGRQcm9wcz8ubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbY29sdW1uLnZhbHVlVHlwZV0udmFsdWU7XHJcblxyXG4gICAgICAgIC8vIOWvueS6jmNoZWNrYm9457G75Z6L77yM5LuOb3B0aW9uc+S4reaJvuWHumNoZWNrZWTkuLp0cnVl55qE6aG55L2c5Li66buY6K6k5YC8XHJcbiAgICAgICAgaWYgKGNvbHVtbi52YWx1ZVR5cGUgPT09IFwiY2hlY2tib3hcIikge1xyXG4gICAgICAgICAgY29uc3QgY2hlY2tlZFZhbHVlcyA9IChjb2x1bW4uZmllbGRQcm9wcz8ub3B0aW9ucyB8fCBbXSlcclxuICAgICAgICAgICAgLmZpbHRlcigob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LmNoZWNrZWQpXHJcbiAgICAgICAgICAgIC5tYXAoKG9wdDogT3B0aW9uc1R5cGUpID0+IG9wdC52YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9XHJcbiAgICAgICAgICAgIGNoZWNrZWRWYWx1ZXMubGVuZ3RoID4gMCA/IGNoZWNrZWRWYWx1ZXMgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gY29sdW1uLmZpZWxkUHJvcHM/LnZhbHVlIHx8IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWIneWni+WMliBhdXRvQ29tcGxldGUg5pWw5o2u5rqQXHJcbiAgICAgICAgaWYgKGNvbHVtbi52YWx1ZVR5cGUgPT09IFwiYXV0b0NvbXBsZXRlXCIpIHtcclxuICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2tleV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIOagueaNruWIl+eahCBvcmRlciDlrZfmrrXov5vooYzmjpLluo/vvIzmnKrorr7nva4gb3JkZXIg55qE5pS+5Zyo5pyA5ZCOXHJcbiAgICB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgYU9yZGVyID0gaXNOaWwoYT8ub3JkZXIpID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBhLm9yZGVyO1xyXG4gICAgICBjb25zdCBiT3JkZXIgPSBpc05pbChiPy5vcmRlcikgPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IGIub3JkZXI7XHJcbiAgICAgIGlmIChhT3JkZXIgPT09IGJPcmRlcikgcmV0dXJuIDA7XHJcbiAgICAgIHJldHVybiBhT3JkZXIgLSBiT3JkZXI7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldFNlYXJjaEZvcm1EZWZhdWx0UHJvcCh0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMpO1xyXG5cclxuICAgIC8vIOW5tuWPkeWKoOi9veaJgOaciemcgOimgeW8guatpeiOt+WPlueahOmAiemhuVxyXG4gICAgdGhpcy5zZXRTZWxlY3RSZXF1ZXN0KHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRhYmxlQ29sdW1ucyhpbmplY3RDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICAvLyAxLiDkvb/nlKjmnIDljp/lp4vnmoRjb2x1bW5z5L2c5Li65pWw5o2u5rqQ77yM56Gu5L+d6L6F5Yqp5YiX5a6M5YWo5LiN5Y+X5b2x5ZONXHJcbiAgICBjb25zdCBvcmlnaW5hbENvbHVtbnMgPSBjbG9uZURlZXAodGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAvLyAyLiDlpITnkIblrZfmrrXmmKDlsITvvIjlpoLmnpzmj5DkvpvkuoZmaWVsZHPlj4LmlbDvvIlcclxuICAgIGxldCBwcm9jZXNzZWRJbmplY3RDb2x1bW5zID0gaW5qZWN0Q29sdW1ucztcclxuXHJcbiAgICAvLyAzLiDliIbnprvovoXliqnliJflkozpnZ7ovoXliqnliJfvvIjkvb/nlKjljp/lp4vmlbDmja7vvIlcclxuICAgIGNvbnN0IG5vbkF1eGlsaWFyeUNvbHVtbnMgPSBvcmlnaW5hbENvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAoY29sKSA9PiAhY29sLmF1eGlsaWFyeUNvbHVtblxyXG4gICAgKTtcclxuXHJcbiAgICAvLyA0LiDmjInnhadpbmplY3RDb2x1bW5z55qE6aG65bqP6YeN5paw5o6S5YiX6Z2e6L6F5Yqp5YiXXHJcbiAgICBjb25zdCByZW9yZGVyZWROb25BdXhpbGlhcnlDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XHJcbiAgICBjb25zdCByZW1haW5pbmdOb25BdXhpbGlhcnlDb2x1bW5zID0gWy4uLm5vbkF1eGlsaWFyeUNvbHVtbnNdOyAvLyDlpI3liLbkuIDku73nlKjkuo7mn6Xmib7lkoznp7vpmaRcclxuXHJcbiAgICBwcm9jZXNzZWRJbmplY3RDb2x1bW5zLmZvckVhY2goKGluamVjdENvbCkgPT4ge1xyXG4gICAgICAvLyDmn6Xmib7pnZ7ovoXliqnliJfkuK3lr7nlupTnmoTkuIvmoIdcclxuICAgICAgY29uc3QgZXhpc3RpbmdDb2xJbmRleCA9IHJlbWFpbmluZ05vbkF1eGlsaWFyeUNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAgIChjb2wpID0+IGNvbC5wcm9wID09PSBpbmplY3RDb2wucHJvcFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoZXhpc3RpbmdDb2xJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAvLyDlpoLmnpzmib7liLDnm7jlkIzliJfvvIznlKhpbmplY3RDb2x1bW5z5Lit55qE5bGe5oCn6KaG55uW5Y6f5aeLY29sdW1uc+S4reeahOWxnuaAp1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQ29sID0gcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1uc1tleGlzdGluZ0NvbEluZGV4XTtcclxuXHJcbiAgICAgICAgY29uc3QgdXBkYXRlZENvbCA9IHsgLi4uZXhpc3RpbmdDb2wsIC4uLmluamVjdENvbCB9O1xyXG4gICAgICAgIHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnMucHVzaCh1cGRhdGVkQ29sKTtcclxuICAgICAgICAvLyDku47liankvZnmlbDnu4TkuK3np7vpmaTvvIzpgb/lhY3ph43lpI1cclxuICAgICAgICByZW1haW5pbmdOb25BdXhpbGlhcnlDb2x1bW5zLnNwbGljZShleGlzdGluZ0NvbEluZGV4LCAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDlpoLmnpzmsqHmib7liLDlr7nlupTnmoTliJfvvIznm7TmjqXmt7vliqBpbmplY3RDb2x1bW5z5Lit55qE5YiXXHJcbiAgICAgICAgcmVvcmRlcmVkTm9uQXV4aWxpYXJ5Q29sdW1ucy5wdXNoKGluamVjdENvbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIDUuIOWkhOeQhuWJqeS9meeahOWOn+Wni2NvbHVtbnPkuK3nmoTpnZ7ovoXliqnliJfvvIjlnKhpbmplY3RDb2x1bW5z5Lit5pyq5Ye6546w55qE5YiX77yJXHJcbiAgICAvLyDov5nkupvliJflupTor6XooqvpmpDol4/vvIjorr7nva5oaWRlSW5UYWJsZeS4unRydWXvvIlcclxuICAgIHJlbWFpbmluZ05vbkF1eGlsaWFyeUNvbHVtbnMuZm9yRWFjaCgocmVtYWluaW5nQ29sKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhpZGRlbkNvbCA9IHsgLi4ucmVtYWluaW5nQ29sLCBoaWRlSW5UYWJsZTogdHJ1ZSB9O1xyXG4gICAgICByZW9yZGVyZWROb25BdXhpbGlhcnlDb2x1bW5zLnB1c2goaGlkZGVuQ29sKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIDYuIOaMieeFp+WOn+Wni2NvbHVtbnPnmoTpobrluo/ph43mlrDnu4TlkIjvvJrkv53mjIHovoXliqnliJfnmoTljp/lp4vkvY3nva7lkozlsZ7mgKdcclxuICAgIGNvbnN0IGZpbmFsQ29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG4gICAgbGV0IG5vbkF1eGlsaWFyeUluZGV4ID0gMDtcclxuICAgIGxldCBhdXhpbGlhcnlJbmRleCA9IDA7XHJcblxyXG4gICAgb3JpZ2luYWxDb2x1bW5zLmZvckVhY2goKG9yaWdpbmFsQ29sKSA9PiB7XHJcbiAgICAgIGlmIChvcmlnaW5hbENvbC5hdXhpbGlhcnlDb2x1bW4pIHtcclxuICAgICAgICAvLyDlpoLmnpzmmK/ovoXliqnliJfvvIzkvb/nlKjljp/lp4vliJfmlbDmja7vvIzlrozlhajkuI3ov5vooYzku7vkvZXkv67mlLlcclxuICAgICAgICBmaW5hbENvbHVtbnMucHVzaChvcmlnaW5hbENvbCk7XHJcbiAgICAgICAgYXV4aWxpYXJ5SW5kZXgrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDlpoLmnpzmmK/pnZ7ovoXliqnliJfvvIzkvb/nlKjph43mlrDmjpLluo/lkI7nmoTliJfvvIzkvYbkv53nlZnljp/lp4vliJfnmoTmiYDmnInlsZ7mgKdcclxuICAgICAgICBjb25zdCByZW9yZGVyZWRDb2wgPSByZW9yZGVyZWROb25BdXhpbGlhcnlDb2x1bW5zW25vbkF1eGlsaWFyeUluZGV4XTtcclxuICAgICAgICBpZiAocmVvcmRlcmVkQ29sKSB7XHJcbiAgICAgICAgICAvLyDlkIjlubbljp/lp4vliJflkozph43mlrDmjpLluo/lkI7nmoTliJfvvIznoa7kv53kv53nlZnmiYDmnInljp/lp4vlsZ7mgKdcclxuICAgICAgICAgIGNvbnN0IG1lcmdlZENvbCA9IHsgLi4ub3JpZ2luYWxDb2wsIC4uLnJlb3JkZXJlZENvbCB9O1xyXG4gICAgICAgICAgZmluYWxDb2x1bW5zLnB1c2gobWVyZ2VkQ29sKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8g5aaC5p6c6YeN5paw5o6S5bqP5ZCO55qE5YiX5LiN5a2Y5Zyo77yM5L2/55So5Y6f5aeL5YiXXHJcbiAgICAgICAgICBmaW5hbENvbHVtbnMucHVzaChvcmlnaW5hbENvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vbkF1eGlsaWFyeUluZGV4Kys7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtYXRlSW5uZXJDb2x1bW5zKGZpbmFsQ29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICAvLyDpgJrov4cgUHJveHkg55uR5ZCsIF9zZWFyY2hQYXJhbXMg55qE5bGe5oCn5Y+Y5pu0XHJcbiAgcHJpdmF0ZSBjcmVhdGVTZWFyY2hQYXJhbXNQcm94eSh0YXJnZXQ6IGFueSkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICBjb25zdCBoYW5kbGVyOiBQcm94eUhhbmRsZXI8YW55PiA9IHtcclxuICAgICAgc2V0KG9iajogYW55LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBTdHJpbmcocHJvcCk7XHJcbiAgICAgICAgY29uc3Qgb2xkVmFsID0gb2JqW2tleV07XHJcbiAgICAgICAgaWYgKG9sZFZhbCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgc2VsZi5vblZhbHVlc0NoYW5nZS5lbWl0KHtcclxuICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgcGFyYW1zOiBzZWxmLmdldFNlYXJjaFBhcmFtcygpLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRW1wdHlTZWFyY2hQYXJhbXMoKSB7XHJcbiAgICBjb25zdCBjbG9uZVNlYXJjaFBhcmFtcyA9IGNsb25lRGVlcCh0aGlzLl9zZWFyY2hQYXJhbXMpO1xyXG4gICAgcmV0dXJuIGNsb25lU2VhcmNoUGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFNlcnZlclNvcnRQYXlsb2FkKCkge1xyXG4gICAgLy8g5p6E5bu65r+A5rS75o6S5bqP6ZuG5ZCI77yI5oyJ5LyY5YWI57qn5LuO5L2O5Yiw6auY77yM5pyr5bC+5LyY5YWI77yJXHJcbiAgICBjb25zdCBhY3RpdmVLZXlzID0gdGhpcy5fc29ydFByaW9yaXR5LmZpbHRlcigoaykgPT4gISF0aGlzLl9zb3J0TWFwW2tdKTtcclxuICAgIGlmIChhY3RpdmVLZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBzb3J0cyA9IGFjdGl2ZUtleXMubWFwKChmaWVsZCkgPT4ge1xyXG4gICAgICAvLyDmn6Xmib7lr7nlupTnmoTliJfphY3nva7vvIzkvJjlhYjkvb/nlKhzb3J0TmFtZeWtl+autVxyXG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLnByb3AgPT09IGZpZWxkKTtcclxuICAgICAgY29uc3Qgc29ydEZpZWxkID0gY29sdW1uPy5zb3J0TmFtZSB8fCBmaWVsZDtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBmaWVsZDogc29ydEZpZWxkLFxyXG4gICAgICAgIG9yZGVyOiB0aGlzLl9zb3J0TWFwW2ZpZWxkXSEsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlU29ydCkge1xyXG4gICAgICByZXR1cm4gc29ydHM7IC8vIOS7peaVsOe7hOW9ouW8j+aPkOS6pOWkmuWIl+aOkuW6j1xyXG4gICAgfVxyXG4gICAgY29uc3QgW2ZpcnN0XSA9IHNvcnRzO1xyXG4gICAgcmV0dXJuIGZpcnN0OyAvLyDlhbzlrrnljZXliJfnu5PmnoQgeyBmaWVsZCwgb3JkZXIgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzb3J0RGF0YVNvdXJjZUluUGxhY2UoKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSB8fCB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoID09PSAwKSByZXR1cm47XHJcbiAgICBjb25zdCBhY3RpdmVLZXlzID0gdGhpcy5fc29ydFByaW9yaXR5LmZpbHRlcigoaykgPT4gISF0aGlzLl9zb3J0TWFwW2tdKTtcclxuICAgIGlmIChhY3RpdmVLZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIOWkjeWItuS4gOS7veS8mOWFiOe6p++8jOS7juWJjeWIsOWQjuS8mOWFiOe6p+S7juS9juWIsOmrmO+8iOacgOWQjuiuvue9rueahOWtl+auteS8mOWFiO+8iVxyXG4gICAgY29uc3Qga2V5c0luUHJpb3JpdHkgPSBbLi4uYWN0aXZlS2V5c107XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgZm9yIChsZXQgaSA9IGtleXNJblByaW9yaXR5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSBrZXlzSW5Qcmlvcml0eVtpXTtcclxuICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuX3NvcnRNYXBbZmllbGRdITtcclxuICAgICAgICBjb25zdCBhdiA9IGE/LltmaWVsZF07XHJcbiAgICAgICAgY29uc3QgYnYgPSBiPy5bZmllbGRdO1xyXG4gICAgICAgIGNvbnN0IGNtcCA9IHRoaXMuY29tcGFyZVZhbHVlcyhhdiwgYnYpO1xyXG4gICAgICAgIGlmIChjbXAgIT09IDApIHJldHVybiBvcmRlciA9PT0gXCJhc2NlbmRcIiA/IGNtcCA6IC1jbXA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcGFyZVZhbHVlcyhhVmFsOiBhbnksIGJWYWw6IGFueSk6IG51bWJlciB7XHJcbiAgICBpZiAoYVZhbCA9PSBudWxsICYmIGJWYWwgPT0gbnVsbCkgcmV0dXJuIDA7XHJcbiAgICBpZiAoYVZhbCA9PSBudWxsKSByZXR1cm4gLTE7XHJcbiAgICBpZiAoYlZhbCA9PSBudWxsKSByZXR1cm4gMTtcclxuICAgIGlmIChhVmFsIGluc3RhbmNlb2YgRGF0ZSAmJiBiVmFsIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICByZXR1cm4gYVZhbC5nZXRUaW1lKCkgLSBiVmFsLmdldFRpbWUoKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIGJWYWwgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgIHJldHVybiBhVmFsID09PSBiVmFsID8gMCA6IGFWYWwgPyAxIDogLTE7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGJWYWwgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBhVmFsID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiBiVmFsID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHJldHVybiBhVmFsLmxvY2FsZUNvbXBhcmUoYlZhbCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhTnVtID0gTnVtYmVyKGFWYWwpO1xyXG4gICAgY29uc3QgYk51bSA9IE51bWJlcihiVmFsKTtcclxuICAgIGlmICghaXNOYU4oYU51bSkgJiYgIWlzTmFOKGJOdW0pKSByZXR1cm4gYU51bSAtIGJOdW07XHJcbiAgICByZXR1cm4gU3RyaW5nKGFWYWwpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKGJWYWwpKTtcclxuICB9XHJcblxyXG4gIC8vIOaJp+ihjCBhdXRvQ29tcGxldGUg5pWw5o2u5rqQ5p+l6K+i77yI5a6e6ZmF5omn6KGM6YC76L6R77yJXHJcbiAgcHJpdmF0ZSBleGVjdXRlQXV0b0NvbXBsZXRlRGF0YVNvdXJjZShldmVudDogRXZlbnQsIGNvbHVtbjogUHJvVGFibGVDb2x1bW4pIHtcclxuICAgIGNvbnN0IGZpZWxkS2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAoY29sdW1uLmZpZWxkUHJvcHMgYXMgQXV0b0NvbXBsZXRlRmllbGRQcm9wcykuZGF0YVNvdXJjZSAmJlxyXG4gICAgICB0eXBlb2YgKGNvbHVtbi5maWVsZFByb3BzIGFzIEF1dG9Db21wbGV0ZUZpZWxkUHJvcHMpLmRhdGFTb3VyY2UgPT09XHJcbiAgICAgICAgXCJmdW5jdGlvblwiXHJcbiAgICApIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSAoY29sdW1uLmZpZWxkUHJvcHMgYXMgQXV0b0NvbXBsZXRlRmllbGRQcm9wcykuZGF0YVNvdXJjZShcclxuICAgICAgICAgIGV2ZW50XHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyDlpoLmnpzov5Tlm57nmoTmmK8gUHJvbWlzZe+8jOWkhOeQhuW8guatpee7k+aenFxyXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gPSBkYXRhIHx8IFtdO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkF1dG9Db21wbGV0ZSBkYXRhU291cmNlIGVycm9yOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gW107XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyDlkIzmraXov5Tlm57nu5PmnpxcclxuICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2ZpZWxkS2V5XSA9IHJlc3VsdCB8fCBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkF1dG9Db21wbGV0ZSBkYXRhU291cmNlIGVycm9yOlwiLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWFyY2hQYXJhbXMob3B0aW9ucz86IHtcclxuICAgIHVzZVNhdmVkPzogYm9vbGVhbjsgLy8g5L2/55So5pyA6L+R5LiA5qyh5p+l6K+i5o+Q5Lqk55qE5Y+C5pWw77yM6buY6K6k5Li6IGZhbHNl77ybZmFsc2Ug5Li65b2T5YmN6KGo5Y2V5YC8XHJcbiAgfSk6IGFueSB7XHJcbiAgICBjb25zdCB7IHVzZVNhdmVkID0gZmFsc2UgfSA9IG9wdGlvbnMgfHwge307XHJcbiAgICBjb25zdCByYXdQYXJhbXMgPSB1c2VTYXZlZCA/IHRoaXMuX3NhdmVkU2VhcmNoUGFyYW1zIDogdGhpcy5fc2VhcmNoUGFyYW1zO1xyXG4gICAgY29uc3QgcGFyYW1zID0gY2xvbmVEZWVwKHJhd1BhcmFtcyB8fCB7fSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4LFxyXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLl9wYWdlSW5mby5wYWdlU2l6ZSxcclxuICAgICAgfSxcclxuICAgICAgLy8g5Zyo57q/5o6S5bqP5qih5byP77ya5oqK5o6S5bqP5a+56LGh5o+Q5Lqk57uZ5o6l5Y+jXHJcbiAgICAgIC4uLih0aGlzLnNvcnRNb2RlID09PSBcInNlcnZlclwiXHJcbiAgICAgICAgPyB7IHNvcnQ6IHRoaXMuYnVpbGRTZXJ2ZXJTb3J0UGF5bG9hZCgpIH1cclxuICAgICAgICA6IHt9KSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVsb2FkKGFmdGVyRGVsZXRlPzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeShhZnRlckRlbGV0ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RmllbGRzVmFsdWUoZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICBPYmplY3Qua2V5cyhmaWVsZHMpLmZvckVhY2goKGspID0+IHtcclxuICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tdID0gZmllbGRzW2tdOyAvLyDkv53nlZkgUHJveHnvvIzpgJDpobnotYvlgLzop6blj5Hmi6bmiKpcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEZpZWxkVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJTZWxlY3RlZFJvdygpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldENvbHVtbnMoXHJcbiAgICBjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdLFxyXG4gICAgb3B0aW9ucz86IHtcclxuICAgICAgcmVsb2FkPzogYm9vbGVhbjsgLy8g5piv5ZCm6YeN5paw5Yqg6L295pWw5o2u77yM6buY6K6k5Li6IGZhbHNlXHJcbiAgICB9XHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyDmm7TmlrAgY29sdW1ucyDovpPlhaXlsZ7mgKdcclxuICAgIHRoaXMuY29sdW1ucyA9IGNsb25lRGVlcChjb2x1bW5zKTtcclxuXHJcbiAgICAvLyDph43mlrDmoLzlvI/ljJblhoXpg6jliJdcclxuICAgIHRoaXMuZm9ybWF0ZUlubmVyQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAgIC8vIOmHjeaWsOiuvue9ruaQnOe0ouWPguaVsO+8iOW8guatpeaTjeS9nO+8iVxyXG4gICAgLy8g5YWI5riF56m65pen55qE5pCc57Si5Y+C5pWw77yM6YG/5YWN5pen5pWw5o2u5q6L55WZXHJcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXMgPSB7fTtcclxuICAgIGF3YWl0IHRoaXMuc2V0U2VhcmNoUGFyYW1zKHRoaXMuY29sdW1ucyk7XHJcblxyXG4gICAgLy8g6YeN5paw5Yib5bu6IFByb3h577yM56Gu5L+d6KGo5Y2V6aG55YC85Y+Y5YyW6IO95q2j5bi46Kem5Y+R5LqL5Lu2XHJcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXMgPSB0aGlzLmNyZWF0ZVNlYXJjaFBhcmFtc1Byb3h5KHRoaXMuX3NlYXJjaFBhcmFtcyk7XHJcblxyXG4gICAgLy8g6YeN5paw5rOo5YaM5qih5p2/77yI5aaC5p6c57uE5Lu25bey57uP5Yid5aeL5YyW5a6M5oiQ77yJXHJcbiAgICBpZiAodGhpcy5hbGxUZW1wbGF0ZXMpIHtcclxuICAgICAgdGhpcy5hdXRvUmVnaXN0ZXJUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlpoLmnpzorr7nva7kuoYgcmVsb2FkIOmAiemhueS4uiB0cnVl77yM5YiZ6YeN5paw5p+l6K+i5pWw5o2uXHJcbiAgICBpZiAob3B0aW9ucz8ucmVsb2FkID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFJvd0RhdGE8VCA9IGFueT4oKTogVCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDaGVja2VkUm93czxUID0gYW55PigpOiBUW10ge1xyXG4gICAgaWYgKCF0aGlzLnNob3dDaGVja2JveCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICAvLyDov5Tlm57lvZPliY3mlbDmja7mupDkuK3miYDmnIkgY2hlY2tlZCDkuLogdHJ1ZSDnmoTpoblcclxuICAgIC8vIOazqOaEj++8muWmguaenOmcgOimgeiOt+WPluaJgOaciemhteeahOmAieS4remhue+8jOmcgOimgemBjeWOhuaJgOacieaVsOaNrua6kOaIluS9v+eUqCBfc2VsZWN0ZWRSb3dJZHNcclxuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChyb3cpID0+IHJvdy5jaGVja2VkID09PSB0cnVlKSBhcyBUW107XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5bmjIflrprlkI3np7DnmoTmqKHmnb9cclxuICBnZXRUZW1wbGF0ZShuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8g6aaW5YWI5LuO6Ieq5a6a5LmJ5qih5p2/5Lit5p+l5om+XHJcbiAgICAgIGNvbnN0IGN1c3RvbVRlbXBsYXRlID0gdGhpcy5jdXN0b21UZW1wbGF0ZXMuZ2V0KG5hbWUpO1xyXG4gICAgICBpZiAoY3VzdG9tVGVtcGxhdGUpIHtcclxuICAgICAgICByZXR1cm4gY3VzdG9tVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOeEtuWQjuS7jumAmueUqOaooeadv+aYoOWwhOS4reafpeaJvlxyXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVNYXAuZ2V0KG5hbWUpO1xyXG4gICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRvb2xUaXBUZXh0VmFsdWUoY29sdW1uOiBQcm9UYWJsZUNvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGtleSA9XHJcbiAgICAgIGNvbHVtbi5jdXN0b21SZW5kZXIgJiYgdGhpcy5nZXRUZW1wbGF0ZShjb2x1bW4uY3VzdG9tUmVuZGVyKVxyXG4gICAgICAgID8gXCJcIlxyXG4gICAgICAgIDogY29sdW1uLmVsbGlwc2lzXHJcbiAgICAgICAgPyBjb2x1bW4ucHJvcFxyXG4gICAgICAgIDogXCJcIjtcclxuICAgIHJldHVybiAha2V5ID8gXCJcIiA6IGRhdGFba2V5XTtcclxuICB9XHJcblxyXG4gIGdldFRhYmxlUm93Q2hlY2tlZChkYXRhOiBhbnkpIHtcclxuICAgIC8vIOWQr+eUqOWkjemAieahhuaXtu+8muihjOmrmOS6ruW6lOS4juWkjemAieahhumAieS4reeKtuaAgeS4gOiHtO+8iOaUr+aMgeWkmumAie+8iVxyXG4gICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlzUm93Q2hlY2tlZChkYXRhKTtcclxuICAgIH1cclxuICAgIC8vIOacquWQr+eUqOWkjemAieahhuaXtu+8muS7jeeEtuS9v+eUqOWNlemAieihjOmrmOS6rlxyXG4gICAgaWYgKCF0aGlzLl9zZWxlY3RlZFRhYmxlUm93KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5fc2VsZWN0ZWRUYWJsZVJvdykgPT09IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLy8g5qOA5p+l6KGM5piv5ZCm6KKr56aB55SoXHJcbiAgaXNSb3dEaXNhYmxlZChkYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zaG93Q2hlY2tib3gpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLnJvd0Rpc2FibGVkID8gdGhpcy5yb3dEaXNhYmxlZChkYXRhKSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8g5qOA5p+l6KGM5piv5ZCm6KKr5aSN6YCJ5qGG6YCJ5Lit77yI5pWw5o2u6amx5Yqo5qih5byP77yJXHJcbiAgaXNSb3dDaGVja2VkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnNob3dDaGVja2JveCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8g55u05o6l6K+75Y+W5pWw5o2u5a+56LGh55qEIGNoZWNrZWQg5bGe5oCnXHJcbiAgICByZXR1cm4gZGF0YS5jaGVja2VkID09PSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8g5YiH5o2i6KGM55qE6YCJ5Lit54q25oCB77yI5pWw5o2u6amx5Yqo5qih5byP77yM5L+d55WZ55So5LqO5YW85a6577yJXHJcbiAgdG9nZ2xlUm93Q2hlY2tlZChkYXRhOiBhbnksIGNoZWNrZWQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8g6Zi75q2i5LqL5Lu25YaS5rOh77yM6YG/5YWN6Kem5Y+R6KGM54K55Ye7XHJcbiAgICB9XHJcbiAgICAvLyDlpoLmnpzooYzooqvnpoHnlKjvvIzkuI3lhYHorrjliIfmjaLpgInkuK3nirbmgIFcclxuICAgIGlmICh0aGlzLmlzUm93RGlzYWJsZWQoZGF0YSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOebtOaOpeiuvue9ruaVsOaNruWvueixoeeahCBjaGVja2VkIOWxnuaAp1xyXG4gICAgZGF0YS5jaGVja2VkID0gY2hlY2tlZDtcclxuXHJcbiAgICAvLyDlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93SWRz77yI55So5LqO6Leo6aG16YCJ5Lit77yJXHJcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQoZGF0YSk7XHJcbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmFkZChpZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuZGVsZXRlKGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dz77yI55So5LqO5YW85a655oCn77yJXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkUm93cy5maW5kSW5kZXgoKHJvdykgPT5cclxuICAgICAgdGhpcy5pc1NhbWVSb3cocm93LCBkYXRhKVxyXG4gICAgKTtcclxuICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3MucHVzaChkYXRhKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDli77pgInlpI3pgInmoYbml7blkIzmraXorr7nva7pq5jkuq7pgInkuK3ooYxcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOiLpeW9k+WJjemrmOS6ruihjOS4uuivpeihjO+8jOWImeWPlua2iOmrmOS6rlxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyAmJlxyXG4gICAgICAgIHRoaXMuaXNTYW1lUm93KHRoaXMuX3NlbGVjdGVkVGFibGVSb3csIGRhdGEpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVDaGVja0FsbFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5YWo6YCJ54q25oCB77yI5pWw5o2u6amx5Yqo5qih5byP77yJXHJcbiAgdXBkYXRlQ2hlY2tBbGxTdGF0dXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94IHx8ICFBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkpIHtcclxuICAgICAgdGhpcy5fY2hlY2tlZEFsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIOWPquiuoeeul+WPr+eUqOeahOihjO+8iOacquemgeeUqOeahOihjO+8iVxyXG4gICAgY29uc3QgYXZhaWxhYmxlUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoXHJcbiAgICAgIChyb3cpID0+ICF0aGlzLmlzUm93RGlzYWJsZWQocm93KVxyXG4gICAgKTtcclxuICAgIC8vIOWfuuS6juaVsOaNruWvueixoeeahCBjaGVja2VkIOWxnuaAp+iuoeeul1xyXG4gICAgY29uc3QgY2hlY2tlZENvdW50ID0gYXZhaWxhYmxlUm93cy5maWx0ZXIoXHJcbiAgICAgIChyb3cpID0+IHJvdy5jaGVja2VkID09PSB0cnVlXHJcbiAgICApLmxlbmd0aDtcclxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSBhdmFpbGFibGVSb3dzLmxlbmd0aDtcclxuICAgIHRoaXMuX2NoZWNrZWRBbGwgPVxyXG4gICAgICB0b3RhbENvdW50ID4gMCAmJiBjaGVja2VkQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA9PT0gdG90YWxDb3VudDtcclxuICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSBjaGVja2VkQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA8IHRvdGFsQ291bnQ7XHJcbiAgfVxyXG5cclxuICAvLyDlhajpgIkv5Y+W5raI5YWo6YCJ77yI5pWw5o2u6amx5Yqo5qih5byP77yJXHJcbiAgdG9nZ2xlQ2hlY2tBbGwoY2hlY2tlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWPquWkhOeQhuWPr+eUqOeahOihjO+8iOacquemgeeUqOeahOihjO+8iVxyXG4gICAgY29uc3QgYXZhaWxhYmxlUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoXHJcbiAgICAgIChyb3cpID0+ICF0aGlzLmlzUm93RGlzYWJsZWQocm93KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyDmibnph4/orr7nva4gY2hlY2tlZCDlsZ7mgKdcclxuICAgIGF2YWlsYWJsZVJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcclxuXHJcbiAgICAgIC8vIOWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dJZHPvvIjnlKjkuo7ot6jpobXpgInkuK3vvIlcclxuICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7XHJcbiAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmFkZChpZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93c++8iOeUqOS6juWFvOWuueaAp++8iVxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gWy4uLmF2YWlsYWJsZVJvd3NdO1xyXG4gICAgICAvLyDlkIzmraXorr7nva7pq5jkuq7pgInkuK3ooYzkuLrnrKzkuIDmnaHlj6/pgInmlbDmja5cclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9XHJcbiAgICAgICAgYXZhaWxhYmxlUm93cy5sZW5ndGggPiAwID8gYXZhaWxhYmxlUm93c1swXSA6IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbXTtcclxuICAgICAgLy8g5Y+W5raI6auY5LquXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPlumAieS4reeahOihjOaVsOaNru+8iOS/neeVmeeUqOS6juWFvOWuueaAp++8iVxyXG4gIGdldFNlbGVjdGVkUm93cygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja2VkUm93cygpO1xyXG4gIH1cclxuXHJcbiAgLy8g5aSE55CG6KGMIGNoZWNrYm94IOWPmOWMluS6i+S7tu+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIGhhbmRsZVJvd0NoZWNrZWRDaGFuZ2UoZGF0YTogYW55LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1Jvd0Rpc2FibGVkKGRhdGEpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDmlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKflt7Lnu4/pgJrov4flj4zlkJHnu5Hlrproh6rliqjmm7TmlrBcclxuICAgIC8vIOi/memHjOWPqumcgOimgeWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dJZHMg5ZKMIF9zZWxlY3RlZFJvd3NcclxuXHJcbiAgICAvLyDlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93SWRz77yI55So5LqO6Leo6aG16YCJ5Lit77yJXHJcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQoZGF0YSk7XHJcbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmFkZChpZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuZGVsZXRlKGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dz77yI55So5LqO5YW85a655oCn77yJXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkUm93cy5maW5kSW5kZXgoKHJvdykgPT5cclxuICAgICAgdGhpcy5pc1NhbWVSb3cocm93LCBkYXRhKVxyXG4gICAgKTtcclxuICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3MucHVzaChkYXRhKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDli77pgInlpI3pgInmoYbml7blkIzmraXorr7nva7pq5jkuq7pgInkuK3ooYxcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOiLpeW9k+WJjemrmOS6ruihjOS4uuivpeihjO+8jOWImeWPlua2iOmrmOS6rlxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyAmJlxyXG4gICAgICAgIHRoaXMuaXNTYW1lUm93KHRoaXMuX3NlbGVjdGVkVGFibGVSb3csIGRhdGEpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pu05paw5YWo6YCJ54q25oCBXHJcbiAgICB0aGlzLnVwZGF0ZUNoZWNrQWxsU3RhdHVzKCk7XHJcbiAgfVxyXG5cclxuICAvLyDliLfmlrDlhajpgInnirbmgIHvvIjnlKjkuo7lhbbku5blnLrmma/vvIlcclxuICByZWZyZXNoQ2hlY2tBbGxTdGF0dXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNoZWNrQWxsU3RhdHVzKCk7XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5booYznmoTllK/kuIDmoIfor4bvvIjnlKjkuo7ot6jpobXpgInkuK3vvIlcclxuICBwcml2YXRlIGdldFJvd0lkKGRhdGE6IGFueSk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gZGF0YS5pZCA/PyBkYXRhLmtleSA/PyB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvLyDliKTmlq3kuKTooYzmmK/lkKbkuLrlkIzkuIDooYxcclxuICBwcml2YXRlIGlzU2FtZVJvdyhyb3cxOiBhbnksIHJvdzI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaWQxID0gdGhpcy5nZXRSb3dJZChyb3cxKTtcclxuICAgIGNvbnN0IGlkMiA9IHRoaXMuZ2V0Um93SWQocm93Mik7XHJcblxyXG4gICAgaWYgKGlkMSAhPT0gdW5kZWZpbmVkICYmIGlkMiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBpZDEgPT09IGlkMjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmYWxsYmFjayDliLAgSlNPTiDmr5TovoNcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyb3cxKSA9PT0gSlNPTi5zdHJpbmdpZnkocm93Mik7XHJcbiAgfVxyXG5cclxuICAvLyDmuIXnqbrpgInkuK3nmoTooYzvvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcclxuICBjbGVhclNlbGVjdGVkUm93cygpIHtcclxuICAgIC8vIOa4heepuuW9k+WJjeaVsOaNrua6kOS4reaJgOaciemhueeahCBjaGVja2VkIOeKtuaAgVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgcm93LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5riF56m66YCJ5Lit6ZuG5ZCIXHJcbiAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5jbGVhcigpO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICB0aGlzLl9jaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgICB0aGlzLl9pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGhhbmRsZUZpZWxkQ2hlY2tCb3hDaGFuZ2UoY2hlY2tCb3hPcHRpb25zOiBPcHRpb25zVHlwZVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZXRGaWVsZHNWYWx1ZSh7XHJcbiAgICAgIFtrZXldOiBjaGVja0JveE9wdGlvbnNcclxuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpXHJcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlYXJjaCgpIHtcclxuICAgIHRoaXMuX3NhdmVkU2VhcmNoUGFyYW1zID0gdGhpcy5jbGVhckVtcHR5U2VhcmNoUGFyYW1zKCk7XHJcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSAxO1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmVzZXRGb3JtKCkge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5fc2VhcmNoUGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0Q29sdW1uID0gdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gKGl0ZW0uZmllbGRQcm9wcz8ubmFtZSB8fCBpdGVtLnByb3ApID09PSBrZXk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8g5a+55LqOY2hlY2tib3jnsbvlnovvvIzpnIDopoHnibnmrorlpITnkIbpu5jorqTlgLxcclxuICAgICAgaWYgKHRhcmdldENvbHVtbj8udmFsdWVUeXBlID09PSBcImNoZWNrYm94XCIpIHtcclxuICAgICAgICAvLyDku47ljp/lp4tjb2x1bW5z6YWN572u5Lit6I635Y+W5Yid5aeL6YWN572u77yM5Lul56Gu5L+d5L2/55So5q2j56Gu55qE6buY6K6k5YC8XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChpdGVtLmZpZWxkUHJvcHM/Lm5hbWUgfHwgaXRlbS5wcm9wKSA9PT0ga2V5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyDku47ljp/lp4tvcHRpb25z5Lit5om+5Ye6Y2hlY2tlZOS4unRydWXnmoTpobnkvZzkuLrpu5jorqTlgLxcclxuICAgICAgICBjb25zdCBvcmlnaW5hbEZpZWxkUHJvcHMgPSBvcmlnaW5hbENvbHVtbj8uZmllbGRQcm9wcyBhc1xyXG4gICAgICAgICAgfCBDaGVja2JveEZpZWxkUHJvcHNcclxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IGNoZWNrZWRWYWx1ZXMgPSAob3JpZ2luYWxGaWVsZFByb3BzPy5vcHRpb25zIHx8IFtdKVxyXG4gICAgICAgICAgLmZpbHRlcigob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LmNoZWNrZWQpXHJcbiAgICAgICAgICAubWFwKChvcHQ6IE9wdGlvbnNUeXBlKSA9PiBvcHQudmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9XHJcbiAgICAgICAgICBjaGVja2VkVmFsdWVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyBjaGVja2VkVmFsdWVzXHJcbiAgICAgICAgICAgIDogUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbdGFyZ2V0Q29sdW1uLnZhbHVlVHlwZV0udmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgICAvLyDmoLnmja7pu5jorqTlgLzmgaLlpI1vcHRpb25z55qEY2hlY2tlZOeKtuaAge+8jOS9v+eUqOWOn+Wni29wdGlvbnPnmoTnu5PmnoRcclxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlIDogW107XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxPcHRpb25zID0gb3JpZ2luYWxGaWVsZFByb3BzPy5vcHRpb25zIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldEZpZWxkUHJvcHMgPSB0YXJnZXRDb2x1bW4uZmllbGRQcm9wcyBhcyBDaGVja2JveEZpZWxkUHJvcHM7XHJcbiAgICAgICAgdGFyZ2V0RmllbGRQcm9wcy5vcHRpb25zID0gb3JpZ2luYWxPcHRpb25zLm1hcCgoaXRlbTogT3B0aW9uc1R5cGUpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IGRlZmF1bHRWYWx1ZXMuaW5jbHVkZXMoaXRlbS52YWx1ZSksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gdGFyZ2V0Q29sdW1uPy5maWVsZFByb3BzXHJcbiAgICAgICAgICA/IHRhcmdldENvbHVtbj8uZmllbGRQcm9wcy52YWx1ZSB8fFxyXG4gICAgICAgICAgICBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1t0YXJnZXRDb2x1bW4udmFsdWVUeXBlXS52YWx1ZVxyXG4gICAgICAgICAgOiBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1t0YXJnZXRDb2x1bW4udmFsdWVUeXBlXS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc2F2ZWRTZWFyY2hQYXJhbXMgPSB7fTtcclxuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB0aGlzLm9uUmVzZXRGb3JtQmVmb3JlUmVsb2FkLmVtaXQoKTtcclxuICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVBhZ2VJbmRleENoYW5nZShwYWdlSW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gcGFnZUluZGV4O1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IGFueSkge1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVRdWVyeShhZnRlckRlbGV0ZT86IGJvb2xlYW4pIHtcclxuICAgIC8vIOWIoOmZpOWQjuWIt+aWsOS4lOW9k+WJjemhteS7heWJqeS4gOadoeiusOW9leaXtu+8jOiLpeS4jeWcqOesrOS4gOmhteWImeWFiOWbnumAgOS4gOmhtVxyXG4gICAgaWYgKFxyXG4gICAgICBhZnRlckRlbGV0ZSAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkgJiZcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPiAxXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4IC0gMTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDkv53lrZjliKDpmaTliY3nmoTmlbDmja7mupDvvIjnlKjkuo7liKDpmaTlkI7mn6Xor6Lml7bnp7vpmaTooqvliKDpmaTpobnnmoTpgInkuK3nirbmgIHvvIlcclxuICAgIGNvbnN0IHByZXZpb3VzRGF0YVNvdXJjZSA9XHJcbiAgICAgIGFmdGVyRGVsZXRlICYmIHRoaXMuc2hvd0NoZWNrYm94ID8gWy4uLnRoaXMuZGF0YVNvdXJjZV0gOiBbXTtcclxuXHJcbiAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Qoe1xyXG4gICAgICAgICAgcGFyYW1zOiB0aGlzLmNsZWFyRW1wdHlTZWFyY2hQYXJhbXMoKSxcclxuICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4LFxyXG4gICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5fcGFnZUluZm8ucGFnZVNpemUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8g5Zyo57q/5o6S5bqP5qih5byP77ya5oqK5o6S5bqP5a+56LGh5o+Q5Lqk57uZ5o6l5Y+jXHJcbiAgICAgICAgICAuLi4odGhpcy5zb3J0TW9kZSA9PT0gXCJzZXJ2ZXJcIlxyXG4gICAgICAgICAgICA/IHsgc29ydDogdGhpcy5idWlsZFNlcnZlclNvcnRQYXlsb2FkKCkgfVxyXG4gICAgICAgICAgICA6IHt9KSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g6Ieq5Yqo5rOo5YWlIGNoZWNrZWQg5a2X5q6177yM5pSv5oyB6Leo6aG16YCJ5LitXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSAocmVzdWx0LmRhdGEgfHwgW10pLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQoaXRlbSk7XHJcbiAgICAgICAgICAgIC8vIOWmguaenOaVsOaNruW3suaciSBjaGVja2VkIOWxnuaAp++8jOS/neeVme+8m+WQpuWImeagueaNriBfc2VsZWN0ZWRSb3dJZHMg5Yik5patXHJcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPVxyXG4gICAgICAgICAgICAgIGl0ZW0uY2hlY2tlZCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA/IGl0ZW0uY2hlY2tlZFxyXG4gICAgICAgICAgICAgICAgOiBpZCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3NlbGVjdGVkUm93SWRzLmhhcyhpZClcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgICBjaGVja2VkOiBjaGVja2VkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8g5Yig6Zmk5ZCO5p+l6K+i77ya56e76Zmk6KKr5Yig6Zmk6aG555qE6YCJ5Lit54q25oCBXHJcbiAgICAgICAgICBpZiAoYWZ0ZXJEZWxldGUgJiYgcHJldmlvdXNEYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IG5ldyBTZXQoXHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLm1hcCgoaXRlbSkgPT4gdGhpcy5nZXRSb3dJZChpdGVtKSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIOmBjeWOhuS5i+WJjeeahOaVsOaNrua6kO+8jOWmguaenOS4jeWcqOaWsOaVsOaNrua6kOS4re+8jOivtOaYjuiiq+WIoOmZpOS6hu+8jOmcgOimgea4hemZpOWFtumAieS4reeKtuaAgVxyXG4gICAgICAgICAgICBwcmV2aW91c0RhdGFTb3VyY2UuZm9yRWFjaCgob2xkSXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9sZElkID0gdGhpcy5nZXRSb3dJZChvbGRJdGVtKTtcclxuICAgICAgICAgICAgICBpZiAob2xkSWQgIT09IHVuZGVmaW5lZCAmJiAhbmV3RGF0YUlkcy5oYXMob2xkSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyDooqvliKDpmaTnmoTpobnvvIzku47pgInkuK3pm4blkIjkuK3np7vpmaRcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmRlbGV0ZShvbGRJZCk7XHJcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzmlbDmja7lr7nosaHov5jlnKjlhbbku5blnLDmlrnlvJXnlKjvvIzmuIXpmaTlhbbpgInkuK3nirbmgIFcclxuICAgICAgICAgICAgICAgIGlmIChvbGRJdGVtLmNoZWNrZWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICBvbGRJdGVtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSByZXN1bHQuZGF0YSB8fCBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSByZXN1bHQuc3VtbWFyeURhdGEgfHwgbnVsbDtcclxuICAgICAgICAvLyDmnKzlnLDmjpLluo/mqKHlvI/vvJrmi7/liLDmlbDmja7lkI7lnKjliY3nq6/mjpLluo9cclxuICAgICAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gXCJsb2NhbFwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNvcnREYXRhU291cmNlSW5QbGFjZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wYWdlSW5mby50b3RhbCA9IHJlc3VsdC50b3RhbCB8fCAwO1xyXG4gICAgICAgIC8vIOabtOaWsOWFqOmAieeKtuaAgVxyXG4gICAgICAgIGlmICh0aGlzLnNob3dDaGVja2JveCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDaGVja0FsbFN0YXR1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwi5p+l6K+i5aSx6LSlOlwiLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgdGhpcy5fcGFnZUluZm8udG90YWwgPSAwO1xyXG4gICAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSBudWxsO1xyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFwi5pyq5o+Q5L6bIF9yZXF1ZXN0IOWbnuiwg+WHveaVsFwiKTtcclxuICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8g5LiN5YaN6LCD55SoIGNsZWFyU2VsZWN0ZWRSb3dzKCnvvIzkv53nlZnot6jpobXpgInkuK3nirbmgIFcclxuICB9XHJcblxyXG4gIC8vIOinpuWPkeWIl+aOkuW6j+WPmOabtFxyXG4gIG9uU29ydENoYW5nZShzb3J0S2V5OiBzdHJpbmcsIHNvcnRPcmRlcjogXCJhc2NlbmRcIiB8IFwiZGVzY2VuZFwiIHwgbnVsbCkge1xyXG4gICAgLy8g5Y2V5YiX5o6S5bqP77ya6YeN572u5YW25a6D5YiX77yb5aSa5YiX5o6S5bqP77ya5L+d55WZ5YW25a6D5YiXXHJcbiAgICBpZiAoIXRoaXMubXVsdGlwbGVTb3J0KSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuX3NvcnRNYXApLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgIT09IHNvcnRLZXkpIHRoaXMuX3NvcnRNYXBba2V5XSA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc29ydE1hcFtzb3J0S2V5XSA9IHNvcnRPcmRlcjtcclxuXHJcbiAgICAvLyDnu7TmiqTkvJjlhYjnuqfpmJ/liJfvvJrmnInluo/liJfkuJTpnZ7nqbogLT4g572u5LqO5pyr5bC+77yb5Li656m6IC0+IOenu+mZpFxyXG4gICAgdGhpcy5fc29ydFByaW9yaXR5ID0gdGhpcy5fc29ydFByaW9yaXR5LmZpbHRlcigoaykgPT4gayAhPT0gc29ydEtleSk7XHJcbiAgICBpZiAoc29ydE9yZGVyKSB7XHJcbiAgICAgIHRoaXMuX3NvcnRQcmlvcml0eS5wdXNoKHNvcnRLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBcImxvY2FsXCIpIHtcclxuICAgICAgdGhpcy5zb3J0RGF0YVNvdXJjZUluUGxhY2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIOWcqOe6v+aOkuW6j++8mumHjeaWsOivt+axglxyXG4gICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTb3J0T3JkZXIoc29ydEtleTogc3RyaW5nKTogXCJhc2NlbmRcIiB8IFwiZGVzY2VuZFwiIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydE1hcFtzb3J0S2V5XSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlVGFibGVSb3dDbGljayhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBkYXRhO1xyXG4gICAgLy8g5aaC5p6c5byA5ZCv5LqG5aSN6YCJ5qGG77yM54K55Ye76KGM5pe25Y+q6YCJ5Lit54K55Ye76KGM77yI5aaC5p6c6KGM5pyq6KKr56aB55So77yJXHJcbiAgICBpZiAodGhpcy5zaG93Q2hlY2tib3ggJiYgIXRoaXMuaXNSb3dEaXNhYmxlZChkYXRhKSkge1xyXG4gICAgICAvLyDlhYjmuIXnqbrmiYDmnInpgInkuK3ooYxcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIC8vIOWPqumAieS4reW9k+WJjeeCueWHu+eahOihjFxyXG4gICAgICB0aGlzLnRvZ2dsZVJvd0NoZWNrZWQoZGF0YSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uUm93Q2xpY2suZW1pdCh0aGlzLl9zZWxlY3RlZFRhYmxlUm93KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVRhYmxlUm93RGJDbGljayhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBkYXRhO1xyXG4gICAgdGhpcy5vblJvd0RiQ2xpY2suZW1pdCh0aGlzLl9zZWxlY3RlZFRhYmxlUm93KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNvbHVtbnNTZXR0aW5nQ29uZmlybSgpIHtcclxuICAgIHRoaXMucXVlcnlEeW5hbWljQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgLy8g5aSE55CGIGF1dG9Db21wbGV0ZSDovpPlhaXkuovku7bvvIjluKbpmLLmipbvvIlcclxuICBoYW5kbGVBdXRvQ29tcGxldGVJbnB1dChldmVudDogRXZlbnQsIGNvbHVtbjogUHJvVGFibGVDb2x1bW4pIHtcclxuICAgIGNvbnN0IGZpZWxkS2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XHJcblxyXG4gICAgLy8g5aaC5p6c6K+l5a2X5q616L+Y5rKh5pyJ6Ziy5oqW5Ye95pWw77yM5Yib5bu65LiA5LiqXHJcbiAgICBpZiAoIXRoaXMuX2F1dG9Db21wbGV0ZURlYm91bmNlTWFwLmhhcyhmaWVsZEtleSkpIHtcclxuICAgICAgY29uc3QgZGVib3VuY2VkRm4gPSBkZWJvdW5jZSgoZXZ0OiBFdmVudCkgPT4ge1xyXG4gICAgICAgIC8vIOmHjeaWsOafpeaJvuWvueW6lOeahCBjb2x1bW7vvIznoa7kv53kvb/nlKjmnIDmlrDnmoTphY3nva5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uID0gdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLmZpbmQoXHJcbiAgICAgICAgICAoY29sKSA9PiAoY29sLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sLnByb3ApID09PSBmaWVsZEtleVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4pIHtcclxuICAgICAgICAgIHRoaXMuZXhlY3V0ZUF1dG9Db21wbGV0ZURhdGFTb3VyY2UoZXZ0LCBjdXJyZW50Q29sdW1uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDMwMCk7IC8vIDMwMG1zIOmYsuaKluW7tui/n1xyXG4gICAgICB0aGlzLl9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcC5zZXQoZmllbGRLZXksIGRlYm91bmNlZEZuKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDosIPnlKjpmLLmipblh73mlbBcclxuICAgIGNvbnN0IGRlYm91bmNlZEZuID0gdGhpcy5fYXV0b0NvbXBsZXRlRGVib3VuY2VNYXAuZ2V0KGZpZWxkS2V5KTtcclxuICAgIGlmIChkZWJvdW5jZWRGbikge1xyXG4gICAgICBkZWJvdW5jZWRGbihldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5YgYXV0b0NvbXBsZXRlIOeahOaVsOaNrua6kFxyXG4gIGdldEF1dG9Db21wbGV0ZURhdGFTb3VyY2UoY29sdW1uOiBQcm9UYWJsZUNvbHVtbik6IGFueVtdIHtcclxuICAgIGNvbnN0IGZpZWxkS2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRQcm9wcyhjb2x1bW46IFByb1RhYmxlQ29sdW1uKTogYW55IHtcclxuICAgIHJldHVybiBjb2x1bW4uZmllbGRQcm9wcztcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPluaMh+WumuWQjeensOeahGxhYmVs5qih5p2/XHJcbiAgZ2V0TGFiZWxUZW1wbGF0ZShuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8g6aaW5YWI5LuO6Ieq5a6a5LmJ5qih5p2/5Lit5p+l5om+XHJcbiAgICAgIGNvbnN0IGN1c3RvbVRlbXBsYXRlID0gdGhpcy5jdXN0b21UZW1wbGF0ZXMuZ2V0KG5hbWUpO1xyXG4gICAgICBpZiAoY3VzdG9tVGVtcGxhdGUpIHtcclxuICAgICAgICByZXR1cm4gY3VzdG9tVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOeEtuWQjuS7jumAmueUqOaooeadv+aYoOWwhOS4reafpeaJvlxyXG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVNYXAuZ2V0KG5hbWUpO1xyXG4gICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOiOt+WPliBmb3JtLWl0ZW0g55qE5Yqo5oCB57G75ZCNXHJcbiAgZ2V0Rm9ybUl0ZW1DbGFzc05hbWUoY29sdW1uOiBQcm9UYWJsZUNvbHVtbik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaWVsZE5hbWUgPSB0aGlzLmdldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wO1xyXG4gICAgcmV0dXJuIGBwcm8tdGFibGUtJHtmaWVsZE5hbWV9LWZvcm0taXRlbWA7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJEOi9wcm9qZWN0cy92cHMtZnJvbnQvRnJvbnQvRGFzUE1TV2ViL2xpYi9wcm8tdGFibGUvc3JjLyIsInNvdXJjZXMiOlsibGliL3Byby10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFXaEYsT0FBTyxFQUFFLHVCQUF1QixFQUErQixNQUFNLFVBQVUsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3BDLE1BQU0sT0FBTyxpQkFBaUI7SUFzSTVCLFlBR1UsWUFBZ0Q7UUFBaEQsaUJBQVksR0FBWixZQUFZLENBQW9DO1FBeElqRCxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUU5QixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUU3QixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUU1QixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBRXZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFFL0Isa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFOUIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFFOUIsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFFOUIsaUJBQVksR0FBVyxJQUFJLENBQUM7UUFFNUIsZUFBVSxHQUFXLE1BQU0sQ0FBQztRQUU1QixlQUFVLEdB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QyxXQUFXOzhCQUV4QixZQUFZLFNBQUMsY0FBYzsyQkFFM0IsZUFBZSxTQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGhhc0luLCBpc05pbCwgZGVib3VuY2UsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcbmltcG9ydCB7IFBST19UQUJMRV9ERUZBVUxUX0NPTFVNTiwgUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHtcclxuICBBdXRvQ29tcGxldGVGaWVsZFByb3BzLFxyXG4gIENoZWNrYm94RmllbGRQcm9wcyxcclxuICBPcHRpb25zVHlwZSxcclxuICBQcm9UYWJsZUNvbHVtbixcclxuICBQcm9UYWJsZVBhZ2VJbmZvLFxyXG4gIFByb1RhYmxlUmVxdWVzdFJlc3VsdCxcclxuICBQcm9UYWJsZVZhbHVlc0NoYW5nZSxcclxuICBTZWxlY3RGaWVsZFByb3BzLFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxuaW1wb3J0IHsgUFJPX1RBQkxFX0NPTFVNTl9SRU1PVEUsIFByb1RhYmxlUmVtb3RlQ29sdW1uU2VydmljZSB9IGZyb20gXCIuL3Rva2Vuc1wiO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXByby10YWJsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvLXRhYmxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3Byby10YWJsZS5jb21wb25lbnQubGVzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuICBASW5wdXQoKSBzaG93U2VhcmNoQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NsZWFyQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0YWJsZU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIEBJbnB1dCgpIG11bHRpUm93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBjb25maXJtQnRuVGV4dDogc3RyaW5nID0gXCLmn6Xor6JcIjtcclxuXHJcbiAgQElucHV0KCkgY2xlYXJCdG5UZXh0OiBzdHJpbmcgPSBcIua4heepulwiO1xyXG5cclxuICBASW5wdXQoKSBsYWJlbFdpZHRoOiBzdHJpbmcgPSBcIjkwcHhcIjtcclxuXHJcbiAgQElucHV0KCkgbGFiZWxBbGlnbjogc3RyaW5nID0gXCJyaWdodFwiO1xyXG5cclxuICBASW5wdXQoKSBmb3JtSXRlbVdpZHRoOiBzdHJpbmcgPSBcIjI3MHB4XCI7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIGJvcmRlcmVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgb3V0ZXJCb3JkZXJlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgZnJvbnRQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHNjcm9sbDogeyB4Pzogc3RyaW5nIHwgbnVtYmVyOyB5Pzogc3RyaW5nIHwgbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgcmVxdWVzdDogKHBhcmFtczogYW55KSA9PiBQcm9taXNlPFByb1RhYmxlUmVxdWVzdFJlc3VsdD47XHJcblxyXG4gIEBJbnB1dCgpIHN1bW1hcnlEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIOaOkuW6j+aooeW8j++8mmxvY2FsIOacrOWcsOaOkuW6j++8m3NlcnZlciDlnKjnur/mjpLluo/vvIjmj5DkuqTnu5nmjqXlj6PvvIlcclxuICBASW5wdXQoKSBzb3J0TW9kZTogXCJsb2NhbFwiIHwgXCJzZXJ2ZXJcIiA9IFwibG9jYWxcIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NvbHVtblNldHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8g5piv5ZCm5byA5ZCv5aSa5YiX5o6S5bqP77yI6buY6K6k5Y2V5YiX77yJXHJcbiAgQElucHV0KCkgbXVsdGlwbGVTb3J0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDliKTmlq3ooYzmmK/lkKbnpoHnlKjnmoTlh73mlbBcclxuICBASW5wdXQoKSByb3dEaXNhYmxlZDogKGRhdGE6IGFueSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xyXG5cclxuICAvLyDmmK/lkKboh6rliqjop6blj5Hor7fmsYJcclxuICBASW5wdXQoKSBhdXRvVHJpZ2dlclJlcXVlc3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBjdXN0b21UYWJsZVJlbmRlcj86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd0RiQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uVmFsdWVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9UYWJsZVZhbHVlc0NoYW5nZT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uUmVzZXRGb3JtQmVmb3JlUmVsb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoXCJhY3Rpb25CYXJcIikgYWN0aW9uQmFyVHBsITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChcIkltZ0FjdGlvbkJhclwiKSBpbWdBY3Rpb25CYXJUcGwhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmKSBhbGxUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIHByaXZhdGUgX3NhdmVkU2VhcmNoUGFyYW1zOiBhbnkgPSB7fTtcclxuXHJcbiAgLy8g5a2Y5YKo5qih5p2/5pig5bCE5YWz57O7IC0g6YCa6L+H5a2X56ym5Liy5ZCN56ew5pig5bCE5Yiw5qih5p2/5byV55SoXHJcbiAgcHJpdmF0ZSB0ZW1wbGF0ZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xyXG5cclxuICAvLyDlrZjlgqjmiYDmnInoh6rlrprkuYnmqKHmnb/nmoTlvJXnlKhcclxuICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+PigpO1xyXG5cclxuICAvLyDorrDlvZXlkITliJfmjpLluo/nirbmgIHvvJonYXNjZW5kJyB8ICdkZXNjZW5kJyB8IG51bGxcclxuXHJcbiAgcHJpdmF0ZSBfc29ydE1hcDogUmVjb3JkPHN0cmluZywgXCJhc2NlbmRcIiB8IFwiZGVzY2VuZFwiIHwgbnVsbD4gPSB7fTtcclxuXHJcbiAgLy8g6K6w5b2V5aSa5YiX5o6S5bqP55qE5LyY5YWI57qn77yI5ZCO6K6+572u55qE5LyY5YWI77yJXHJcbiAgcHJpdmF0ZSBfc29ydFByaW9yaXR5OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvLyDlrZjlgqjmr4/kuKogYXV0b0NvbXBsZXRlIOWtl+auteeahOmYsuaKluWHveaVsFxyXG4gIHByaXZhdGUgX2F1dG9Db21wbGV0ZURlYm91bmNlTWFwOiBNYXA8c3RyaW5nLCAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkPiA9XHJcbiAgICBuZXcgTWFwKCk7XHJcblxyXG4gIC8vIOS7heWcqOWIneWni+WMluaXtui/kOihjOWIl+mFjee9rumihOajgOafpe+8jOmBv+WFjeWQjue7reiwg+eUqOmHjeWkjeinpuWPkVxyXG4gIHByaXZhdGUgX3ByZUNoZWNrRG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBfY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAvLyDnrZvpgInooajljZXmlbDmja7lrZjlgqhcclxuICBfc2VhcmNoUGFyYW1zOiBhbnkgPSB7fTtcclxuXHJcbiAgLy8g562b6YCJ6KGo5Y2VbGlzdOa4suafk+aVsOaNrlxyXG4gIF9zZWFyY2hGaWxlZENvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgX3BhZ2VJbmZvOiBQcm9UYWJsZVBhZ2VJbmZvID0ge1xyXG4gICAgcGFnZUluZGV4OiAxLFxyXG4gICAgcGFnZVNpemU6IDE1LFxyXG4gICAgdG90YWw6IDEwMCxcclxuICAgIHBhZ2VTaXplT3B0aW9uczogWzEwLCAxNSwgMjAsIDUwLCAxMDAsIDUwMCwgMTAwMF0sXHJcbiAgfTtcclxuXHJcbiAgX2xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgX3NlbGVjdGVkVGFibGVSb3c6IGFueSA9IG51bGw7XHJcblxyXG4gIC8vIOmAieS4reeahOihjOaVsOaNru+8iOeUqOS6juWkjemAieahhumAieaLqe+8iS0g5L+d55WZ55So5LqO5YW85a655oCnXHJcbiAgX3NlbGVjdGVkUm93czogYW55W10gPSBbXTtcclxuXHJcbiAgLy8g5L2/55SoIFNldCDlrZjlgqjpgInkuK3pobnnmoQgSUTvvIzmlK/mjIHot6jpobXpgInkuK1cclxuICBwcml2YXRlIF9zZWxlY3RlZFJvd0lkcyA9IG5ldyBTZXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xyXG5cclxuICAvLyDlhajpgInnirbmgIFcclxuICBfY2hlY2tlZEFsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDljYrpgInnirbmgIHvvIjpg6jliIbpgInkuK3vvIlcclxuICBfaW5kZXRlcm1pbmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDov5znqItjb2x1bW5zXHJcbiAgX3NlcnZlckNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgLy8g5a2Y5YKoIGF1dG9Db21wbGV0ZSDlrZfmrrXnmoTmlbDmja7mupBcclxuICBfYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpXHJcbiAgICBASW5qZWN0KFBST19UQUJMRV9DT0xVTU5fUkVNT1RFKVxyXG4gICAgcHJpdmF0ZSBjb2x1bW5SZW1vdGU6IFByb1RhYmxlUmVtb3RlQ29sdW1uU2VydmljZSB8IG51bGxcclxuICApIHt9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hSZW1vdGVDb2x1bW5zKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbHVtblJlbW90ZT8uZ2V0Q29sIHx8ICF0aGlzLnRhYmxlTmFtZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29sdW1uUmVtb3RlLmdldENvbCh0aGlzLnRhYmxlTmFtZSwgdGhpcy5tdWx0aVJvdyk7XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdFJlbW90ZUNvbHVtbnMoY29sdW1uczogYW55W10pIHtcclxuICAgIGlmICghdGhpcy5jb2x1bW5SZW1vdGU/LnNldENvbCB8fCAhdGhpcy50YWJsZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbHVtblJlbW90ZS5zZXRDb2woXHJcbiAgICAgICAgdGhpcy50YWJsZU5hbWUsXHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICB0aGlzLm11bHRpUm93XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyZXN1bHQgJiYgaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdWx0LnRvUHJvbWlzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zID0ge307XHJcbiAgICB0aGlzLmZvcm1hdGVJbm5lckNvbHVtbnModGhpcy5jb2x1bW5zKTtcclxuICAgIGF3YWl0IHRoaXMuc2V0U2VhcmNoUGFyYW1zKHRoaXMuY29sdW1ucyk7XHJcblxyXG4gICAgLy8g5L2/55SoIFByb3h5IOWMheijhSBfc2VhcmNoUGFyYW1z77yM5oum5oiq6KGo5Y2V6aG55YC85Y+Y5YyW5bm25ZCR5aSW5Y+R5Ye65LqL5Lu2XHJcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXMgPSB0aGlzLmNyZWF0ZVNlYXJjaFBhcmFtc1Byb3h5KHRoaXMuX3NlYXJjaFBhcmFtcyk7XHJcbiAgICBpZiAodGhpcy5hdXRvVHJpZ2dlclJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5xdWVyeUR5bmFtaWNDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAvLyDoh6rliqjms6jlhozmiYDmnInoh6rlrprkuYnmqKHmnb9cclxuICAgIHRoaXMuYXV0b1JlZ2lzdGVyVGVtcGxhdGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHByZUNoZWNrU2VydmVyQ29sdW1ucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZmV0Y2hSZW1vdGVDb2x1bW5zKCk7XHJcbiAgICBpZiAoIXJlcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgaW5pdENvbHVtbnMgPSB0aGlzLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sKSA9PiAhY29sLmF1eGlsaWFyeUNvbHVtbilcclxuICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGZpZWxkOiBjb2x1bW4ucHJvcCxcclxuICAgICAgICAgIGlzU2hvdzogIWNvbHVtbi5oaWRlSW5UYWJsZSwgLy8g6buY6K6k5YWo6YOo5pi+56S6XHJcbiAgICAgICAgICBoZWFkZXI6IGNvbHVtbi50aXRsZSxcclxuICAgICAgICAgIHNvcnROYW1lOiBjb2x1bW4uc29ydE5hbWUgfHwgbnVsbCxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIGlmIChyZXMuY29kZSA9PT0gMCkge1xyXG4gICAgICBpZiAoIWlzRXF1YWwocmVzLmRhdGEudGFiQ29sdW1uLCBpbml0Q29sdW1ucykpIHtcclxuICAgICAgICBjb25zdCBpbml0UmVzID0gYXdhaXQgdGhpcy5wZXJzaXN0UmVtb3RlQ29sdW1ucyhpbml0Q29sdW1ucyk7XHJcbiAgICAgICAgaWYgKGluaXRSZXMpIHtcclxuICAgICAgICAgIHRoaXMucXVlcnlEeW5hbWljQ29sdW1ucygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi5LiA6Ie0XCIpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHJlcy5jb2RlID09PSAxMCkge1xyXG4gICAgICAvLyBjb2RlID09PSAxMCDooajnpLrmnKrliJ3lp4vljJbvvIzpnIDopoHnu6fnu63miafooYzlkI7nu63pgLvovpFcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHF1ZXJ5RHluYW1pY0NvbHVtbnMoKSB7XHJcbiAgICBpZiAoIXRoaXMudGFibGVOYW1lIHx8ICF0aGlzLmNvbHVtblJlbW90ZSkgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLl9wcmVDaGVja0RvbmUpIHtcclxuICAgICAgY29uc3QgY2hlY2tSZXN1bHQgPSBhd2FpdCB0aGlzLnByZUNoZWNrU2VydmVyQ29sdW1ucygpO1xyXG4gICAgICB0aGlzLl9wcmVDaGVja0RvbmUgPSB0cnVlO1xyXG4gICAgICBpZiAoIWNoZWNrUmVzdWx0KSByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmZldGNoUmVtb3RlQ29sdW1ucygpO1xyXG4gICAgaWYgKCFyZXMpIHJldHVybjtcclxuICAgIGlmIChyZXMuY29kZSA9PT0gMCkge1xyXG4gICAgICBjb25zdCBfdGFiQ29sdW1uID0gcmVzLmRhdGEudGFiQ29sdW1uLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0aXRsZTogaXRlbS5oZWFkZXIsXHJcbiAgICAgICAgICBwcm9wOiBpdGVtLmZpZWxkLFxyXG4gICAgICAgICAgc29ydE5hbWU6IGl0ZW0uc29ydE5hbWUsXHJcbiAgICAgICAgICBoaWRlSW5UYWJsZTogIWl0ZW0uaXNTaG93LFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLl9zZXJ2ZXJDb2x1bW5zID0gX3RhYkNvbHVtbjtcclxuICAgICAgdGhpcy51cGRhdGVUYWJsZUNvbHVtbnMoX3RhYkNvbHVtbik7XHJcbiAgICB9IGVsc2UgaWYgKHJlcy5jb2RlID09PSAxMCkge1xyXG4gICAgICAvLyDlpoLmnpzmnKrorr7nva7mjqXlj6Pov5Tlm57vvIzpnIDopoHpu5jorqTosIPnlKjkuIDmrKHkv67mlLnlh73mlbDliJ3lp4vljJbmlbDmja5cclxuICAgICAgY29uc3QgaW5pdENvbHVtbnMgPSB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmlsdGVyKChjb2wpID0+ICFjb2wuYXV4aWxpYXJ5Q29sdW1uKVxyXG4gICAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5wcm9wLFxyXG4gICAgICAgICAgICBpc1Nob3c6IHRydWUsIC8vIOm7mOiupOWFqOmDqOaYvuekulxyXG4gICAgICAgICAgICBoZWFkZXI6IGNvbHVtbi50aXRsZSxcclxuICAgICAgICAgICAgc29ydE5hbWU6IGNvbHVtbi5zb3J0TmFtZSB8fCBudWxsLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIC8vIOiwg+eUqOS/ruaUueaOpeWPo+WIneWni+WMluaVsOaNrlxyXG4gICAgICBjb25zdCBpbml0UmVzID0gYXdhaXQgdGhpcy5wZXJzaXN0UmVtb3RlQ29sdW1ucyhpbml0Q29sdW1ucyk7XHJcbiAgICAgIGlmIChpbml0UmVzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUR5bmFtaWNDb2x1bW5zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0ZUlubmVyQ29sdW1ucyhjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5oaWRlSW5UYWJsZSlcclxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7IC4uLlBST19UQUJMRV9ERUZBVUxUX0NPTFVNTiwgLi4uaXRlbSB9IGFzIFByb1RhYmxlQ29sdW1uO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOiHquWKqOazqOWGjOaooeadv+eahOaWueazlVxyXG4gIHByaXZhdGUgYXV0b1JlZ2lzdGVyVGVtcGxhdGVzKCkge1xyXG4gICAgLy8g6I635Y+W5omA5pyJ6ZyA6KaB6Ieq5a6a5LmJ5qih5p2/55qE5YiXXHJcbiAgICBjb25zdCBjb2x1bW5zV2l0aEN1c3RvbVJlbmRlciA9IHRoaXMuX2NvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAoY29sKSA9PiBjb2wuY3VzdG9tUmVuZGVyXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjb2x1bW5zV2l0aEN1c3RvbVJlbmRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIOWwneivleS7jkNvbnRlbnRDaGlsZHJlbuS4reafpeaJvuWvueW6lOeahOaooeadv1xyXG4gICAgICBjb2x1bW5zV2l0aEN1c3RvbVJlbmRlci5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZU5hbWUgPSBjb2x1bW4uY3VzdG9tUmVuZGVyITtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuZmluZFRlbXBsYXRlQnlOYW1lKHRlbXBsYXRlTmFtZSk7XHJcblxyXG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXMuc2V0KHRlbXBsYXRlTmFtZSwgdGVtcGxhdGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDojrflj5bmiYDmnInpnIDopoHoh6rlrprkuYlsYWJlbOaooeadv+eahOWIl++8iOS9v+eUqOWOn+Wni2NvbHVtbnPvvIznoa7kv53pobrluo/mraPnoa7vvIlcclxuICAgIGNvbnN0IGNvbHVtbnNXaXRoQ3VzdG9tTGFiZWwgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAoY29sKSA9PiBjb2wuY3VzdG9tTGFiZWxSZW5kZXJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGNvbHVtbnNXaXRoQ3VzdG9tTGFiZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyDlsJ3or5Xku45Db250ZW50Q2hpbGRyZW7kuK3mn6Xmib7lr7nlupTnmoRsYWJlbOaooeadv1xyXG4gICAgICBjb2x1bW5zV2l0aEN1c3RvbUxhYmVsLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IGNvbHVtbi5jdXN0b21MYWJlbFJlbmRlciE7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmZpbmRMYWJlbFRlbXBsYXRlQnlOYW1lKFxyXG4gICAgICAgICAgdGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgY29sdW1uc1dpdGhDdXN0b21MYWJlbFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXMuc2V0KHRlbXBsYXRlTmFtZSwgdGVtcGxhdGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOagueaNruWQjeensOafpeaJvuaooeadv1xyXG4gIHByaXZhdGUgZmluZFRlbXBsYXRlQnlOYW1lKHRlbXBsYXRlTmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVtcGxhdGVGcm9tQ29udGVudCh0ZW1wbGF0ZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8g5LuOQ29udGVudENoaWxkcmVu5Lit5p+l5om+5oyH5a6a5ZCN56ew55qE5qih5p2/XHJcbiAgcHJpdmF0ZSBnZXRUZW1wbGF0ZUZyb21Db250ZW50KFxyXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmdcclxuICApOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XHJcbiAgICBjb25zdCBjdXN0b21SZW5kZXJDb2x1bW5zID0gdGhpcy5fY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLmN1c3RvbVJlbmRlcik7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZUluZGV4ID0gY3VzdG9tUmVuZGVyQ29sdW1ucy5maW5kSW5kZXgoXHJcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21SZW5kZXIgPT09IHRlbXBsYXRlTmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGVtcGxhdGVJbmRleCA+PSAwKSB7XHJcbiAgICAgIC8vIOiOt+WPluaJgOacieaooeadv++8jOW5tui/h+a7pOaOieeJueauiuaooeadv++8iGFjdGlvbkJhcuWSjEltZ0FjdGlvbkJhcu+8iVxyXG4gICAgICAvLyDov5nmoLflj6/ku6Xpgb/lhY3lm6DkuLrnibnmrormqKHmnb/nmoTkvY3nva7lr7zoh7TntKLlvJXorqHnrpfplJnor69cclxuICAgICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5hbGxUZW1wbGF0ZXMudG9BcnJheSgpO1xyXG4gICAgICBjb25zdCBjdXN0b21UZW1wbGF0ZXMgPSB0ZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAgICh0cGwpID0+IHRwbCAhPT0gdGhpcy5hY3Rpb25CYXJUcGwgJiYgdHBsICE9PSB0aGlzLmltZ0FjdGlvbkJhclRwbFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHRlbXBsYXRlSW5kZXggPCBjdXN0b21UZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjdXN0b21UZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF07XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS53YXJuKGDmnKrmib7liLDmqKHmnb8gJHt0ZW1wbGF0ZU5hbWV9YCk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIOagueaNruWQjeensOafpeaJvmxhYmVs5qih5p2/XHJcbiAgcHJpdmF0ZSBmaW5kTGFiZWxUZW1wbGF0ZUJ5TmFtZShcclxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxyXG4gICAgY3VzdG9tTGFiZWxDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdXHJcbiAgKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xyXG4gICAgY29uc3QgdGVtcGxhdGVJbmRleCA9IGN1c3RvbUxhYmVsQ29sdW1ucy5maW5kSW5kZXgoXHJcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21MYWJlbFJlbmRlciA9PT0gdGVtcGxhdGVOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0ZW1wbGF0ZUluZGV4ID49IDApIHtcclxuICAgICAgLy8g6I635Y+W5omA5pyJ5qih5p2/77yM5bm26L+H5ruk5o6J54m55q6K5qih5p2/77yIYWN0aW9uQmFy5ZKMSW1nQWN0aW9uQmFy77yJXHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IHRoaXMuYWxsVGVtcGxhdGVzLnRvQXJyYXkoKTtcclxuICAgICAgY29uc3QgY3VzdG9tVGVtcGxhdGVzID0gdGVtcGxhdGVzLmZpbHRlcihcclxuICAgICAgICAodHBsKSA9PiB0cGwgIT09IHRoaXMuYWN0aW9uQmFyVHBsICYmIHRwbCAhPT0gdGhpcy5pbWdBY3Rpb25CYXJUcGxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIOiuoeeul2xhYmVs5qih5p2/55qE57Si5byV77ya6ZyA6KaB6Lez6L+H5omA5pyJ55qEY3VzdG9tUmVuZGVy5qih5p2/XHJcbiAgICAgIGNvbnN0IGN1c3RvbVJlbmRlckNvbHVtbnMgPSB0aGlzLl9jb2x1bW5zLmZpbHRlcihcclxuICAgICAgICAoY29sKSA9PiBjb2wuY3VzdG9tUmVuZGVyXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGxhYmVsVGVtcGxhdGVJbmRleCA9IGN1c3RvbVJlbmRlckNvbHVtbnMubGVuZ3RoICsgdGVtcGxhdGVJbmRleDtcclxuXHJcbiAgICAgIGlmIChsYWJlbFRlbXBsYXRlSW5kZXggPCBjdXN0b21UZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjdXN0b21UZW1wbGF0ZXNbbGFiZWxUZW1wbGF0ZUluZGV4XTtcclxuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLndhcm4oYOacquaJvuWIsGxhYmVs5qih5p2/ICR7dGVtcGxhdGVOYW1lfWApO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyDorr7nva7nrZvpgInooajljZXpu5jorqTlsZ7mgKdcclxuICBwcml2YXRlIHNldFNlYXJjaEZvcm1EZWZhdWx0UHJvcChjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0udmFsdWVUeXBlKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uZmllbGRQcm9wcykge1xyXG4gICAgICAgICAgaXRlbS5maWVsZFByb3BzID0ge1xyXG4gICAgICAgICAgICAuLi5QUk9fVEFCTEVfREVGQVVMVF9QUk9QU1tpdGVtLnZhbHVlVHlwZV0sXHJcbiAgICAgICAgICAgIC4uLml0ZW0uZmllbGRQcm9wcyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGl0ZW0uZmllbGRQcm9wcyA9IHsgLi4uUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbaXRlbS52YWx1ZVR5cGVdIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOWKqOaAgeiuvue9rk9wdGlvbnNcclxuICBwcml2YXRlIHNldFNlbGVjdFJlcXVlc3QoY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSkge1xyXG4gICAgY29sdW1ucy5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0uZmllbGRQcm9wcyAmJiBoYXNJbihpdGVtLmZpZWxkUHJvcHMsIFwicmVxdWVzdFwiKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgKFxyXG4gICAgICAgICAgICBpdGVtLmZpZWxkUHJvcHMgYXMgU2VsZWN0RmllbGRQcm9wc1xyXG4gICAgICAgICAgKS5yZXF1ZXN0Py4oKTtcclxuICAgICAgICAgIChpdGVtLmZpZWxkUHJvcHMgYXMgU2VsZWN0RmllbGRQcm9wcykub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIChpdGVtLmZpZWxkUHJvcHMgYXMgU2VsZWN0RmllbGRQcm9wcykub3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldFNlYXJjaFBhcmFtcyhjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMgPSBbXTtcclxuICAgIGNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZsYWcgPSAhaXRlbS5oaWRlSW5TZWFyY2ggJiYgaXRlbS52YWx1ZVR5cGU7XHJcbiAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgIHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucy5wdXNoKGNsb25lRGVlcChpdGVtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmbGFnO1xyXG4gICAgICB9KVxyXG4gICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IFBST19UQUJMRV9ERUZBVUxUX1BST1BTW2NvbHVtbi52YWx1ZVR5cGVdLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyDlr7nkuo5jaGVja2JveOexu+Wei++8jOS7jm9wdGlvbnPkuK3mib7lh7pjaGVja2Vk5Li6dHJ1ZeeahOmhueS9nOS4uum7mOiupOWAvFxyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWVUeXBlID09PSBcImNoZWNrYm94XCIpIHtcclxuICAgICAgICAgIGNvbnN0IGNoZWNrZWRWYWx1ZXMgPSAoY29sdW1uLmZpZWxkUHJvcHM/Lm9wdGlvbnMgfHwgW10pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKG9wdDogT3B0aW9uc1R5cGUpID0+IG9wdC5jaGVja2VkKVxyXG4gICAgICAgICAgICAubWFwKChvcHQ6IE9wdGlvbnNUeXBlKSA9PiBvcHQudmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPVxyXG4gICAgICAgICAgICBjaGVja2VkVmFsdWVzLmxlbmd0aCA+IDAgPyBjaGVja2VkVmFsdWVzIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9IGNvbHVtbi5maWVsZFByb3BzPy52YWx1ZSB8fCBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDliJ3lp4vljJYgYXV0b0NvbXBsZXRlIOaVsOaNrua6kFxyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWVUeXBlID09PSBcImF1dG9Db21wbGV0ZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1trZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyDmoLnmja7liJfnmoQgb3JkZXIg5a2X5q616L+b6KGM5o6S5bqP77yM5pyq6K6+572uIG9yZGVyIOeahOaUvuWcqOacgOWQjlxyXG4gICAgdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFPcmRlciA9IGlzTmlsKGE/Lm9yZGVyKSA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogYS5vcmRlcjtcclxuICAgICAgY29uc3QgYk9yZGVyID0gaXNOaWwoYj8ub3JkZXIpID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBiLm9yZGVyO1xyXG4gICAgICBpZiAoYU9yZGVyID09PSBiT3JkZXIpIHJldHVybiAwO1xyXG4gICAgICByZXR1cm4gYU9yZGVyIC0gYk9yZGVyO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWFyY2hGb3JtRGVmYXVsdFByb3AodGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zKTtcclxuXHJcbiAgICAvLyDlubblj5HliqDovb3miYDmnInpnIDopoHlvILmraXojrflj5bnmoTpgInpoblcclxuICAgIHRoaXMuc2V0U2VsZWN0UmVxdWVzdCh0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUYWJsZUNvbHVtbnMoaW5qZWN0Q29sdW1uczogUHJvVGFibGVDb2x1bW5bXSkge1xyXG4gICAgLy8gMS4g5L2/55So5pyA5Y6f5aeL55qEY29sdW1uc+S9nOS4uuaVsOaNrua6kO+8jOehruS/nei+heWKqeWIl+WujOWFqOS4jeWPl+W9seWTjVxyXG4gICAgY29uc3Qgb3JpZ2luYWxDb2x1bW5zID0gY2xvbmVEZWVwKHRoaXMuY29sdW1ucyk7XHJcblxyXG4gICAgLy8gMi4g5aSE55CG5a2X5q615pig5bCE77yI5aaC5p6c5o+Q5L6b5LqGZmllbGRz5Y+C5pWw77yJXHJcbiAgICBsZXQgcHJvY2Vzc2VkSW5qZWN0Q29sdW1ucyA9IGluamVjdENvbHVtbnM7XHJcblxyXG4gICAgLy8gMy4g5YiG56a76L6F5Yqp5YiX5ZKM6Z2e6L6F5Yqp5YiX77yI5L2/55So5Y6f5aeL5pWw5o2u77yJXHJcbiAgICBjb25zdCBub25BdXhpbGlhcnlDb2x1bW5zID0gb3JpZ2luYWxDb2x1bW5zLmZpbHRlcihcclxuICAgICAgKGNvbCkgPT4gIWNvbC5hdXhpbGlhcnlDb2x1bW5cclxuICAgICk7XHJcblxyXG4gICAgLy8gNC4g5oyJ54WnaW5qZWN0Q29sdW1uc+eahOmhuuW6j+mHjeaWsOaOkuWIl+mdnui+heWKqeWIl1xyXG4gICAgY29uc3QgcmVvcmRlcmVkTm9uQXV4aWxpYXJ5Q29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG4gICAgY29uc3QgcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1ucyA9IFsuLi5ub25BdXhpbGlhcnlDb2x1bW5zXTsgLy8g5aSN5Yi25LiA5Lu955So5LqO5p+l5om+5ZKM56e76ZmkXHJcblxyXG4gICAgcHJvY2Vzc2VkSW5qZWN0Q29sdW1ucy5mb3JFYWNoKChpbmplY3RDb2wpID0+IHtcclxuICAgICAgLy8g5p+l5om+6Z2e6L6F5Yqp5YiX5Lit5a+55bqU55qE5LiL5qCHXHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29sSW5kZXggPSByZW1haW5pbmdOb25BdXhpbGlhcnlDb2x1bW5zLmZpbmRJbmRleChcclxuICAgICAgICAoY29sKSA9PiBjb2wucHJvcCA9PT0gaW5qZWN0Q29sLnByb3BcclxuICAgICAgKTtcclxuICAgICAgaWYgKGV4aXN0aW5nQ29sSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgLy8g5aaC5p6c5om+5Yiw55u45ZCM5YiX77yM55SoaW5qZWN0Q29sdW1uc+S4reeahOWxnuaAp+imhuebluWOn+Wni2NvbHVtbnPkuK3nmoTlsZ7mgKdcclxuICAgICAgICBjb25zdCBleGlzdGluZ0NvbCA9IHJlbWFpbmluZ05vbkF1eGlsaWFyeUNvbHVtbnNbZXhpc3RpbmdDb2xJbmRleF07XHJcblxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb2wgPSB7IC4uLmV4aXN0aW5nQ29sLCAuLi5pbmplY3RDb2wgfTtcclxuICAgICAgICByZW9yZGVyZWROb25BdXhpbGlhcnlDb2x1bW5zLnB1c2godXBkYXRlZENvbCk7XHJcbiAgICAgICAgLy8g5LuO5Ymp5L2Z5pWw57uE5Lit56e76Zmk77yM6YG/5YWN6YeN5aSNXHJcbiAgICAgICAgcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1ucy5zcGxpY2UoZXhpc3RpbmdDb2xJbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g5aaC5p6c5rKh5om+5Yiw5a+55bqU55qE5YiX77yM55u05o6l5re75YqgaW5qZWN0Q29sdW1uc+S4reeahOWIl1xyXG4gICAgICAgIHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnMucHVzaChpbmplY3RDb2wpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyA1LiDlpITnkIbliankvZnnmoTljp/lp4tjb2x1bW5z5Lit55qE6Z2e6L6F5Yqp5YiX77yI5ZyoaW5qZWN0Q29sdW1uc+S4reacquWHuueOsOeahOWIl++8iVxyXG4gICAgLy8g6L+Z5Lqb5YiX5bqU6K+l6KKr6ZqQ6JeP77yI6K6+572uaGlkZUluVGFibGXkuLp0cnVl77yJXHJcbiAgICByZW1haW5pbmdOb25BdXhpbGlhcnlDb2x1bW5zLmZvckVhY2goKHJlbWFpbmluZ0NvbCkgPT4ge1xyXG4gICAgICBjb25zdCBoaWRkZW5Db2wgPSB7IC4uLnJlbWFpbmluZ0NvbCwgaGlkZUluVGFibGU6IHRydWUgfTtcclxuICAgICAgcmVvcmRlcmVkTm9uQXV4aWxpYXJ5Q29sdW1ucy5wdXNoKGhpZGRlbkNvbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyA2LiDmjInnhafljp/lp4tjb2x1bW5z55qE6aG65bqP6YeN5paw57uE5ZCI77ya5L+d5oyB6L6F5Yqp5YiX55qE5Y6f5aeL5L2N572u5ZKM5bGe5oCnXHJcbiAgICBjb25zdCBmaW5hbENvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuICAgIGxldCBub25BdXhpbGlhcnlJbmRleCA9IDA7XHJcbiAgICBsZXQgYXV4aWxpYXJ5SW5kZXggPSAwO1xyXG5cclxuICAgIG9yaWdpbmFsQ29sdW1ucy5mb3JFYWNoKChvcmlnaW5hbENvbCkgPT4ge1xyXG4gICAgICBpZiAob3JpZ2luYWxDb2wuYXV4aWxpYXJ5Q29sdW1uKSB7XHJcbiAgICAgICAgLy8g5aaC5p6c5piv6L6F5Yqp5YiX77yM5L2/55So5Y6f5aeL5YiX5pWw5o2u77yM5a6M5YWo5LiN6L+b6KGM5Lu75L2V5L+u5pS5XHJcbiAgICAgICAgZmluYWxDb2x1bW5zLnB1c2gob3JpZ2luYWxDb2wpO1xyXG4gICAgICAgIGF1eGlsaWFyeUluZGV4Kys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g5aaC5p6c5piv6Z2e6L6F5Yqp5YiX77yM5L2/55So6YeN5paw5o6S5bqP5ZCO55qE5YiX77yM5L2G5L+d55WZ5Y6f5aeL5YiX55qE5omA5pyJ5bGe5oCnXHJcbiAgICAgICAgY29uc3QgcmVvcmRlcmVkQ29sID0gcmVvcmRlcmVkTm9uQXV4aWxpYXJ5Q29sdW1uc1tub25BdXhpbGlhcnlJbmRleF07XHJcbiAgICAgICAgaWYgKHJlb3JkZXJlZENvbCkge1xyXG4gICAgICAgICAgLy8g5ZCI5bm25Y6f5aeL5YiX5ZKM6YeN5paw5o6S5bqP5ZCO55qE5YiX77yM56Gu5L+d5L+d55WZ5omA5pyJ5Y6f5aeL5bGe5oCnXHJcbiAgICAgICAgICBjb25zdCBtZXJnZWRDb2wgPSB7IC4uLm9yaWdpbmFsQ29sLCAuLi5yZW9yZGVyZWRDb2wgfTtcclxuICAgICAgICAgIGZpbmFsQ29sdW1ucy5wdXNoKG1lcmdlZENvbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIOWmguaenOmHjeaWsOaOkuW6j+WQjueahOWIl+S4jeWtmOWcqO+8jOS9v+eUqOWOn+Wni+WIl1xyXG4gICAgICAgICAgZmluYWxDb2x1bW5zLnB1c2gob3JpZ2luYWxDb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub25BdXhpbGlhcnlJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZm9ybWF0ZUlubmVyQ29sdW1ucyhmaW5hbENvbHVtbnMpO1xyXG4gIH1cclxuXHJcbiAgLy8g6YCa6L+HIFByb3h5IOebkeWQrCBfc2VhcmNoUGFyYW1zIOeahOWxnuaAp+WPmOabtFxyXG4gIHByaXZhdGUgY3JlYXRlU2VhcmNoUGFyYW1zUHJveHkodGFyZ2V0OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc3QgaGFuZGxlcjogUHJveHlIYW5kbGVyPGFueT4gPSB7XHJcbiAgICAgIHNldChvYmo6IGFueSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKHByb3ApO1xyXG4gICAgICAgIGNvbnN0IG9sZFZhbCA9IG9ialtrZXldO1xyXG4gICAgICAgIGlmIChvbGRWYWwgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHNlbGYub25WYWx1ZXNDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIHBhcmFtczogc2VsZi5nZXRTZWFyY2hQYXJhbXMoKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckVtcHR5U2VhcmNoUGFyYW1zKCkge1xyXG4gICAgY29uc3QgY2xvbmVTZWFyY2hQYXJhbXMgPSBjbG9uZURlZXAodGhpcy5fc2VhcmNoUGFyYW1zKTtcclxuICAgIHJldHVybiBjbG9uZVNlYXJjaFBhcmFtcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJTb3J0UGF5bG9hZCgpIHtcclxuICAgIC8vIOaehOW7uua/gOa0u+aOkuW6j+mbhuWQiO+8iOaMieS8mOWFiOe6p+S7juS9juWIsOmrmO+8jOacq+WwvuS8mOWFiO+8iVxyXG4gICAgY29uc3QgYWN0aXZlS2V5cyA9IHRoaXMuX3NvcnRQcmlvcml0eS5maWx0ZXIoKGspID0+ICEhdGhpcy5fc29ydE1hcFtrXSk7XHJcbiAgICBpZiAoYWN0aXZlS2V5cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgY29uc3Qgc29ydHMgPSBhY3RpdmVLZXlzLm1hcCgoZmllbGQpID0+IHtcclxuICAgICAgLy8g5p+l5om+5a+55bqU55qE5YiX6YWN572u77yM5LyY5YWI5L2/55Soc29ydE5hbWXlrZfmrrVcclxuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5wcm9wID09PSBmaWVsZCk7XHJcbiAgICAgIGNvbnN0IHNvcnRGaWVsZCA9IGNvbHVtbj8uc29ydE5hbWUgfHwgZmllbGQ7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcclxuICAgICAgICBvcmRlcjogdGhpcy5fc29ydE1hcFtmaWVsZF0hLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZVNvcnQpIHtcclxuICAgICAgcmV0dXJuIHNvcnRzOyAvLyDku6XmlbDnu4TlvaLlvI/mj5DkuqTlpJrliJfmjpLluo9cclxuICAgIH1cclxuICAgIGNvbnN0IFtmaXJzdF0gPSBzb3J0cztcclxuICAgIHJldHVybiBmaXJzdDsgLy8g5YW85a655Y2V5YiX57uT5p6EIHsgZmllbGQsIG9yZGVyIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc29ydERhdGFTb3VyY2VJblBsYWNlKCkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkgfHwgdGhpcy5kYXRhU291cmNlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgY29uc3QgYWN0aXZlS2V5cyA9IHRoaXMuX3NvcnRQcmlvcml0eS5maWx0ZXIoKGspID0+ICEhdGhpcy5fc29ydE1hcFtrXSk7XHJcbiAgICBpZiAoYWN0aXZlS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAvLyDlpI3liLbkuIDku73kvJjlhYjnuqfvvIzku47liY3liLDlkI7kvJjlhYjnuqfku47kvY7liLDpq5jvvIjmnIDlkI7orr7nva7nmoTlrZfmrrXkvJjlhYjvvIlcclxuICAgIGNvbnN0IGtleXNJblByaW9yaXR5ID0gWy4uLmFjdGl2ZUtleXNdO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBrZXlzSW5Qcmlvcml0eS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0ga2V5c0luUHJpb3JpdHlbaV07XHJcbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLl9zb3J0TWFwW2ZpZWxkXSE7XHJcbiAgICAgICAgY29uc3QgYXYgPSBhPy5bZmllbGRdO1xyXG4gICAgICAgIGNvbnN0IGJ2ID0gYj8uW2ZpZWxkXTtcclxuICAgICAgICBjb25zdCBjbXAgPSB0aGlzLmNvbXBhcmVWYWx1ZXMoYXYsIGJ2KTtcclxuICAgICAgICBpZiAoY21wICE9PSAwKSByZXR1cm4gb3JkZXIgPT09IFwiYXNjZW5kXCIgPyBjbXAgOiAtY21wO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVWYWx1ZXMoYVZhbDogYW55LCBiVmFsOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKGFWYWwgPT0gbnVsbCAmJiBiVmFsID09IG51bGwpIHJldHVybiAwO1xyXG4gICAgaWYgKGFWYWwgPT0gbnVsbCkgcmV0dXJuIC0xO1xyXG4gICAgaWYgKGJWYWwgPT0gbnVsbCkgcmV0dXJuIDE7XHJcbiAgICBpZiAoYVZhbCBpbnN0YW5jZW9mIERhdGUgJiYgYlZhbCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIGFWYWwuZ2V0VGltZSgpIC0gYlZhbC5nZXRUaW1lKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09IFwiYm9vbGVhblwiICYmIHR5cGVvZiBiVmFsID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICByZXR1cm4gYVZhbCA9PT0gYlZhbCA/IDAgOiBhVmFsID8gMSA6IC0xO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBhVmFsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBiVmFsID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHJldHVybiBhVmFsIC0gYlZhbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYlZhbCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICByZXR1cm4gYVZhbC5sb2NhbGVDb21wYXJlKGJWYWwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYU51bSA9IE51bWJlcihhVmFsKTtcclxuICAgIGNvbnN0IGJOdW0gPSBOdW1iZXIoYlZhbCk7XHJcbiAgICBpZiAoIWlzTmFOKGFOdW0pICYmICFpc05hTihiTnVtKSkgcmV0dXJuIGFOdW0gLSBiTnVtO1xyXG4gICAgcmV0dXJuIFN0cmluZyhhVmFsKS5sb2NhbGVDb21wYXJlKFN0cmluZyhiVmFsKSk7XHJcbiAgfVxyXG5cclxuICAvLyDmiafooYwgYXV0b0NvbXBsZXRlIOaVsOaNrua6kOafpeivou+8iOWunumZheaJp+ihjOmAu+i+ke+8iVxyXG4gIHByaXZhdGUgZXhlY3V0ZUF1dG9Db21wbGV0ZURhdGFTb3VyY2UoZXZlbnQ6IEV2ZW50LCBjb2x1bW46IFByb1RhYmxlQ29sdW1uKSB7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IGNvbHVtbi5maWVsZFByb3BzPy5uYW1lIHx8IGNvbHVtbi5wcm9wO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgKGNvbHVtbi5maWVsZFByb3BzIGFzIEF1dG9Db21wbGV0ZUZpZWxkUHJvcHMpLmRhdGFTb3VyY2UgJiZcclxuICAgICAgdHlwZW9mIChjb2x1bW4uZmllbGRQcm9wcyBhcyBBdXRvQ29tcGxldGVGaWVsZFByb3BzKS5kYXRhU291cmNlID09PVxyXG4gICAgICAgIFwiZnVuY3Rpb25cIlxyXG4gICAgKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKGNvbHVtbi5maWVsZFByb3BzIGFzIEF1dG9Db21wbGV0ZUZpZWxkUHJvcHMpLmRhdGFTb3VyY2UoXHJcbiAgICAgICAgICBldmVudFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8g5aaC5p6c6L+U5Zue55qE5pivIFByb21pc2XvvIzlpITnkIblvILmraXnu5PmnpxcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgcmVzdWx0XHJcbiAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gZGF0YSB8fCBbXTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBdXRvQ29tcGxldGUgZGF0YVNvdXJjZSBlcnJvcjpcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2ZpZWxkS2V5XSA9IFtdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8g5ZCM5q2l6L+U5Zue57uT5p6cXHJcbiAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gPSByZXN1bHQgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBdXRvQ29tcGxldGUgZGF0YVNvdXJjZSBlcnJvcjpcIiwgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2ZpZWxkS2V5XSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VhcmNoUGFyYW1zKG9wdGlvbnM/OiB7XHJcbiAgICB1c2VTYXZlZD86IGJvb2xlYW47IC8vIOS9v+eUqOacgOi/keS4gOasoeafpeivouaPkOS6pOeahOWPguaVsO+8jOm7mOiupOS4uiBmYWxzZe+8m2ZhbHNlIOS4uuW9k+WJjeihqOWNleWAvFxyXG4gIH0pOiBhbnkge1xyXG4gICAgY29uc3QgeyB1c2VTYXZlZCA9IGZhbHNlIH0gPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgY29uc3QgcmF3UGFyYW1zID0gdXNlU2F2ZWQgPyB0aGlzLl9zYXZlZFNlYXJjaFBhcmFtcyA6IHRoaXMuX3NlYXJjaFBhcmFtcztcclxuICAgIGNvbnN0IHBhcmFtcyA9IGNsb25lRGVlcChyYXdQYXJhbXMgfHwge30pO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCxcclxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5fcGFnZUluZm8ucGFnZVNpemUsXHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIOWcqOe6v+aOkuW6j+aooeW8j++8muaKiuaOkuW6j+WvueixoeaPkOS6pOe7meaOpeWPo1xyXG4gICAgICAuLi4odGhpcy5zb3J0TW9kZSA9PT0gXCJzZXJ2ZXJcIlxyXG4gICAgICAgID8geyBzb3J0OiB0aGlzLmJ1aWxkU2VydmVyU29ydFBheWxvYWQoKSB9XHJcbiAgICAgICAgOiB7fSksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbG9hZChhZnRlckRlbGV0ZT86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaGFuZGxlUXVlcnkoYWZ0ZXJEZWxldGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEZpZWxkc1ZhbHVlKGZpZWxkczogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgT2JqZWN0LmtleXMoZmllbGRzKS5mb3JFYWNoKChrKSA9PiB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trXSA9IGZpZWxkc1trXTsgLy8g5L+d55WZIFByb3h577yM6YCQ6aG56LWL5YC86Kem5Y+R5oum5oiqXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGaWVsZFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyU2VsZWN0ZWRSb3coKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRDb2x1bW5zKFxyXG4gICAgY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSxcclxuICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgIHJlbG9hZD86IGJvb2xlYW47IC8vIOaYr+WQpumHjeaWsOWKoOi9veaVsOaNru+8jOm7mOiupOS4uiBmYWxzZVxyXG4gICAgfVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8g5pu05pawIGNvbHVtbnMg6L6T5YWl5bGe5oCnXHJcbiAgICB0aGlzLmNvbHVtbnMgPSBjbG9uZURlZXAoY29sdW1ucyk7XHJcblxyXG4gICAgLy8g6YeN5paw5qC85byP5YyW5YaF6YOo5YiXXHJcbiAgICB0aGlzLmZvcm1hdGVJbm5lckNvbHVtbnModGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAvLyDph43mlrDorr7nva7mkJzntKLlj4LmlbDvvIjlvILmraXmk43kvZzvvIlcclxuICAgIC8vIOWFiOa4heepuuaXp+eahOaQnOe0ouWPguaVsO+8jOmBv+WFjeaXp+aVsOaNruaui+eVmVxyXG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zID0ge307XHJcbiAgICBhd2FpdCB0aGlzLnNldFNlYXJjaFBhcmFtcyh0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAgIC8vIOmHjeaWsOWIm+W7uiBQcm94ee+8jOehruS/neihqOWNlemhueWAvOWPmOWMluiDveato+W4uOinpuWPkeS6i+S7tlxyXG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zID0gdGhpcy5jcmVhdGVTZWFyY2hQYXJhbXNQcm94eSh0aGlzLl9zZWFyY2hQYXJhbXMpO1xyXG5cclxuICAgIC8vIOmHjeaWsOazqOWGjOaooeadv++8iOWmguaenOe7hOS7tuW3sue7j+WIneWni+WMluWujOaIkO+8iVxyXG4gICAgaWYgKHRoaXMuYWxsVGVtcGxhdGVzKSB7XHJcbiAgICAgIHRoaXMuYXV0b1JlZ2lzdGVyVGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c6K6+572u5LqGIHJlbG9hZCDpgInpobnkuLogdHJ1Ze+8jOWImemHjeaWsOafpeivouaVsOaNrlxyXG4gICAgaWYgKG9wdGlvbnM/LnJlbG9hZCA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRSb3dEYXRhPFQgPSBhbnk+KCk6IFQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFibGVSb3c7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2hlY2tlZFJvd3M8VCA9IGFueT4oKTogVFtdIHtcclxuICAgIGlmICghdGhpcy5zaG93Q2hlY2tib3gpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgLy8g6L+U5Zue5b2T5YmN5pWw5o2u5rqQ5Lit5omA5pyJIGNoZWNrZWQg5Li6IHRydWUg55qE6aG5XHJcbiAgICAvLyDms6jmhI/vvJrlpoLmnpzpnIDopoHojrflj5bmiYDmnInpobXnmoTpgInkuK3pobnvvIzpnIDopoHpgY3ljobmiYDmnInmlbDmja7mupDmiJbkvb/nlKggX3NlbGVjdGVkUm93SWRzXHJcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmZpbHRlcigocm93KSA9PiByb3cuY2hlY2tlZCA9PT0gdHJ1ZSkgYXMgVFtdO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W5oyH5a6a5ZCN56ew55qE5qih5p2/XHJcbiAgZ2V0VGVtcGxhdGUobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xyXG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIOmmluWFiOS7juiHquWumuS5ieaooeadv+S4reafpeaJvlxyXG4gICAgICBjb25zdCBjdXN0b21UZW1wbGF0ZSA9IHRoaXMuY3VzdG9tVGVtcGxhdGVzLmdldChuYW1lKTtcclxuICAgICAgaWYgKGN1c3RvbVRlbXBsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1c3RvbVRlbXBsYXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDnhLblkI7ku47pgJrnlKjmqKHmnb/mmKDlsITkuK3mn6Xmib5cclxuICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlTWFwLmdldChuYW1lKTtcclxuICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUb29sVGlwVGV4dFZhbHVlKGNvbHVtbjogUHJvVGFibGVDb2x1bW4sIGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBrZXkgPVxyXG4gICAgICBjb2x1bW4uY3VzdG9tUmVuZGVyICYmIHRoaXMuZ2V0VGVtcGxhdGUoY29sdW1uLmN1c3RvbVJlbmRlcilcclxuICAgICAgICA/IFwiXCJcclxuICAgICAgICA6IGNvbHVtbi5lbGxpcHNpc1xyXG4gICAgICAgID8gY29sdW1uLnByb3BcclxuICAgICAgICA6IFwiXCI7XHJcbiAgICByZXR1cm4gIWtleSA/IFwiXCIgOiBkYXRhW2tleV07XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZVJvd0NoZWNrZWQoZGF0YTogYW55KSB7XHJcbiAgICAvLyDlkK/nlKjlpI3pgInmoYbml7bvvJrooYzpq5jkuq7lupTkuI7lpI3pgInmoYbpgInkuK3nirbmgIHkuIDoh7TvvIjmlK/mjIHlpJrpgInvvIlcclxuICAgIGlmICh0aGlzLnNob3dDaGVja2JveCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc1Jvd0NoZWNrZWQoZGF0YSk7XHJcbiAgICB9XHJcbiAgICAvLyDmnKrlkK/nlKjlpI3pgInmoYbml7bvvJrku43nhLbkvb/nlKjljZXpgInooYzpq5jkuq5cclxuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdykgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuX3NlbGVjdGVkVGFibGVSb3cpID09PSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICB9XHJcblxyXG4gIC8vIOajgOafpeihjOaYr+WQpuiiq+emgeeUqFxyXG4gIGlzUm93RGlzYWJsZWQoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5yb3dEaXNhYmxlZCA/IHRoaXMucm93RGlzYWJsZWQoZGF0YSkgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIOajgOafpeihjOaYr+WQpuiiq+WkjemAieahhumAieS4re+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIGlzUm93Q2hlY2tlZChkYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zaG93Q2hlY2tib3gpIHJldHVybiBmYWxzZTtcclxuICAgIC8vIOebtOaOpeivu+WPluaVsOaNruWvueixoeeahCBjaGVja2VkIOWxnuaAp1xyXG4gICAgcmV0dXJuIGRhdGEuY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOWIh+aNouihjOeahOmAieS4reeKtuaAge+8iOaVsOaNrumpseWKqOaooeW8j++8jOS/neeVmeeUqOS6juWFvOWuue+8iVxyXG4gIHRvZ2dsZVJvd0NoZWNrZWQoZGF0YTogYW55LCBjaGVja2VkOiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIOmYu+atouS6i+S7tuWGkuazoe+8jOmBv+WFjeinpuWPkeihjOeCueWHu1xyXG4gICAgfVxyXG4gICAgLy8g5aaC5p6c6KGM6KKr56aB55So77yM5LiN5YWB6K645YiH5o2i6YCJ5Lit54q25oCBXHJcbiAgICBpZiAodGhpcy5pc1Jvd0Rpc2FibGVkKGRhdGEpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDnm7TmjqXorr7nva7mlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKdcclxuICAgIGRhdGEuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcblxyXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd0lkc++8iOeUqOS6jui3qOmhtemAieS4re+8iVxyXG4gICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKGRhdGEpO1xyXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5hZGQoaWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmRlbGV0ZShpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93c++8iOeUqOS6juWFvOWuueaAp++8iVxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9zZWxlY3RlZFJvd3MuZmluZEluZGV4KChyb3cpID0+XHJcbiAgICAgIHRoaXMuaXNTYW1lUm93KHJvdywgZGF0YSlcclxuICAgICk7XHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnB1c2goZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g5Yu+6YCJ5aSN6YCJ5qGG5pe25ZCM5q2l6K6+572u6auY5Lqu6YCJ5Lit6KGMXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBkYXRhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDoi6XlvZPliY3pq5jkuq7ooYzkuLror6XooYzvvIzliJnlj5bmtojpq5jkuq5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgJiZcclxuICAgICAgICB0aGlzLmlzU2FtZVJvdyh0aGlzLl9zZWxlY3RlZFRhYmxlUm93LCBkYXRhKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOabtOaWsOWFqOmAieeKtuaAge+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIHVwZGF0ZUNoZWNrQWxsU3RhdHVzKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3dDaGVja2JveCB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpKSB7XHJcbiAgICAgIHRoaXMuX2NoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy5faW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyDlj6rorqHnrpflj6/nlKjnmoTooYzvvIjmnKrnpoHnlKjnmoTooYzvvIlcclxuICAgIGNvbnN0IGF2YWlsYWJsZVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKFxyXG4gICAgICAocm93KSA9PiAhdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdylcclxuICAgICk7XHJcbiAgICAvLyDln7rkuo7mlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKforqHnrpdcclxuICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IGF2YWlsYWJsZVJvd3MuZmlsdGVyKFxyXG4gICAgICAocm93KSA9PiByb3cuY2hlY2tlZCA9PT0gdHJ1ZVxyXG4gICAgKS5sZW5ndGg7XHJcbiAgICBjb25zdCB0b3RhbENvdW50ID0gYXZhaWxhYmxlUm93cy5sZW5ndGg7XHJcbiAgICB0aGlzLl9jaGVja2VkQWxsID1cclxuICAgICAgdG90YWxDb3VudCA+IDAgJiYgY2hlY2tlZENvdW50ID4gMCAmJiBjaGVja2VkQ291bnQgPT09IHRvdGFsQ291bnQ7XHJcbiAgICB0aGlzLl9pbmRldGVybWluYXRlID0gY2hlY2tlZENvdW50ID4gMCAmJiBjaGVja2VkQ291bnQgPCB0b3RhbENvdW50O1xyXG4gIH1cclxuXHJcbiAgLy8g5YWo6YCJL+WPlua2iOWFqOmAie+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIHRvZ2dsZUNoZWNrQWxsKGNoZWNrZWQ6IGJvb2xlYW4sIGV2ZW50PzogRXZlbnQpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlj6rlpITnkIblj6/nlKjnmoTooYzvvIjmnKrnpoHnlKjnmoTooYzvvIlcclxuICAgIGNvbnN0IGF2YWlsYWJsZVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKFxyXG4gICAgICAocm93KSA9PiAhdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdylcclxuICAgICk7XHJcblxyXG4gICAgLy8g5om56YeP6K6+572uIGNoZWNrZWQg5bGe5oCnXHJcbiAgICBhdmFpbGFibGVSb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICByb3cuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcblxyXG4gICAgICAvLyDlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93SWRz77yI55So5LqO6Leo6aG16YCJ5Lit77yJXHJcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChyb3cpO1xyXG4gICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5hZGQoaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5kZWxldGUoaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3PvvIjnlKjkuo7lhbzlrrnmgKfvvIlcclxuICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cyA9IFsuLi5hdmFpbGFibGVSb3dzXTtcclxuICAgICAgLy8g5ZCM5q2l6K6+572u6auY5Lqu6YCJ5Lit6KGM5Li656ys5LiA5p2h5Y+v6YCJ5pWw5o2uXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPVxyXG4gICAgICAgIGF2YWlsYWJsZVJvd3MubGVuZ3RoID4gMCA/IGF2YWlsYWJsZVJvd3NbMF0gOiBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIC8vIOWPlua2iOmrmOS6rlxyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZUNoZWNrQWxsU3RhdHVzKCk7XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5bpgInkuK3nmoTooYzmlbDmja7vvIjkv53nlZnnlKjkuo7lhbzlrrnmgKfvvIlcclxuICBnZXRTZWxlY3RlZFJvd3MoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hlY2tlZFJvd3MoKTtcclxuICB9XHJcblxyXG4gIC8vIOWkhOeQhuihjCBjaGVja2JveCDlj5jljJbkuovku7bvvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcclxuICBoYW5kbGVSb3dDaGVja2VkQ2hhbmdlKGRhdGE6IGFueSwgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNSb3dEaXNhYmxlZChkYXRhKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pWw5o2u5a+56LGh55qEIGNoZWNrZWQg5bGe5oCn5bey57uP6YCa6L+H5Y+M5ZCR57uR5a6a6Ieq5Yqo5pu05pawXHJcbiAgICAvLyDov5nph4zlj6rpnIDopoHlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93SWRzIOWSjCBfc2VsZWN0ZWRSb3dzXHJcblxyXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd0lkc++8iOeUqOS6jui3qOmhtemAieS4re+8iVxyXG4gICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKGRhdGEpO1xyXG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5hZGQoaWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmRlbGV0ZShpZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93c++8iOeUqOS6juWFvOWuueaAp++8iVxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9zZWxlY3RlZFJvd3MuZmluZEluZGV4KChyb3cpID0+XHJcbiAgICAgIHRoaXMuaXNTYW1lUm93KHJvdywgZGF0YSlcclxuICAgICk7XHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnB1c2goZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g5Yu+6YCJ5aSN6YCJ5qGG5pe25ZCM5q2l6K6+572u6auY5Lqu6YCJ5Lit6KGMXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBkYXRhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDoi6XlvZPliY3pq5jkuq7ooYzkuLror6XooYzvvIzliJnlj5bmtojpq5jkuq5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgJiZcclxuICAgICAgICB0aGlzLmlzU2FtZVJvdyh0aGlzLl9zZWxlY3RlZFRhYmxlUm93LCBkYXRhKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOabtOaWsOWFqOmAieeKtuaAgVxyXG4gICAgdGhpcy51cGRhdGVDaGVja0FsbFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLy8g5Yi35paw5YWo6YCJ54q25oCB77yI55So5LqO5YW25LuW5Zy65pmv77yJXHJcbiAgcmVmcmVzaENoZWNrQWxsU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVDaGVja0FsbFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W6KGM55qE5ZSv5LiA5qCH6K+G77yI55So5LqO6Leo6aG16YCJ5Lit77yJXHJcbiAgcHJpdmF0ZSBnZXRSb3dJZChkYXRhOiBhbnkpOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGRhdGEuaWQgPz8gZGF0YS5rZXkgPz8gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy8g5Yik5pat5Lik6KGM5piv5ZCm5Li65ZCM5LiA6KGMXHJcbiAgcHJpdmF0ZSBpc1NhbWVSb3cocm93MTogYW55LCByb3cyOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlkMSA9IHRoaXMuZ2V0Um93SWQocm93MSk7XHJcbiAgICBjb25zdCBpZDIgPSB0aGlzLmdldFJvd0lkKHJvdzIpO1xyXG5cclxuICAgIGlmIChpZDEgIT09IHVuZGVmaW5lZCAmJiBpZDIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gaWQxID09PSBpZDI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmFsbGJhY2sg5YiwIEpTT04g5q+U6L6DXHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocm93MSkgPT09IEpTT04uc3RyaW5naWZ5KHJvdzIpO1xyXG4gIH1cclxuXHJcbiAgLy8g5riF56m66YCJ5Lit55qE6KGM77yI5pWw5o2u6amx5Yqo5qih5byP77yJXHJcbiAgY2xlYXJTZWxlY3RlZFJvd3MoKSB7XHJcbiAgICAvLyDmuIXnqbrlvZPliY3mlbDmja7mupDkuK3miYDmnInpobnnmoQgY2hlY2tlZCDnirbmgIFcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgIHJvdy5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOa4heepuumAieS4rembhuWQiFxyXG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuY2xlYXIoKTtcclxuICAgIHRoaXMuX3NlbGVjdGVkUm93cyA9IFtdO1xyXG4gICAgdGhpcy5fY2hlY2tlZEFsbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5faW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGaWVsZENoZWNrQm94Q2hhbmdlKGNoZWNrQm94T3B0aW9uczogT3B0aW9uc1R5cGVbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2V0RmllbGRzVmFsdWUoe1xyXG4gICAgICBba2V5XTogY2hlY2tCb3hPcHRpb25zXHJcbiAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jaGVja2VkKVxyXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTZWFyY2goKSB7XHJcbiAgICB0aGlzLl9zYXZlZFNlYXJjaFBhcmFtcyA9IHRoaXMuY2xlYXJFbXB0eVNlYXJjaFBhcmFtcygpO1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gMTtcclxuICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVJlc2V0Rm9ybSgpIHtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuX3NlYXJjaFBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhcmdldENvbHVtbiA9IHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChpdGVtLmZpZWxkUHJvcHM/Lm5hbWUgfHwgaXRlbS5wcm9wKSA9PT0ga2V5O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIOWvueS6jmNoZWNrYm9457G75Z6L77yM6ZyA6KaB54m55q6K5aSE55CG6buY6K6k5YC8XHJcbiAgICAgIGlmICh0YXJnZXRDb2x1bW4/LnZhbHVlVHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XHJcbiAgICAgICAgLy8g5LuO5Y6f5aeLY29sdW1uc+mFjee9ruS4reiOt+WPluWIneWni+mFjee9ru+8jOS7peehruS/neS9v+eUqOato+ehrueahOm7mOiupOWAvFxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHJldHVybiAoaXRlbS5maWVsZFByb3BzPy5uYW1lIHx8IGl0ZW0ucHJvcCkgPT09IGtleTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g5LuO5Y6f5aeLb3B0aW9uc+S4reaJvuWHumNoZWNrZWTkuLp0cnVl55qE6aG55L2c5Li66buY6K6k5YC8XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGaWVsZFByb3BzID0gb3JpZ2luYWxDb2x1bW4/LmZpZWxkUHJvcHMgYXNcclxuICAgICAgICAgIHwgQ2hlY2tib3hGaWVsZFByb3BzXHJcbiAgICAgICAgICB8IHVuZGVmaW5lZDtcclxuICAgICAgICBjb25zdCBjaGVja2VkVmFsdWVzID0gKG9yaWdpbmFsRmllbGRQcm9wcz8ub3B0aW9ucyB8fCBbXSlcclxuICAgICAgICAgIC5maWx0ZXIoKG9wdDogT3B0aW9uc1R5cGUpID0+IG9wdC5jaGVja2VkKVxyXG4gICAgICAgICAgLm1hcCgob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LnZhbHVlKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPVxyXG4gICAgICAgICAgY2hlY2tlZFZhbHVlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgID8gY2hlY2tlZFZhbHVlc1xyXG4gICAgICAgICAgICA6IFBST19UQUJMRV9ERUZBVUxUX1BST1BTW3RhcmdldENvbHVtbi52YWx1ZVR5cGVdLnZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9IGRlZmF1bHRWYWx1ZTtcclxuXHJcbiAgICAgICAgLy8g5qC55o2u6buY6K6k5YC85oGi5aSNb3B0aW9uc+eahGNoZWNrZWTnirbmgIHvvIzkvb/nlKjljp/lp4tvcHRpb25z55qE57uT5p6EXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IFtdO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsT3B0aW9ucyA9IG9yaWdpbmFsRmllbGRQcm9wcz8ub3B0aW9ucyB8fCBbXTtcclxuICAgICAgICBjb25zdCB0YXJnZXRGaWVsZFByb3BzID0gdGFyZ2V0Q29sdW1uLmZpZWxkUHJvcHMgYXMgQ2hlY2tib3hGaWVsZFByb3BzO1xyXG4gICAgICAgIHRhcmdldEZpZWxkUHJvcHMub3B0aW9ucyA9IG9yaWdpbmFsT3B0aW9ucy5tYXAoKGl0ZW06IE9wdGlvbnNUeXBlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICBjaGVja2VkOiBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKGl0ZW0udmFsdWUpLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9IHRhcmdldENvbHVtbj8uZmllbGRQcm9wc1xyXG4gICAgICAgICAgPyB0YXJnZXRDb2x1bW4/LmZpZWxkUHJvcHMudmFsdWUgfHxcclxuICAgICAgICAgICAgUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbdGFyZ2V0Q29sdW1uLnZhbHVlVHlwZV0udmFsdWVcclxuICAgICAgICAgIDogUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbdGFyZ2V0Q29sdW1uLnZhbHVlVHlwZV0udmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NhdmVkU2VhcmNoUGFyYW1zID0ge307XHJcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSAxO1xyXG4gICAgdGhpcy5vblJlc2V0Rm9ybUJlZm9yZVJlbG9hZC5lbWl0KCk7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYWdlSW5kZXhDaGFuZ2UocGFnZUluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcclxuICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBhbnkpIHtcclxuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSAxO1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlUXVlcnkoYWZ0ZXJEZWxldGU/OiBib29sZWFuKSB7XHJcbiAgICAvLyDliKDpmaTlkI7liLfmlrDkuJTlvZPliY3pobXku4XliankuIDmnaHorrDlvZXml7bvvIzoi6XkuI3lnKjnrKzkuIDpobXliJnlhYjlm57pgIDkuIDpobVcclxuICAgIGlmIChcclxuICAgICAgYWZ0ZXJEZWxldGUgJiZcclxuICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpICYmXHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPT09IDEgJiZcclxuICAgICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID4gMVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5L+d5a2Y5Yig6Zmk5YmN55qE5pWw5o2u5rqQ77yI55So5LqO5Yig6Zmk5ZCO5p+l6K+i5pe256e76Zmk6KKr5Yig6Zmk6aG555qE6YCJ5Lit54q25oCB77yJXHJcbiAgICBjb25zdCBwcmV2aW91c0RhdGFTb3VyY2UgPVxyXG4gICAgICBhZnRlckRlbGV0ZSAmJiB0aGlzLnNob3dDaGVja2JveCA/IFsuLi50aGlzLmRhdGFTb3VyY2VdIDogW107XHJcblxyXG4gICAgdGhpcy5fbG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5yZXF1ZXN0KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHtcclxuICAgICAgICAgIHBhcmFtczogdGhpcy5jbGVhckVtcHR5U2VhcmNoUGFyYW1zKCksXHJcbiAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCxcclxuICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMuX3BhZ2VJbmZvLnBhZ2VTaXplLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC8vIOWcqOe6v+aOkuW6j+aooeW8j++8muaKiuaOkuW6j+WvueixoeaPkOS6pOe7meaOpeWPo1xyXG4gICAgICAgICAgLi4uKHRoaXMuc29ydE1vZGUgPT09IFwic2VydmVyXCJcclxuICAgICAgICAgICAgPyB7IHNvcnQ6IHRoaXMuYnVpbGRTZXJ2ZXJTb3J0UGF5bG9hZCgpIH1cclxuICAgICAgICAgICAgOiB7fSksXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIOiHquWKqOazqOWFpSBjaGVja2VkIOWtl+aute+8jOaUr+aMgei3qOmhtemAieS4rVxyXG4gICAgICAgIGlmICh0aGlzLnNob3dDaGVja2JveCkge1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gKHJlc3VsdC5kYXRhIHx8IFtdKS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKGl0ZW0pO1xyXG4gICAgICAgICAgICAvLyDlpoLmnpzmlbDmja7lt7LmnIkgY2hlY2tlZCDlsZ7mgKfvvIzkv53nlZnvvJvlkKbliJnmoLnmja4gX3NlbGVjdGVkUm93SWRzIOWIpOaWrVxyXG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID1cclxuICAgICAgICAgICAgICBpdGVtLmNoZWNrZWQgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgPyBpdGVtLmNoZWNrZWRcclxuICAgICAgICAgICAgICAgIDogaWQgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9zZWxlY3RlZFJvd0lkcy5oYXMoaWQpXHJcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgICAgY2hlY2tlZDogY2hlY2tlZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIOWIoOmZpOWQjuafpeivou+8muenu+mZpOiiq+WIoOmZpOmhueeahOmAieS4reeKtuaAgVxyXG4gICAgICAgICAgaWYgKGFmdGVyRGVsZXRlICYmIHByZXZpb3VzRGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSBuZXcgU2V0KFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5tYXAoKGl0ZW0pID0+IHRoaXMuZ2V0Um93SWQoaXRlbSkpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyDpgY3ljobkuYvliY3nmoTmlbDmja7mupDvvIzlpoLmnpzkuI3lnKjmlrDmlbDmja7mupDkuK3vvIzor7TmmI7ooqvliKDpmaTkuobvvIzpnIDopoHmuIXpmaTlhbbpgInkuK3nirbmgIFcclxuICAgICAgICAgICAgcHJldmlvdXNEYXRhU291cmNlLmZvckVhY2goKG9sZEl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBvbGRJZCA9IHRoaXMuZ2V0Um93SWQob2xkSXRlbSk7XHJcbiAgICAgICAgICAgICAgaWYgKG9sZElkICE9PSB1bmRlZmluZWQgJiYgIW5ld0RhdGFJZHMuaGFzKG9sZElkKSkge1xyXG4gICAgICAgICAgICAgICAgLy8g6KKr5Yig6Zmk55qE6aG577yM5LuO6YCJ5Lit6ZuG5ZCI5Lit56e76ZmkXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5kZWxldGUob2xkSWQpO1xyXG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5pWw5o2u5a+56LGh6L+Y5Zyo5YW25LuW5Zyw5pa55byV55So77yM5riF6Zmk5YW26YCJ5Lit54q25oCBXHJcbiAgICAgICAgICAgICAgICBpZiAob2xkSXRlbS5jaGVja2VkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgb2xkSXRlbS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gcmVzdWx0LmRhdGEgfHwgW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN1bW1hcnlEYXRhID0gcmVzdWx0LnN1bW1hcnlEYXRhIHx8IG51bGw7XHJcbiAgICAgICAgLy8g5pys5Zyw5o6S5bqP5qih5byP77ya5ou/5Yiw5pWw5o2u5ZCO5Zyo5YmN56uv5o6S5bqPXHJcbiAgICAgICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IFwibG9jYWxcIikge1xyXG4gICAgICAgICAgdGhpcy5zb3J0RGF0YVNvdXJjZUluUGxhY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcGFnZUluZm8udG90YWwgPSByZXN1bHQudG90YWwgfHwgMDtcclxuICAgICAgICAvLyDmm7TmlrDlhajpgInnirbmgIFcclxuICAgICAgICBpZiAodGhpcy5zaG93Q2hlY2tib3gpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIuafpeivouWksei0pTpcIiwgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3BhZ2VJbmZvLnRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLnN1bW1hcnlEYXRhID0gbnVsbDtcclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIuacquaPkOS+myBfcmVxdWVzdCDlm57osIPlh73mlbBcIik7XHJcbiAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIOS4jeWGjeiwg+eUqCBjbGVhclNlbGVjdGVkUm93cygp77yM5L+d55WZ6Leo6aG16YCJ5Lit54q25oCBXHJcbiAgfVxyXG5cclxuICAvLyDop6blj5HliJfmjpLluo/lj5jmm7RcclxuICBvblNvcnRDaGFuZ2Uoc29ydEtleTogc3RyaW5nLCBzb3J0T3JkZXI6IFwiYXNjZW5kXCIgfCBcImRlc2NlbmRcIiB8IG51bGwpIHtcclxuICAgIC8vIOWNleWIl+aOkuW6j++8mumHjee9ruWFtuWug+WIl++8m+WkmuWIl+aOkuW6j++8muS/neeVmeWFtuWug+WIl1xyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlU29ydCkge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLl9zb3J0TWFwKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICBpZiAoa2V5ICE9PSBzb3J0S2V5KSB0aGlzLl9zb3J0TWFwW2tleV0gPSBudWxsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NvcnRNYXBbc29ydEtleV0gPSBzb3J0T3JkZXI7XHJcblxyXG4gICAgLy8g57u05oqk5LyY5YWI57qn6Zif5YiX77ya5pyJ5bqP5YiX5LiU6Z2e56m6IC0+IOe9ruS6juacq+Wwvu+8m+S4uuepuiAtPiDnp7vpmaRcclxuICAgIHRoaXMuX3NvcnRQcmlvcml0eSA9IHRoaXMuX3NvcnRQcmlvcml0eS5maWx0ZXIoKGspID0+IGsgIT09IHNvcnRLZXkpO1xyXG4gICAgaWYgKHNvcnRPcmRlcikge1xyXG4gICAgICB0aGlzLl9zb3J0UHJpb3JpdHkucHVzaChzb3J0S2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gXCJsb2NhbFwiKSB7XHJcbiAgICAgIHRoaXMuc29ydERhdGFTb3VyY2VJblBsYWNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDlnKjnur/mjpLluo/vvJrph43mlrDor7fmsYJcclxuICAgICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U29ydE9yZGVyKHNvcnRLZXk6IHN0cmluZyk6IFwiYXNjZW5kXCIgfCBcImRlc2NlbmRcIiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRNYXBbc29ydEtleV0gfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIGhhbmRsZVRhYmxlUm93Q2xpY2soZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcclxuICAgIC8vIOWmguaenOW8gOWQr+S6huWkjemAieahhu+8jOeCueWHu+ihjOaXtuWPqumAieS4reeCueWHu+ihjO+8iOWmguaenOihjOacquiiq+emgeeUqO+8iVxyXG4gICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94ICYmICF0aGlzLmlzUm93RGlzYWJsZWQoZGF0YSkpIHtcclxuICAgICAgLy8g5YWI5riF56m65omA5pyJ6YCJ5Lit6KGMXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cyA9IFtdO1xyXG4gICAgICAvLyDlj6rpgInkuK3lvZPliY3ngrnlh7vnmoTooYxcclxuICAgICAgdGhpcy50b2dnbGVSb3dDaGVja2VkKGRhdGEsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblJvd0NsaWNrLmVtaXQodGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUYWJsZVJvd0RiQ2xpY2soZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcclxuICAgIHRoaXMub25Sb3dEYkNsaWNrLmVtaXQodGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDb2x1bW5zU2V0dGluZ0NvbmZpcm0oKSB7XHJcbiAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIC8vIOWkhOeQhiBhdXRvQ29tcGxldGUg6L6T5YWl5LqL5Lu277yI5bim6Ziy5oqW77yJXHJcbiAgaGFuZGxlQXV0b0NvbXBsZXRlSW5wdXQoZXZlbnQ6IEV2ZW50LCBjb2x1bW46IFByb1RhYmxlQ29sdW1uKSB7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IGNvbHVtbi5maWVsZFByb3BzPy5uYW1lIHx8IGNvbHVtbi5wcm9wO1xyXG5cclxuICAgIC8vIOWmguaenOivpeWtl+autei/mOayoeaciemYsuaKluWHveaVsO+8jOWIm+W7uuS4gOS4qlxyXG4gICAgaWYgKCF0aGlzLl9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcC5oYXMoZmllbGRLZXkpKSB7XHJcbiAgICAgIGNvbnN0IGRlYm91bmNlZEZuID0gZGVib3VuY2UoKGV2dDogRXZlbnQpID0+IHtcclxuICAgICAgICAvLyDph43mlrDmn6Xmib7lr7nlupTnmoQgY29sdW1u77yM56Gu5L+d5L2/55So5pyA5paw55qE6YWN572uXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucy5maW5kKFxyXG4gICAgICAgICAgKGNvbCkgPT4gKGNvbC5maWVsZFByb3BzPy5uYW1lIHx8IGNvbC5wcm9wKSA9PT0gZmllbGRLZXlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjdXJyZW50Q29sdW1uKSB7XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVBdXRvQ29tcGxldGVEYXRhU291cmNlKGV2dCwgY3VycmVudENvbHVtbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAzMDApOyAvLyAzMDBtcyDpmLLmipblu7bov59cclxuICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGVib3VuY2VNYXAuc2V0KGZpZWxkS2V5LCBkZWJvdW5jZWRGbik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6LCD55So6Ziy5oqW5Ye95pWwXHJcbiAgICBjb25zdCBkZWJvdW5jZWRGbiA9IHRoaXMuX2F1dG9Db21wbGV0ZURlYm91bmNlTWFwLmdldChmaWVsZEtleSk7XHJcbiAgICBpZiAoZGVib3VuY2VkRm4pIHtcclxuICAgICAgZGVib3VuY2VkRm4oZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+WIGF1dG9Db21wbGV0ZSDnmoTmlbDmja7mupBcclxuICBnZXRBdXRvQ29tcGxldGVEYXRhU291cmNlKGNvbHVtbjogUHJvVGFibGVDb2x1bW4pOiBhbnlbXSB7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IGNvbHVtbi5maWVsZFByb3BzPy5uYW1lIHx8IGNvbHVtbi5wcm9wO1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2ZpZWxkS2V5XSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkUHJvcHMoY29sdW1uOiBQcm9UYWJsZUNvbHVtbik6IGFueSB7XHJcbiAgICByZXR1cm4gY29sdW1uLmZpZWxkUHJvcHM7XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5bmjIflrprlkI3np7DnmoRsYWJlbOaooeadv1xyXG4gIGdldExhYmVsVGVtcGxhdGUobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xyXG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIOmmluWFiOS7juiHquWumuS5ieaooeadv+S4reafpeaJvlxyXG4gICAgICBjb25zdCBjdXN0b21UZW1wbGF0ZSA9IHRoaXMuY3VzdG9tVGVtcGxhdGVzLmdldChuYW1lKTtcclxuICAgICAgaWYgKGN1c3RvbVRlbXBsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1c3RvbVRlbXBsYXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDnhLblkI7ku47pgJrnlKjmqKHmnb/mmKDlsITkuK3mn6Xmib5cclxuICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlTWFwLmdldChuYW1lKTtcclxuICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5YgZm9ybS1pdGVtIOeahOWKqOaAgeexu+WQjVxyXG4gIGdldEZvcm1JdGVtQ2xhc3NOYW1lKGNvbHVtbjogUHJvVGFibGVDb2x1bW4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5nZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuICAgIHJldHVybiBgcHJvLXRhYmxlLSR7ZmllbGROYW1lfS1mb3JtLWl0ZW1gO1xyXG4gIH1cclxufVxyXG4iXX0=
|