@skyux/text-editor 8.0.0-alpha.20 → 8.0.0-alpha.21

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.
@@ -418,4 +418,4 @@ SkyTextEditorAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "1
418
418
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: SkyTextEditorAdapterService, decorators: [{
419
419
  type: Injectable
420
420
  }], ctorParameters: function () { return [{ type: i1.SkyTextEditorSelectionService }, { type: i2.SkyTextEditorService }, { type: i3.SkyAppWindowRef }]; } });
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztBQUtoRTs7R0FFRztBQUVILE1BQU0sT0FBTywyQkFBMkI7SUFLdEMsWUFDRSxnQkFBK0MsRUFDL0MsaUJBQXVDLEVBQ3ZDLGFBQThCOztRQVBoQyxnRUFBaUQ7UUFDakQsaUVBQXlDO1FBQ3pDLHlEQUE0QjtRQU8xQix1QkFBQSxJQUFJLGlEQUFxQixnQkFBZ0IsTUFBQSxDQUFDO1FBQzFDLHVCQUFBLElBQUksa0RBQXNCLGlCQUFpQixNQUFBLENBQUM7UUFDNUMsdUJBQUEsSUFBSSwwQ0FBYyxhQUFhLE1BQUEsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQ2YsRUFBVSxFQUNWLGFBQWdDLEVBQ2hDLFVBQW1DLEVBQ25DLFdBQW9CO1FBRXBCLHVCQUFBLElBQUksc0RBQW1CLENBQUMsTUFBTSxHQUFHLHVCQUFBLElBQUksNEZBQWlCLE1BQXJCLElBQUksRUFBa0IsYUFBYSxDQUFDLENBQUM7UUFFdEUsTUFBTSxVQUFVLEdBQUcsdUJBQUEsSUFBSSxnR0FBcUIsTUFBekIsSUFBSSxDQUF1QixDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxh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dGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lBcHBXaW5kb3dSZWYgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU1RZTEVfU1RBVEVfREVGQVVMVFMgfSBmcm9tICcuLi9kZWZhdWx0cy9zdHlsZS1zdGF0ZS1kZWZhdWx0cyc7XG5pbXBvcnQgeyBFZGl0b3JDb21tYW5kIH0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLWNvbW1hbmQnO1xuaW1wb3J0IHsgRWRpdG9yU2V0dGluZyB9IGZyb20gJy4uL3R5cGVzL2VkaXRvci1zZXR0aW5nJztcbmltcG9ydCB7IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlIH0gZnJvbSAnLi4vdHlwZXMvc3R5bGUtc3RhdGUnO1xuaW1wb3J0IHsgVXJsTW9kYWxSZXN1bHQgfSBmcm9tICcuLi91cmwtbW9kYWwvdGV4dC1lZGl0b3ItdXJsLW1vZGFsLXJlc3VsdCc7XG5pbXBvcnQgeyBVcmxUYXJnZXQgfSBmcm9tICcuLi91cmwtbW9kYWwvdGV4dC1lZGl0b3ItdXJsLXRhcmdldCc7XG5cbmltcG9ydCB7IFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi90ZXh0LWVkaXRvci1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU2VydmljZSB9IGZyb20gJy4vdGV4dC1lZGl0b3Iuc2VydmljZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yQWRhcHRlclNlcnZpY2Uge1xuICAjc2VsZWN0aW9uU2VydmljZTogU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2U7XG4gICN0ZXh0RWRpdG9yU2VydmljZTogU2t5VGV4dEVkaXRvclNlcnZpY2U7XG4gICN3aW5kb3dSZWY6IFNreUFwcFdpbmRvd1JlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzZWxlY3Rpb25TZXJ2aWNlOiBTa3lUZXh0RWRpdG9yU2VsZWN0aW9uU2VydmljZSxcbiAgICB0ZXh0RWRpdG9yU2VydmljZTogU2t5VGV4dEVkaXRvclNlcnZpY2UsXG4gICAgd2luZG93U2VydmljZTogU2t5QXBwV2luZG93UmVmXG4gICkge1xuICAgIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UgPSBzZWxlY3Rpb25TZXJ2aWNlO1xuICAgIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlID0gdGV4dEVkaXRvclNlcnZpY2U7XG4gICAgdGhpcy4jd2luZG93UmVmID0gd2luZG93U2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGV4dCBlZGl0b3IgaW5zaWRlIHRoZSBzdXBwbGllZCBpZnJhbWUgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBpbml0RWRpdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaWZyYW1lRWxlbWVudDogSFRNTElGcmFtZUVsZW1lbnQsXG4gICAgc3R5bGVTdGF0ZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUsXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yID0gdGhpcy4jY3JlYXRlT2JzZXJ2ZXJzKGlmcmFtZUVsZW1lbnQpO1xuXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVFbC5pbm5lckhUTUwgPSBgLmVkaXRvcjplbXB0eTpiZWZvcmUge1xuICAgICAgY29udGVudDogYXR0cihkYXRhLXBsYWNlaG9sZGVyKTtcbiAgICAgIGZvbnQtZmFtaWx5OiBcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgY29sb3I6ICM2ODZjNzM7XG4gICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1gO1xuICAgIGRvY3VtZW50RWwuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsKTtcblxuICAgIGNvbnN0IHN0eWxlOiBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSA9IHtcbiAgICAgIC4uLlNUWUxFX1NUQVRFX0RFRkFVTFRTLFxuICAgICAgLi4uc3R5bGVTdGF0ZSxcbiAgICB9O1xuICAgIGNvbnN0IGJvZHlTdHlsZSA9IGBiYWNrZ3JvdW5kLWNvbG9yOiAke3N0eWxlLmJhY2tDb2xvcn07XG4gICAgICBjb2xvcjogJHtzdHlsZS5mb250Q29sb3J9O1xuICAgICAgZm9udC1mYW1pbHk6ICR7c3R5bGUuZm9udH07XG4gICAgICBmb250LXNpemU6ICR7c3R5bGUuZm9udFNpemV9cHhgO1xuICAgIGRvY3VtZW50RWwucXVlcnlTZWxlY3RvcignaHRtbCcpPy5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCAnZW4nKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAndHJ1ZScpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbWFpbicpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2VkaXRvcicpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYm9keVN0eWxlKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIgfHwgJycpO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGVFZGl0b3IoXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sXG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICk6IHZvaWQge1xuICAgIHRoaXMuI3NldEVkaXRvckRpc2FibGVkKGZvY3VzYWJsZUNoaWxkcmVuLCB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlRWRpdG9yKFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLFxuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiB2b2lkIHtcbiAgICB0aGlzLiNzZXRFZGl0b3JEaXNhYmxlZChmb2N1c2FibGVDaGlsZHJlbiwgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGNvbW1hbmQgb24gdGhlIHRleHQgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgZXhlY0NvbW1hbmQoZWRpdG9yQ29tbWFuZDogRWRpdG9yQ29tbWFuZCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvcikge1xuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmVkaXRvclNlbGVjdGVkKCkpIHtcbiAgICAgICAgZG9jdW1lbnRFbC5leGVjQ29tbWFuZChcbiAgICAgICAgICBlZGl0b3JDb21tYW5kLmNvbW1hbmQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgZWRpdG9yQ29tbWFuZC52YWx1ZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICAgICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudFNlbGVjdGlvbigpOiBTZWxlY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uKFxuICAgICAgdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZGF0YSBVUkkgdXNpbmcgdGhlIHByb3ZpZGVkIHRleHQgc3RyaW5nLlxuICAgKiBVc2VkIHRvIGRpc3BsYXkgYSBtZXJnZSBmaWVsZCBpbnNpZGUgYSBzdHJpbmcgb2YgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXRNZXJnZUZpZWxkRGF0YVVSSSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiN3aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50O1xuICAgIGxldCB0ZXh0VG9Vc2UgPSB0ZXh0O1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDE4KSB7XG4gICAgICB0ZXh0VG9Vc2UgPSB0ZXh0LnN1YnN0cigwLCAxNSkgKyAnLi4uJztcbiAgICB9XG5cbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gZG9jdW1lbnRFbC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXNFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzIwJyk7XG4gICAgY2FudmFzRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCcpO1xuICAgIGNhbnZhc0VsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3Rhbic7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICMwMDAwMDAnO1xuICAgIGNhbnZhc0VsZW1lbnQuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzVweCc7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnRleHQuZm9udCA9ICcxMnB4IEFyaWFsJztcbiAgICBjb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgIGNvbnRleHQuZmlsbFRleHQodGV4dFRvVXNlLCA1MCwgMTUpO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3Zlcic7XG4gICAgY29udGV4dC5maWxsU3R5bGUgPSAnIzAwRkZGRic7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCAxMDAsIDIwKTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcbiAgICBjb250ZXh0LmxpbmVXaWR0aCA9IDI7XG4gICAgY29udGV4dC5zdHJva2VTdHlsZSA9ICcjRkYwMDAwJztcbiAgICBjb250ZXh0LnN0cm9rZVJlY3QoMCwgMCwgMTAwLCAyMCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYW52YXNFbGVtZW50LnRvRGF0YVVSTCgnaW1hZ2UvcG5nJywgMS4wKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFN0eWxlU3RhdGUoKTogUGFydGlhbDxTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZT4ge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmVkaXRvclNlbGVjdGVkKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhY2tDb2xvcjogdGhpcy4jZ2V0Q29sb3IoZG9jdW1lbnRFbCwgJ0JhY2tDb2xvcicpLFxuICAgICAgICBmb250Q29sb3I6IHRoaXMuI2dldENvbG9yKGRvY3VtZW50RWwsICdGb3JlQ29sb3InKSxcbiAgICAgICAgZm9udFNpemU6IHBhcnNlSW50KHRoaXMuI2dldEZvbnRTaXplKCksIHVuZGVmaW5lZCksXG4gICAgICAgIGZvbnQ6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kVmFsdWUoJ2ZvbnRuYW1lJyksXG4gICAgICAgIGJvbGRTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnQm9sZCcpLFxuICAgICAgICBpdGFsaWNTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnSXRhbGljJyksXG4gICAgICAgIHVuZGVybGluZVN0YXRlOiBkb2N1bWVudEVsLnF1ZXJ5Q29tbWFuZFN0YXRlKCdVbmRlcmxpbmUnKSxcbiAgICAgICAgbGlua1N0YXRlOiB0aGlzLiNoYXNMaW5rKCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldEVkaXRvcklubmVySHRtbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG4gICAgaWYgKGRvY3VtZW50RWwpIHtcbiAgICAgIHJldHVybiB0aGlzLiNyZXBsYWNlSHRtbENvZGVzKGRvY3VtZW50RWwuYm9keS5pbm5lckhUTUwpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdG9ySW5uZXJIdG1sKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGNvbnN0IGVkaXRvckNvbnRlbnQgPSBkb2N1bWVudEVsLmJvZHk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZWRpdG9yQ29udGVudC5pbm5lckhUTUwgIT09IHZhbHVlKSB7XG4gICAgICBlZGl0b3JDb250ZW50LmlubmVySFRNTCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0VkaXRvcigpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IpIHtcbiAgICAgIGNvbnN0IHdpbmRvd0VsID0gdGhpcy4jZ2V0Q29udGVudFdpbmRvd0VsKCk7XG4gICAgICBjb25zdCBpZnJhbWVEb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKFxuICAgICAgICBpZnJhbWVEb2N1bWVudEVsLFxuICAgICAgICB3aW5kb3dFbFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGN1cnNvcklzTm90QWN0aXZlQW5kSGFzUmVzZXQgPVxuICAgICAgICBjdXJyZW50U2VsZWN0aW9uICYmXG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uc3RhcnRPZmZzZXQgPT09IDAgJiZcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbi5lbmRPZmZzZXQgPT09IDA7XG5cbiAgICAgIGlmICghdGhpcy5lZGl0b3JTZWxlY3RlZCgpIHx8IGN1cnNvcklzTm90QWN0aXZlQW5kSGFzUmVzZXQpIHtcbiAgICAgICAgLy8gZm9jdXMgdGhlIGVuZCBvZiB0aGUgZWRpdG9yXG4gICAgICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiN3aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50O1xuICAgICAgICBjb25zdCBlZGl0b3IgPSBpZnJhbWVEb2N1bWVudEVsLmJvZHkgYXMgSFRNTEJvZHlFbGVtZW50O1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50RWwuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcblxuICAgICAgICBpZiAod2luZG93RWwuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50RWwuY3JlYXRlUmFuZ2UpIHtcbiAgICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcbiAgICAgICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgICAgICAgY29uc3Qgc2VsID0gd2luZG93RWwuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICBzZWw/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ3Vyc29yIG1heSBub3QgYmUgYWN0aXZlLCByZXN0b3JlIGl0XG4gICAgICAgIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvci5pZnJhbWVFbGVtZW50UmVmLmZvY3VzKCk7XG4gICAgICAgIGlmcmFtZURvY3VtZW50RWwuYm9keS5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRMaW5rKCk6IFVybE1vZGFsUmVzdWx0IHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgbGluazogVXJsTW9kYWxSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYW5jaG9yRWwgPSB0aGlzLmdldFNlbGVjdGVkQW5jaG9yVGFnKCk7XG4gICAgaWYgKGFuY2hvckVsICYmIGFuY2hvckVsLmhyZWYpIHtcbiAgICAgIGxpbmsgPSB7XG4gICAgICAgIHRhcmdldDpcbiAgICAgICAgICBhbmNob3JFbC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSAnX2JsYW5rJ1xuICAgICAgICAgICAgPyBVcmxUYXJnZXQuTmV3V2luZG93XG4gICAgICAgICAgICA6IFVybFRhcmdldC5Ob25lLFxuICAgICAgICB1cmw6IGFuY2hvckVsLmhyZWYsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBsaW5rO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQW5jaG9yVGFnKCk6IEhUTUxBbmNob3JFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbCA9IHRoaXMuI2dldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KCk7XG5cbiAgICBpZiAoc2VsZWN0ZWRFbCkge1xuICAgICAgcmV0dXJuIHRoaXMuI2dldFBhcmVudChzZWxlY3RlZEVsLCAnYScpIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlU2VsZWN0aW9uKCk6IFJhbmdlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uUmFuZ2UoXG4gICAgICB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCksXG4gICAgICB0aGlzLiNnZXRDb250ZW50V2luZG93RWwoKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0RWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuI3NlbGVjdGlvblNlcnZpY2Uuc2VsZWN0RWxlbWVudChcbiAgICAgIHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKSxcbiAgICAgIHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpLFxuICAgICAgZWxlbWVudFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGxhY2Vob2xkZXInLCBwbGFjZWhvbGRlciB8fCAnJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0Rm9udFNpemUoZm9udFNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICB0aGlzLmV4ZWNDb21tYW5kKHsgY29tbWFuZDogJ2ZvbnRTaXplJywgdmFsdWU6ICcxJyB9KTtcbiAgICBjb25zdCBmb250RWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKFxuICAgICAgZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ZvbnRbc2l6ZT1cIjFcIl0nKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGZvbnRFbGVtZW50cykge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSBmb250U2l6ZSArICdweCc7XG4gICAgfVxuICAgIHRoaXMuI2NsZWFuVXBCbGFua1N0eWxlVGFncyhkb2MpO1xuXG4gICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvci5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZS5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlT2JzZXJ2ZXJzKHNldHRpbmc6IEVkaXRvclNldHRpbmcpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSBzZXR0aW5nLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudFdpbmRvd1xuICAgICAgPyBzZXR0aW5nLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudFdpbmRvdy5kb2N1bWVudFxuICAgICAgOiBzZXR0aW5nLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudERvY3VtZW50O1xuICAgIHNldHRpbmcuc2VsZWN0aW9uQ2hhbmdlT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIHNldHRpbmcuY2xpY2tPYnNlcnZhYmxlLmNvbXBsZXRlKCk7XG4gICAgc2V0dGluZy5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIGlmIChkb2N1bWVudEVsKSB7XG4gICAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdzZWxlY3Rpb25jaGFuZ2UnLFxuICAgICAgICBzZXR0aW5nLnNlbGVjdGlvbkxpc3RlbmVyXG4gICAgICApO1xuICAgICAgZG9jdW1lbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnB1dCcsIHNldHRpbmcuc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgICAgZG9jdW1lbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBzZXR0aW5nLmNsaWNrTGlzdGVuZXIpO1xuICAgICAgZG9jdW1lbnRFbC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgc2V0dGluZy5wYXN0ZUxpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICAjZ2V0Q29udGVudFdpbmRvd0VsKCk6IFdpbmRvdyB7XG4gICAgcmV0dXJuIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvci5pZnJhbWVFbGVtZW50UmVmXG4gICAgICAuY29udGVudFdpbmRvdyBhcyBXaW5kb3c7XG4gIH1cblxuICAjZ2V0Q2hpbGRTZWxlY3RlZEFuY2hvclRhZ3MoKTogRWxlbWVudFtdIHtcbiAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCk/LmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKHNlbGVjdGVkUmFuZ2UgJiYgc2VsZWN0ZWRSYW5nZS50b1N0cmluZygpLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuI2dldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KCk7XG5cbiAgICBsZXQgY2hpbGRFbGVtZW50czogSFRNTEFuY2hvckVsZW1lbnRbXSA9IFtdO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgIGNoaWxkRWxlbWVudHMgPSBBcnJheS5mcm9tKHBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYScpKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBjaGlsZEVsZW1lbnRzLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuICAgICAgLy8gSUUgc3BlY2lmaWNcbiAgICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7XG4gICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZS5pbnRlcnNlY3RzTm9kZSkge1xuICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5ocmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHRlbXBSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgICAgdGVtcFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNlbGVjdGVkUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFxuICAgICAgICAgICAgICBSYW5nZS5TVEFSVF9UT19TVEFSVCxcbiAgICAgICAgICAgICAgdGVtcFJhbmdlXG4gICAgICAgICAgICApICE9PSAtMSAmJlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhcbiAgICAgICAgICAgICAgICBSYW5nZS5TVEFSVF9UT19FTkQsXG4gICAgICAgICAgICAgICAgdGVtcFJhbmdlXG4gICAgICAgICAgICAgICkgIT09IDEpIHx8XG4gICAgICAgICAgICAoc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoXG4gICAgICAgICAgICAgIFJhbmdlLkVORF9UT19TVEFSVCxcbiAgICAgICAgICAgICAgdGVtcFJhbmdlXG4gICAgICAgICAgICApICE9PSAtMSAmJlxuICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhcbiAgICAgICAgICAgICAgICBSYW5nZS5FTkRfVE9fRU5ELFxuICAgICAgICAgICAgICAgIHRlbXBSYW5nZVxuICAgICAgICAgICAgICApICE9PSAxKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsIG5vbi1JRVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgISFlbGVtZW50ICYmICEhZWxlbWVudC5ocmVmICYmIHNlbGVjdGVkUmFuZ2U/LmludGVyc2VjdHNOb2RlKGVsZW1lbnQpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgI2dldElmcmFtZURvY3VtZW50RWwoKTogRG9jdW1lbnQge1xuICAgIGNvbnN0IGNvbnRlbnRXaW5kb3dFbCA9IHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGNvbnRlbnRXaW5kb3dFbCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRXaW5kb3dFbC5kb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZlxuICAgICAgLmNvbnRlbnREb2N1bWVudCBhcyBEb2N1bWVudDtcbiAgfVxuXG4gICNnZXRGb250U2l6ZSgpOiBzdHJpbmcge1xuICAgIGxldCBmb250U2l6ZSA9IFNUWUxFX1NUQVRFX0RFRkFVTFRTLmZvbnRTaXplLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoXG4gICAgICBzZWxlY3Rpb24gJiZcbiAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlICYmXG4gICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50XG4gICAgKSB7XG4gICAgICBsZXQgZWxlbWVudCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlbGVtZW50Py5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudD8ucGFyZW50RWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50IGFzIEVsZW1lbnQpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChjb21wdXRlZFN0eWxlKSB7XG4gICAgICAgIGZvbnRTaXplID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdmb250LXNpemUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9XG5cbiAgI2NyZWF0ZU9ic2VydmVycyhlbGVtZW50OiBIVE1MSUZyYW1lRWxlbWVudCk6IEVkaXRvclNldHRpbmcge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IGVsZW1lbnQuY29udGVudFdpbmRvd1xuICAgICAgPyBlbGVtZW50LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnRcbiAgICAgIDogKGVsZW1lbnQuY29udGVudERvY3VtZW50IGFzIERvY3VtZW50KTtcblxuICAgIC8vIEZpcmVmb3ggYnVnIHdoZXJlIHdlIG5lZWQgdG8gb3Blbi9jbG9zZSB0byBjYW5jZWwgbG9hZCBzbyBpdCBkb2Vzbid0IG92ZXJ3cml0ZSBhdHRyc1xuICAgIGRvY3VtZW50RWwub3BlbigpO1xuICAgIGRvY3VtZW50RWwuY2xvc2UoKTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbk9ic2VydmFibGUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkxpc3RlbmVyID0gKCk6IHZvaWQgPT4gc2VsZWN0aW9uT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgY2xpY2tPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBjbGlja0xpc3RlbmVyID0gKCk6IHZvaWQgPT4gY2xpY2tPYnNlcnZhYmxlLm5leHQoKTtcbiAgICBjb25zdCBwYXN0ZUxpc3RlbmVyID0gdGhpcy4jZ2V0UGFzdGVPdmVycmlkZSgpO1xuICAgIGNvbnN0IGJsdXJPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBibHVyTGlzdGVuZXIgPSAoKTogdm9pZCA9PiBibHVyT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgaW5wdXRPYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBpbnB1dExpc3RlbmVyID0gKCk6IHZvaWQgPT4gaW5wdXRPYnNlcnZhYmxlLm5leHQoKTtcblxuICAgIGRvY3VtZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBpbnB1dExpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGNsaWNrTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwuYm9keS5hZGRFdmVudExpc3RlbmVyKCdwYXN0ZScsIHBhc3RlTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwuYm9keS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgYmx1ckxpc3RlbmVyKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmx1ck9ic2VydmFibGUsXG4gICAgICBjbGlja09ic2VydmFibGUsXG4gICAgICBjb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZTogbmV3IFN1YmplY3QoKSxcbiAgICAgIGlmcmFtZUVsZW1lbnRSZWY6IGVsZW1lbnQsXG4gICAgICBpbnB1dE9ic2VydmFibGUsXG4gICAgICBzZWxlY3Rpb25DaGFuZ2VPYnNlcnZhYmxlOiBzZWxlY3Rpb25PYnNlcnZhYmxlLFxuICAgICAgYmx1ckxpc3RlbmVyLFxuICAgICAgY2xpY2tMaXN0ZW5lcixcbiAgICAgIGlucHV0TGlzdGVuZXIsXG4gICAgICBwYXN0ZUxpc3RlbmVyLFxuICAgICAgc2VsZWN0aW9uTGlzdGVuZXIsXG4gICAgfTtcbiAgfVxuXG4gICNnZXRQYXN0ZU92ZXJyaWRlKCk6IChlOiBDbGlwYm9hcmRFdmVudCkgPT4gdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gKGU6IENsaXBib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCB0ZXh0ID0gZS5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG5cbiAgICAgIGlmICh0ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5leGVjQ29tbWFuZCh7IGNvbW1hbmQ6ICdpbnNlcnRIVE1MJywgdmFsdWU6IHRleHQudG9TdHJpbmcoKSB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgI2dldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KCk6IEVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudChcbiAgICAgIHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKVxuICAgICk7XG4gIH1cblxuICAjZ2V0Q29sb3IoZG9jdW1lbnRFbDogRG9jdW1lbnQsIHNlbGVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbW1hbmRWYWx1ZSA9IGRvY3VtZW50RWwucXVlcnlDb21tYW5kVmFsdWUoc2VsZWN0b3IpO1xuXG4gICAgLy8gRWRnZSBpcyB3ZWlyZCBhbmQgcmV0dXJucyBudW1iZXJzXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHR5cGVvZiBjb21tYW5kVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJ3JnYignICtcbiAgICAgICAgKGNvbW1hbmRWYWx1ZSAmIDB4ZmYpICtcbiAgICAgICAgJywgJyArXG4gICAgICAgICgoY29tbWFuZFZhbHVlICYgMHhmZjAwKSA+PiA4KSArXG4gICAgICAgICcsICcgK1xuICAgICAgICAoKGNvbW1hbmRWYWx1ZSAmIDB4ZmYwMDAwKSA+PiAxNikgK1xuICAgICAgICAnKSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmlyZWZveCB1c2VzICdUcmFuc3BhcmVudCcgaW5zdGVhZCBvZiBhIGNvbG9yIHZhbHVlXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoY29tbWFuZFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zcGFyZW50Jykge1xuICAgICAgcmV0dXJuIFNUWUxFX1NUQVRFX0RFRkFVTFRTLmJhY2tDb2xvcjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRWYWx1ZTtcbiAgfVxuXG4gICNoYXNMaW5rKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5nZXRTZWxlY3RlZEFuY2hvclRhZygpO1xuICAgIGNvbnN0IGNoaWxkQW5jaG9yRWxzID0gdGhpcy4jZ2V0Q2hpbGRTZWxlY3RlZEFuY2hvclRhZ3MoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBjaGlsZEFuY2hvckVscy5sZW5ndGggPiAwIHx8ICghIWFuY2hvckVsICYmICEhYW5jaG9yRWwuaHJlZik7XG4gIH1cblxuICAjZ2V0UGFyZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHRhZzogc3RyaW5nKTogRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGN1cnJlbnROb2RlOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlICYmIGN1cnJlbnROb2RlLnRhZ05hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknKSB7XG4gICAgICBpZiAoY3VycmVudE5vZGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSB0YWcudG9VcHBlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgICB9XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBlZGl0b3JTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIHJldHVybiB0aGlzLiNzZWxlY3Rpb25TZXJ2aWNlLmlzRWxlbWVudFNlbGVjdGVkKFxuICAgICAgZG9jdW1lbnRFbCxcbiAgICAgIGRvY3VtZW50RWwuYm9keVxuICAgICk7XG4gIH1cblxuICAjY2xlYW5VcEJsYW5rU3R5bGVUYWdzKGRvYzogRG9jdW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBvcnBoYW5FbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20oXG4gICAgICBkb2MucXVlcnlTZWxlY3RvckFsbCgnZm9udCxzcGFuLCpbc3R5bGU9XCJcIl0nKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG9ycGhhbkVsZW1lbnRzKSB7XG4gICAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZW1vdmFibGVFbGVtZW50cyA9IG9ycGhhbkVsZW1lbnRzLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRhZ05hbWUgPT09ICdGT05UJyB8fCB0YWdOYW1lID09PSAnU1BBTicpICYmXG4gICAgICAgIChlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoID09PSAwIHx8ICFlbGVtZW50Lmhhc0NoaWxkTm9kZXMpXG4gICAgICApO1xuICAgIH0pO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByZW1vdmFibGVFbGVtZW50cykge1xuICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudC5maXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2VydGFpbiB2YWx1ZXMgYXJlIGVuY29kZWQgaW4gaHRtbCBhbmQgbmVlZCB0byBiZSBkZWNvZGVkXG4gICNyZXBsYWNlSHRtbENvZGVzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAucmVwbGFjZSgvJm5ic3A7LywgU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKVxuICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxuICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKVxuICAgICAgLnJlcGxhY2UoLyZhbXA7L2csICcmJyk7XG4gIH1cblxuICAjc2V0RWRpdG9yRGlzYWJsZWQoXG4gICAgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sXG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIGRpc2FibGVkOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBkaXNhYmxlZCA/ICdub25lJyA6ICdhdXRvJztcbiAgICB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAnYXJpYS1kaXNhYmxlZCcsXG4gICAgICBkaXNhYmxlZCA/ICd0cnVlJyA6ICdmYWxzZSdcbiAgICApO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZvY3VzYWJsZUNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvY3VzYWJsZUNoaWxkcmVuLmZvckVhY2goKGFGb2N1c2FibGVDaGlsZCkgPT4ge1xuICAgICAgICBhRm9jdXNhYmxlQ2hpbGQudGFiSW5kZXggPSBkaXNhYmxlZCA/IC0xIDogMDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCkuYm9keS5zZXRBdHRyaWJ1dGUoXG4gICAgICAnY29udGVudGVkaXRhYmxlJyxcbiAgICAgIGRpc2FibGVkID8gJ2ZhbHNlJyA6ICd0cnVlJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
421
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RleHQtZWRpdG9yL3NyYy9saWIvbW9kdWxlcy90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztBQUtoRTs7R0FFRztBQUVILE1BQU0sT0FBTywyQkFBMkI7SUFLdEMsWUFDRSxnQkFBK0MsRUFDL0MsaUJBQXVDLEVBQ3ZDLGFBQThCOztRQVBoQyxnRUFBaUQ7UUFDakQsaUVBQXlDO1FBQ3pDLHlEQUE0QjtRQU8xQix1QkFBQSxJQUFJLGlEQUFxQixnQkFBZ0IsTUFBQSxDQUFDO1FBQzFDLHVCQUFBLElBQUksa0RBQXNCLGlCQUFpQixNQUFBLENBQUM7UUFDNUMsdUJBQUEsSUFBSSwwQ0FBYyxhQUFhLE1BQUEsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQ2YsRUFBVSxFQUNWLGFBQWdDLEVBQ2hDLFVBQW1DLEVBQ25DLFdBQW9CO1FBRXBCLHVCQUFBLElBQUksc0RBQW1CLENBQUMsTUFBTSxHQUFHLHVCQUFBLElBQUksNEZBQWlCLE1BQXJCLElBQUksRUFBa0IsYUFBYSxDQUFDLENBQUM7UUFFdEUsTUFBTSxVQUFVLEdBQUcsdUJBQUEsSUFBSSxnR0FBcUIsTUFBekIsSUFBSSxDQUF1QixDQUFDO1FBRS9DLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxh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bnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNUWUxFX1NUQVRFX0RFRkFVTFRTIH0gZnJvbSAnLi4vZGVmYXVsdHMvc3R5bGUtc3RhdGUtZGVmYXVsdHMnO1xuaW1wb3J0IHsgRWRpdG9yQ29tbWFuZCB9IGZyb20gJy4uL3R5cGVzL2VkaXRvci1jb21tYW5kJztcbmltcG9ydCB7IEVkaXRvclNldHRpbmcgfSBmcm9tICcuLi90eXBlcy9lZGl0b3Itc2V0dGluZyc7XG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZSB9IGZyb20gJy4uL3R5cGVzL3N0eWxlLXN0YXRlJztcbmltcG9ydCB7IFVybE1vZGFsUmVzdWx0IH0gZnJvbSAnLi4vdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC1tb2RhbC1yZXN1bHQnO1xuaW1wb3J0IHsgVXJsVGFyZ2V0IH0gZnJvbSAnLi4vdXJsLW1vZGFsL3RleHQtZWRpdG9yLXVybC10YXJnZXQnO1xuXG5pbXBvcnQgeyBTa3lUZXh0RWRpdG9yU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vdGV4dC1lZGl0b3Itc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2t5VGV4dEVkaXRvclNlcnZpY2UgfSBmcm9tICcuL3RleHQtZWRpdG9yLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5VGV4dEVkaXRvckFkYXB0ZXJTZXJ2aWNlIHtcbiAgI3NlbGVjdGlvblNlcnZpY2U6IFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlO1xuICAjdGV4dEVkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlO1xuICAjd2luZG93UmVmOiBTa3lBcHBXaW5kb3dSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2VsZWN0aW9uU2VydmljZTogU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgdGV4dEVkaXRvclNlcnZpY2U6IFNreVRleHRFZGl0b3JTZXJ2aWNlLFxuICAgIHdpbmRvd1NlcnZpY2U6IFNreUFwcFdpbmRvd1JlZlxuICApIHtcbiAgICB0aGlzLiNzZWxlY3Rpb25TZXJ2aWNlID0gc2VsZWN0aW9uU2VydmljZTtcbiAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZSA9IHRleHRFZGl0b3JTZXJ2aWNlO1xuICAgIHRoaXMuI3dpbmRvd1JlZiA9IHdpbmRvd1NlcnZpY2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRleHQgZWRpdG9yIGluc2lkZSB0aGUgc3VwcGxpZWQgaWZyYW1lIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgaW5pdEVkaXRvcihcbiAgICBpZDogc3RyaW5nLFxuICAgIGlmcmFtZUVsZW1lbnQ6IEhUTUxJRnJhbWVFbGVtZW50LFxuICAgIHN0eWxlU3RhdGU6IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlLFxuICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvciA9IHRoaXMuI2NyZWF0ZU9ic2VydmVycyhpZnJhbWVFbGVtZW50KTtcblxuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG5cbiAgICBjb25zdCBzdHlsZUVsID0gZG9jdW1lbnRFbC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWwuaW5uZXJIVE1MID0gYC5lZGl0b3I6ZW1wdHk6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7XG4gICAgICBmb250LWZhbWlseTogXCJCbGFja2JhdWQgU2Fuc1wiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgIGNvbG9yOiAjNjg2YzczO1xuICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICB9YDtcbiAgICBkb2N1bWVudEVsLmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbCk7XG5cbiAgICBjb25zdCBzdHlsZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUgPSB7XG4gICAgICAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUyxcbiAgICAgIC4uLnN0eWxlU3RhdGUsXG4gICAgfTtcbiAgICBjb25zdCBib2R5U3R5bGUgPSBgYmFja2dyb3VuZC1jb2xvcjogJHtzdHlsZS5iYWNrQ29sb3J9O1xuICAgICAgY29sb3I6ICR7c3R5bGUuZm9udENvbG9yfTtcbiAgICAgIGZvbnQtZmFtaWx5OiAke3N0eWxlLmZvbnR9O1xuICAgICAgZm9udC1zaXplOiAke3N0eWxlLmZvbnRTaXplfXB4YDtcbiAgICBkb2N1bWVudEVsLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKT8uc2V0QXR0cmlidXRlKCdsYW5nJywgJ2VuJyk7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ3RydWUnKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdyb2xlJywgJ21haW4nKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdjbGFzcycsICdlZGl0b3InKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsIGJvZHlTdHlsZSk7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnZGF0YS1wbGFjZWhvbGRlcicsIHBsYWNlaG9sZGVyIHx8ICcnKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlRWRpdG9yKFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLFxuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiB2b2lkIHtcbiAgICB0aGlzLiNzZXRFZGl0b3JEaXNhYmxlZChmb2N1c2FibGVDaGlsZHJlbiwgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQsIHRydWUpO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZUVkaXRvcihcbiAgICBmb2N1c2FibGVDaGlsZHJlbjogSFRNTEVsZW1lbnRbXSxcbiAgICB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy4jc2V0RWRpdG9yRGlzYWJsZWQoZm9jdXNhYmxlQ2hpbGRyZW4sIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBjb21tYW5kIG9uIHRoZSB0ZXh0IGVkaXRvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIGV4ZWNDb21tYW5kKGVkaXRvckNvbW1hbmQ6IEVkaXRvckNvbW1hbmQpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5lZGl0b3JTZWxlY3RlZCgpKSB7XG4gICAgICAgIGRvY3VtZW50RWwuZXhlY0NvbW1hbmQoXG4gICAgICAgICAgZWRpdG9yQ29tbWFuZC5jb21tYW5kLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIGVkaXRvckNvbW1hbmQudmFsdWVcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgICAgIHRoaXMuI3RleHRFZGl0b3JTZXJ2aWNlLmVkaXRvci5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb24oKTogU2VsZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvbihcbiAgICAgIHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGRhdGEgVVJJIHVzaW5nIHRoZSBwcm92aWRlZCB0ZXh0IHN0cmluZy5cbiAgICogVXNlZCB0byBkaXNwbGF5IGEgbWVyZ2UgZmllbGQgaW5zaWRlIGEgc3RyaW5nIG9mIHRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0TWVyZ2VGaWVsZERhdGFVUkkodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jd2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudDtcbiAgICBsZXQgdGV4dFRvVXNlID0gdGV4dDtcbiAgICBpZiAodGV4dC5sZW5ndGggPiAxOCkge1xuICAgICAgdGV4dFRvVXNlID0gdGV4dC5zdWJzdHIoMCwgMTUpICsgJy4uLic7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzRWxlbWVudCA9IGRvY3VtZW50RWwuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcyMCcpO1xuICAgIGNhbnZhc0VsZW1lbnQuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxMDAnKTtcbiAgICBjYW52YXNFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0YW4nO1xuICAgIGNhbnZhc0VsZW1lbnQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjMDAwMDAwJztcbiAgICBjYW52YXNFbGVtZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc1cHgnO1xuXG4gICAgY29uc3QgY29udGV4dCA9IGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb250ZXh0LmZvbnQgPSAnMTJweCBBcmlhbCc7XG4gICAgY29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICBjb250ZXh0LmZpbGxUZXh0KHRleHRUb1VzZSwgNTAsIDE1KTtcblxuICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW92ZXInO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJyMwMEZGRkYnO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgMTAwLCAyMCk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7XG4gICAgY29udGV4dC5saW5lV2lkdGggPSAyO1xuICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAnI0ZGMDAwMCc7XG4gICAgY29udGV4dC5zdHJva2VSZWN0KDAsIDAsIDEwMCwgMjApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FudmFzRWxlbWVudC50b0RhdGFVUkwoJ2ltYWdlL3BuZycsIDEuMCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdHlsZVN0YXRlKCk6IFBhcnRpYWw8U2t5VGV4dEVkaXRvclN0eWxlU3RhdGU+IHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5lZGl0b3JTZWxlY3RlZCgpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrQ29sb3I6IHRoaXMuI2dldENvbG9yKGRvY3VtZW50RWwsICdCYWNrQ29sb3InKSxcbiAgICAgICAgZm9udENvbG9yOiB0aGlzLiNnZXRDb2xvcihkb2N1bWVudEVsLCAnRm9yZUNvbG9yJyksXG4gICAgICAgIGZvbnRTaXplOiBwYXJzZUludCh0aGlzLiNnZXRGb250U2l6ZSgpLCB1bmRlZmluZWQpLFxuICAgICAgICBmb250OiBkb2N1bWVudEVsLnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb250bmFtZScpLFxuICAgICAgICBib2xkU3RhdGU6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kU3RhdGUoJ0JvbGQnKSxcbiAgICAgICAgaXRhbGljU3RhdGU6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kU3RhdGUoJ0l0YWxpYycpLFxuICAgICAgICB1bmRlcmxpbmVTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnVW5kZXJsaW5lJyksXG4gICAgICAgIGxpbmtTdGF0ZTogdGhpcy4jaGFzTGluaygpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFZGl0b3JJbm5lckh0bWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpO1xuICAgIGlmIChkb2N1bWVudEVsKSB7XG4gICAgICByZXR1cm4gdGhpcy4jcmVwbGFjZUh0bWxDb2Rlcyhkb2N1bWVudEVsLmJvZHkuaW5uZXJIVE1MKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcklubmVySHRtbCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBjb25zdCBlZGl0b3JDb250ZW50ID0gZG9jdW1lbnRFbC5ib2R5O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGVkaXRvckNvbnRlbnQuaW5uZXJIVE1MICE9PSB2YWx1ZSkge1xuICAgICAgZWRpdG9yQ29udGVudC5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9jdXNFZGl0b3IoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yKSB7XG4gICAgICBjb25zdCB3aW5kb3dFbCA9IHRoaXMuI2dldENvbnRlbnRXaW5kb3dFbCgpO1xuICAgICAgY29uc3QgaWZyYW1lRG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLiNzZWxlY3Rpb25TZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgaWZyYW1lRG9jdW1lbnRFbCxcbiAgICAgICAgd2luZG93RWxcbiAgICAgICk7XG4gICAgICBjb25zdCBjdXJzb3JJc05vdEFjdGl2ZUFuZEhhc1Jlc2V0ID1cbiAgICAgICAgY3VycmVudFNlbGVjdGlvbiAmJlxuICAgICAgICBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0T2Zmc2V0ID09PSAwICYmXG4gICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uZW5kT2Zmc2V0ID09PSAwO1xuXG4gICAgICBpZiAoIXRoaXMuZWRpdG9yU2VsZWN0ZWQoKSB8fCBjdXJzb3JJc05vdEFjdGl2ZUFuZEhhc1Jlc2V0KSB7XG4gICAgICAgIC8vIGZvY3VzIHRoZSBlbmQgb2YgdGhlIGVkaXRvclxuICAgICAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy4jd2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gaWZyYW1lRG9jdW1lbnRFbC5ib2R5IGFzIEhUTUxCb2R5RWxlbWVudDtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgICAgdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmlmcmFtZUVsZW1lbnRSZWYuZm9jdXMoKTtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG5cbiAgICAgICAgaWYgKHdpbmRvd0VsLmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKSB7XG4gICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7XG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIHNlbD8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEN1cnNvciBtYXkgbm90IGJlIGFjdGl2ZSwgcmVzdG9yZSBpdFxuICAgICAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICBpZnJhbWVEb2N1bWVudEVsLmJvZHkuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TGluaygpOiBVcmxNb2RhbFJlc3VsdCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGxpbms6IFVybE1vZGFsUmVzdWx0IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFuY2hvckVsID0gdGhpcy5nZXRTZWxlY3RlZEFuY2hvclRhZygpO1xuICAgIGlmIChhbmNob3JFbCAmJiBhbmNob3JFbC5ocmVmKSB7XG4gICAgICBsaW5rID0ge1xuICAgICAgICB0YXJnZXQ6XG4gICAgICAgICAgYW5jaG9yRWwuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKSA9PT0gJ19ibGFuaydcbiAgICAgICAgICAgID8gVXJsVGFyZ2V0Lk5ld1dpbmRvd1xuICAgICAgICAgICAgOiBVcmxUYXJnZXQuTm9uZSxcbiAgICAgICAgdXJsOiBhbmNob3JFbC5ocmVmLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluaztcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZEFuY2hvclRhZygpOiBIVE1MQW5jaG9yRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlbGVjdGVkRWwgPSB0aGlzLiNnZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudCgpO1xuXG4gICAgaWYgKHNlbGVjdGVkRWwpIHtcbiAgICAgIHJldHVybiB0aGlzLiNnZXRQYXJlbnQoc2VsZWN0ZWRFbCwgJ2EnKSBhcyBIVE1MQW5jaG9yRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVNlbGVjdGlvbigpOiBSYW5nZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKFxuICAgICAgdGhpcy4jZ2V0SWZyYW1lRG9jdW1lbnRFbCgpLFxuICAgICAgdGhpcy4jZ2V0Q29udGVudFdpbmRvd0VsKClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLiNzZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdEVsZW1lbnQoXG4gICAgICB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCksXG4gICAgICB0aGlzLiNnZXRDb250ZW50V2luZG93RWwoKSxcbiAgICAgIGVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNldFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIgfHwgJycpO1xuICB9XG5cbiAgcHVibGljIHNldEZvbnRTaXplKGZvbnRTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBkb2MgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG4gICAgdGhpcy5leGVjQ29tbWFuZCh7IGNvbW1hbmQ6ICdmb250U2l6ZScsIHZhbHVlOiAnMScgfSk7XG4gICAgY29uc3QgZm9udEVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gQXJyYXkuZnJvbShcbiAgICAgIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdmb250W3NpemU9XCIxXCJdJylcbiAgICApO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBmb250RWxlbWVudHMpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzaXplJyk7XG4gICAgICBlbGVtZW50LnN0eWxlLmZvbnRTaXplID0gZm9udFNpemUgKyAncHgnO1xuICAgIH1cbiAgICB0aGlzLiNjbGVhblVwQmxhbmtTdHlsZVRhZ3MoZG9jKTtcblxuICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuY29tbWFuZENoYW5nZU9ic2VydmFibGUubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZU9ic2VydmVycyhzZXR0aW5nOiBFZGl0b3JTZXR0aW5nKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBjb25zdCBkb2N1bWVudEVsID0gc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnRXaW5kb3dcbiAgICAgID8gc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnRcbiAgICAgIDogc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnREb2N1bWVudDtcbiAgICBzZXR0aW5nLnNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBzZXR0aW5nLmNsaWNrT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIHNldHRpbmcuY29tbWFuZENoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBpZiAoZG9jdW1lbnRFbCkge1xuICAgICAgZG9jdW1lbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2VsZWN0aW9uY2hhbmdlJyxcbiAgICAgICAgc2V0dGluZy5zZWxlY3Rpb25MaXN0ZW5lclxuICAgICAgKTtcbiAgICAgIGRvY3VtZW50RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBzZXR0aW5nLnNlbGVjdGlvbkxpc3RlbmVyKTtcbiAgICAgIGRvY3VtZW50RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgc2V0dGluZy5jbGlja0xpc3RlbmVyKTtcbiAgICAgIGRvY3VtZW50RWwuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXN0ZScsIHNldHRpbmcucGFzdGVMaXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgI2dldENvbnRlbnRXaW5kb3dFbCgpOiBXaW5kb3cge1xuICAgIHJldHVybiB0aGlzLiN0ZXh0RWRpdG9yU2VydmljZS5lZGl0b3IuaWZyYW1lRWxlbWVudFJlZlxuICAgICAgLmNvbnRlbnRXaW5kb3cgYXMgV2luZG93O1xuICB9XG5cbiAgI2dldENoaWxkU2VsZWN0ZWRBbmNob3JUYWdzKCk6IEVsZW1lbnRbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpPy5nZXRSYW5nZUF0KDApO1xuICAgIGlmIChzZWxlY3RlZFJhbmdlICYmIHNlbGVjdGVkUmFuZ2UudG9TdHJpbmcoKS5sZW5ndGggPD0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLiNnZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudCgpO1xuXG4gICAgbGV0IGNoaWxkRWxlbWVudHM6IEhUTUxBbmNob3JFbGVtZW50W10gPSBbXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICBjaGlsZEVsZW1lbnRzID0gQXJyYXkuZnJvbShwYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKSk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gY2hpbGRFbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQpID0+IHtcbiAgICAgIC8vIElFIHNwZWNpZmljXG4gICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkge1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UuaW50ZXJzZWN0c05vZGUpIHtcbiAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuaHJlZikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0ZW1wUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgIHRlbXBSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhcbiAgICAgICAgICAgICAgUmFuZ2UuU1RBUlRfVE9fU1RBUlQsXG4gICAgICAgICAgICAgIHRlbXBSYW5nZVxuICAgICAgICAgICAgKSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoXG4gICAgICAgICAgICAgICAgUmFuZ2UuU1RBUlRfVE9fRU5ELFxuICAgICAgICAgICAgICAgIHRlbXBSYW5nZVxuICAgICAgICAgICAgICApICE9PSAxKSB8fFxuICAgICAgICAgICAgKHNlbGVjdGVkUmFuZ2UuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFxuICAgICAgICAgICAgICBSYW5nZS5FTkRfVE9fU1RBUlQsXG4gICAgICAgICAgICAgIHRlbXBSYW5nZVxuICAgICAgICAgICAgKSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoXG4gICAgICAgICAgICAgICAgUmFuZ2UuRU5EX1RPX0VORCxcbiAgICAgICAgICAgICAgICB0ZW1wUmFuZ2VcbiAgICAgICAgICAgICAgKSAhPT0gMSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vcm1hbCBub24tSUVcbiAgICAgIHJldHVybiAoXG4gICAgICAgICEhZWxlbWVudCAmJiAhIWVsZW1lbnQuaHJlZiAmJiBzZWxlY3RlZFJhbmdlPy5pbnRlcnNlY3RzTm9kZShlbGVtZW50KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gICNnZXRJZnJhbWVEb2N1bWVudEVsKCk6IERvY3VtZW50IHtcbiAgICBjb25zdCBjb250ZW50V2luZG93RWwgPSB0aGlzLiNnZXRDb250ZW50V2luZG93RWwoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjb250ZW50V2luZG93RWwpIHtcbiAgICAgIHJldHVybiBjb250ZW50V2luZG93RWwuZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdGhpcy4jdGV4dEVkaXRvclNlcnZpY2UuZWRpdG9yLmlmcmFtZUVsZW1lbnRSZWZcbiAgICAgIC5jb250ZW50RG9jdW1lbnQgYXMgRG9jdW1lbnQ7XG4gIH1cblxuICAjZ2V0Rm9udFNpemUoKTogc3RyaW5nIHtcbiAgICBsZXQgZm9udFNpemUgPSBTVFlMRV9TVEFURV9ERUZBVUxUUy5mb250U2l6ZS50b1N0cmluZygpO1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKFxuICAgICAgc2VsZWN0aW9uICYmXG4gICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSAmJlxuICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUucGFyZW50RWxlbWVudFxuICAgICkge1xuICAgICAgbGV0IGVsZW1lbnQgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZSBhcyBIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZWxlbWVudD8ubm9kZVR5cGUgIT09IDEpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCBhcyBFbGVtZW50KTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoY29tcHV0ZWRTdHlsZSkge1xuICAgICAgICBmb250U2l6ZSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb250U2l6ZTtcbiAgfVxuXG4gICNjcmVhdGVPYnNlcnZlcnMoZWxlbWVudDogSFRNTElGcmFtZUVsZW1lbnQpOiBFZGl0b3JTZXR0aW5nIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSBlbGVtZW50LmNvbnRlbnRXaW5kb3dcbiAgICAgID8gZWxlbWVudC5jb250ZW50V2luZG93LmRvY3VtZW50XG4gICAgICA6IChlbGVtZW50LmNvbnRlbnREb2N1bWVudCBhcyBEb2N1bWVudCk7XG5cbiAgICAvLyBGaXJlZm94IGJ1ZyB3aGVyZSB3ZSBuZWVkIHRvIG9wZW4vY2xvc2UgdG8gY2FuY2VsIGxvYWQgc28gaXQgZG9lc24ndCBvdmVyd3JpdGUgYXR0cnNcbiAgICBkb2N1bWVudEVsLm9wZW4oKTtcbiAgICBkb2N1bWVudEVsLmNsb3NlKCk7XG5cbiAgICBjb25zdCBzZWxlY3Rpb25PYnNlcnZhYmxlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBzZWxlY3Rpb25MaXN0ZW5lciA9ICgpOiB2b2lkID0+IHNlbGVjdGlvbk9ic2VydmFibGUubmV4dCgpO1xuICAgIGNvbnN0IGNsaWNrT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY29uc3QgY2xpY2tMaXN0ZW5lciA9ICgpOiB2b2lkID0+IGNsaWNrT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgcGFzdGVMaXN0ZW5lciA9IHRoaXMuI2dldFBhc3RlT3ZlcnJpZGUoKTtcbiAgICBjb25zdCBibHVyT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY29uc3QgYmx1ckxpc3RlbmVyID0gKCk6IHZvaWQgPT4gYmx1ck9ic2VydmFibGUubmV4dCgpO1xuICAgIGNvbnN0IGlucHV0T2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY29uc3QgaW5wdXRMaXN0ZW5lciA9ICgpOiB2b2lkID0+IGlucHV0T2JzZXJ2YWJsZS5uZXh0KCk7XG5cbiAgICBkb2N1bWVudEVsLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIHNlbGVjdGlvbkxpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgaW5wdXRMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBjbGlja0xpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBwYXN0ZUxpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIGJsdXJMaXN0ZW5lcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsdXJPYnNlcnZhYmxlLFxuICAgICAgY2xpY2tPYnNlcnZhYmxlLFxuICAgICAgY29tbWFuZENoYW5nZU9ic2VydmFibGU6IG5ldyBTdWJqZWN0KCksXG4gICAgICBpZnJhbWVFbGVtZW50UmVmOiBlbGVtZW50LFxuICAgICAgaW5wdXRPYnNlcnZhYmxlLFxuICAgICAgc2VsZWN0aW9uQ2hhbmdlT2JzZXJ2YWJsZTogc2VsZWN0aW9uT2JzZXJ2YWJsZSxcbiAgICAgIGJsdXJMaXN0ZW5lcixcbiAgICAgIGNsaWNrTGlzdGVuZXIsXG4gICAgICBpbnB1dExpc3RlbmVyLFxuICAgICAgcGFzdGVMaXN0ZW5lcixcbiAgICAgIHNlbGVjdGlvbkxpc3RlbmVyLFxuICAgIH07XG4gIH1cblxuICAjZ2V0UGFzdGVPdmVycmlkZSgpOiAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIChlOiBDbGlwYm9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgdGV4dCA9IGUuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuXG4gICAgICBpZiAodGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZXhlY0NvbW1hbmQoeyBjb21tYW5kOiAnaW5zZXJ0SFRNTCcsIHZhbHVlOiB0ZXh0LnRvU3RyaW5nKCkgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gICNnZXRDdXJyZW50U2VsZWN0aW9uUGFyZW50RWxlbWVudCgpOiBFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoXG4gICAgICB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKClcbiAgICApO1xuICB9XG5cbiAgI2dldENvbG9yKGRvY3VtZW50RWw6IERvY3VtZW50LCBzZWxlY3Rvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21tYW5kVmFsdWUgPSBkb2N1bWVudEVsLnF1ZXJ5Q29tbWFuZFZhbHVlKHNlbGVjdG9yKTtcblxuICAgIC8vIEVkZ2UgaXMgd2VpcmQgYW5kIHJldHVybnMgbnVtYmVyc1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0eXBlb2YgY29tbWFuZFZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiAoXG4gICAgICAgICdyZ2IoJyArXG4gICAgICAgIChjb21tYW5kVmFsdWUgJiAweGZmKSArXG4gICAgICAgICcsICcgK1xuICAgICAgICAoKGNvbW1hbmRWYWx1ZSAmIDB4ZmYwMCkgPj4gOCkgK1xuICAgICAgICAnLCAnICtcbiAgICAgICAgKChjb21tYW5kVmFsdWUgJiAweGZmMDAwMCkgPj4gMTYpICtcbiAgICAgICAgJyknXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZpcmVmb3ggdXNlcyAnVHJhbnNwYXJlbnQnIGluc3RlYWQgb2YgYSBjb2xvciB2YWx1ZVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKGNvbW1hbmRWYWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICd0cmFuc3BhcmVudCcpIHtcbiAgICAgIHJldHVybiBTVFlMRV9TVEFURV9ERUZBVUxUUy5iYWNrQ29sb3I7XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kVmFsdWU7XG4gIH1cblxuICAjaGFzTGluaygpOiBib29sZWFuIHtcbiAgICBjb25zdCBhbmNob3JFbCA9IHRoaXMuZ2V0U2VsZWN0ZWRBbmNob3JUYWcoKTtcbiAgICBjb25zdCBjaGlsZEFuY2hvckVscyA9IHRoaXMuI2dldENoaWxkU2VsZWN0ZWRBbmNob3JUYWdzKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gY2hpbGRBbmNob3JFbHMubGVuZ3RoID4gMCB8fCAoISFhbmNob3JFbCAmJiAhIWFuY2hvckVsLmhyZWYpO1xuICB9XG5cbiAgI2dldFBhcmVudChlbGVtZW50OiBFbGVtZW50LCB0YWc6IHN0cmluZyk6IEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGxldCBjdXJyZW50Tm9kZTogRWxlbWVudCB8IG51bGwgPSBlbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJykge1xuICAgICAgaWYgKGN1cnJlbnROb2RlLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gdGFnLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgfVxuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGVkaXRvclNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLiNnZXRJZnJhbWVEb2N1bWVudEVsKCk7XG4gICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvblNlcnZpY2UuaXNFbGVtZW50U2VsZWN0ZWQoXG4gICAgICBkb2N1bWVudEVsLFxuICAgICAgZG9jdW1lbnRFbC5ib2R5XG4gICAgKTtcbiAgfVxuXG4gICNjbGVhblVwQmxhbmtTdHlsZVRhZ3MoZG9jOiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9ycGhhbkVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gQXJyYXkuZnJvbShcbiAgICAgIGRvYy5xdWVyeVNlbGVjdG9yQWxsKCdmb250LHNwYW4sKltzdHlsZT1cIlwiXScpXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygb3JwaGFuRWxlbWVudHMpIHtcbiAgICAgIGlmICghZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlbW92YWJsZUVsZW1lbnRzID0gb3JwaGFuRWxlbWVudHMuZmlsdGVyKChlbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGFnTmFtZSA9PT0gJ0ZPTlQnIHx8IHRhZ05hbWUgPT09ICdTUEFOJykgJiZcbiAgICAgICAgKGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggPT09IDAgfHwgIWVsZW1lbnQuaGFzQ2hpbGROb2RlcylcbiAgICAgICk7XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHJlbW92YWJsZUVsZW1lbnRzKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShlbGVtZW50LmZpcnN0Q2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDZXJ0YWluIHZhbHVlcyBhcmUgZW5jb2RlZCBpbiBodG1sIGFuZCBuZWVkIHRvIGJlIGRlY29kZWRcbiAgI3JlcGxhY2VIdG1sQ29kZXMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHJcbiAgICAgIC5yZXBsYWNlKC8mbmJzcDsvLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCkpXG4gICAgICAucmVwbGFjZSgvJmx0Oy9nLCAnPCcpXG4gICAgICAucmVwbGFjZSgvJmd0Oy9nLCAnPicpXG4gICAgICAucmVwbGFjZSgvJmFtcDsvZywgJyYnKTtcbiAgfVxuXG4gICNzZXRFZGl0b3JEaXNhYmxlZChcbiAgICBmb2N1c2FibGVDaGlsZHJlbjogSFRNTEVsZW1lbnRbXSxcbiAgICB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IGRpc2FibGVkID8gJ25vbmUnIDogJ2F1dG8nO1xuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICdhcmlhLWRpc2FibGVkJyxcbiAgICAgIGRpc2FibGVkID8gJ3RydWUnIDogJ2ZhbHNlJ1xuICAgICk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgZm9jdXNhYmxlQ2hpbGRyZW4uZm9yRWFjaCgoYUZvY3VzYWJsZUNoaWxkKSA9PiB7XG4gICAgICAgIGFGb2N1c2FibGVDaGlsZC50YWJJbmRleCA9IGRpc2FibGVkID8gLTEgOiAwO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuI2dldElmcmFtZURvY3VtZW50RWwoKS5ib2R5LnNldEF0dHJpYnV0ZShcbiAgICAgICdjb250ZW50ZWRpdGFibGUnLFxuICAgICAgZGlzYWJsZWQgPyAnZmFsc2UnIDogJ3RydWUnXG4gICAgKTtcbiAgfVxufVxuIl19