@firestitch/report 18.20.0 → 18.21.1

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.
@@ -1117,6 +1117,9 @@ export class ReportPptxService {
1117
1117
  ...(exported.rowSpan > 1 ? { rowspan: exported.rowSpan } : {}),
1118
1118
  ...(exported.bold ? { bold: true } : {}),
1119
1119
  ...(exported.numeric ? { align: 'right' } : {}),
1120
+ ...(exported.shade
1121
+ ? { fill: { color: exported.shade.background.replace('#', '') }, color: exported.shade.foreground.replace('#', '') }
1122
+ : {}),
1120
1123
  ...options,
1121
1124
  }, exported.numeric ? context.locale : undefined),
1122
1125
  });
@@ -1355,4 +1358,4 @@ function claimSlots(slots, cell) {
1355
1358
  slots[row].fill(claimed, cell.column, cell.column + colSpan);
1356
1359
  }
1357
1360
  }
1358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBwdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LXBwdHguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLFdBQVcsQ0FBQztBQWdCbkIsT0FBTyxFQUErQixXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFDakMsZUFBZSxFQUFFLFVBQVUsR0FDM0csTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxF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QU8sR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLE9BQU8sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sT0FBTyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakgsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDOUMsS0FBSyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3pELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGFMYWJlbHMgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0YS1sYWJlbHMuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydERhdGVMYWJlbCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1jaGFydC1kYXRlLWxhYmVsLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnRMaW5lU3R5bGUgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtbGluZS1zdHlsZS5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TWFya1N0YXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtbWFyay1zdGF0LmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0S3BpVHJlbmQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQta3BpLXRyZW5kLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0TGlzdENvbHVtbkZvcm1hdCB9IGZyb20gJy4uL2VudW1zL3JlcG9ydC1saXN0LWNvbHVtbi1mb3JtYXQuZW51bSc7XG5pbXBvcnQgeyBsYXllckZpbHRlckZpZWxkcyB9IGZyb20gJy4uL2ZpbHRlci10ZXh0JztcbmltcG9ydCB7XG4gIGF4aXNOdW1iZXJGb3JtYXQsXG4gIGNoYXJ0QXhpc0Zvcm1hdENvZGUsXG4gIGNoYXJ0VmFsdWVQZWFrLFxuICBoYXNOdW1iZXJGb3JtYXQsXG4gIG51bWJlckZvcm1hdENvZGUsXG4gIHJlc29sdmVDaGFydE51bWJlckZvcm1hdCxcbiAgcmVzb2x2ZVJlcG9ydFRpbWV6b25lLFxufSBmcm9tICcuLi9mb3JtYXQnO1xuaW1wb3J0IHtcbiAgQ2hhcnRDb25maWcsXG4gIENoYXJ0R3JhbnVsYXJpdHksXG4gIENoYXJ0TWVhc3VyZSxcbiAgQ2hhcnRWYWx1ZUF4aXMsXG4gIENvbXBvbmVudERhdGEsXG4gIExlZ2VuZFBvc2l0aW9uLFxuICBLcGlDb25maWcsXG4gIE51bWJlckZvcm1hdFNwZWMsXG4gIFJlcG9ydENvbXBvbmVudCxcbiAgUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgUmVwb3J0TG9jYWxlVGFnLFxuICBSZXBvcnRQYWdlLFxuICBXYXRlcmZhbGxTdGVwS2luZCxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXBvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEtwaUNhcmREZWx0YSwgS3BpQ2FyZFRhcmdldCwga3BpQ2FyZFZpZXcsIGtwaVNwYXJrbGluZUdlb21ldHJ5IH0gZnJvbSAnLi4va3BpLWNhcmQnO1xuaW1wb3J0IHsgREVGQVVMVF9DT01QT05FTlRfUEFERElORyB9IGZyb20gJy4uL2xheW91dCc7XG5pbXBvcnQgeyBsaXN0VG90YWxzTGFiZWxDb2x1bW4gfSBmcm9tICcuLi9saXN0LWNvbmZpZyc7XG5pbXBvcnQge1xuICBERUZBVUxUX1RFWFRfQ09MT1IsIERFRkFVTFRfVEVYVF9TSVpFLCBURVhUX1RBQkxFX0JPUkRFUl9DT0xPUiwgVEVYVF9UQUJMRV9CT1JERVJfV0lEVEgsIFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HLFxuICBUZXh0QmxvY2ssIFRleHRQYXJhZ3JhcGgsIFRleHRSdW4sIFRleHRUYWJsZSwgVGV4dFRhYmxlQ2VsbCwgVGV4dFRva2VuQ29udGV4dCwgYmxvY2tQYXJhZ3JhcGhzLCB0ZXh0QmxvY2tzLFxufSBmcm9tICcuLi90ZXh0JztcbmltcG9ydCB7IGlzRHJhd24gfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHtcbiAgY2F0ZWdvcnlBeGlzVGl0bGUsXG4gIGNoYXJ0RGF0ZUxhYmVsLFxuICBjaGFydFJlZmVyZW5jZXMsXG4gIGNvbG9yQnlWYWx1ZXMsXG4gIERyYXduUmVmZXJlbmNlLFxuICBkcmF3c1N0YXRMaW5lcyxcbiAgRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gIGV4dHJhY3RDaGFydFNlcmllcyxcbiAgZXh0cmFjdFdhdGVyZmFsbCxcbiAgZm9ybWF0UGVyaW9kTGFiZWwsXG4gIGlzQ29sb3JCeSxcbiAgbWVhc3VyZUxpbmVTdHlsZSxcbiAgbWVhc3VyZU1hcmtTdGF0LFxuICBQRVJDRU5UX0FYSVNfSU5URVJWQUwsXG4gIFBFUkNFTlRfQVhJU19NQVgsXG4gIHBlcmNlbnRBeGlzTWluLFxuICBQZXJjZW50U2hhcmVzLFxuICBwZXJjZW50U3RhY2tlZFNoYXJlcyxcbiAgcHJpb3JTZXJpZXNTdHlsZXMsXG4gIFJBTktfQVhJU19NSU4sXG4gIHJhbmtWYWx1ZUF4ZXMsXG4gIHJlZmVyZW5jZVBlYWssXG4gIHJlc29sdmVMZWdlbmRQb3NpdGlvbixcbiAgc2VyaWVzQXhpc0luZGV4ZXMsXG4gIHNlcmllc0hleCxcbiAgc2VyaWVzU3RhdCxcbiAgc2VyaWVzVHlwZXMsXG4gIHNwYW5zTXVsdGlwbGVZZWFycyxcbiAgU1RBVF9MQUJFTCxcbiAgVmFsdWVBeGlzSW5kZXgsXG4gIHZhbHVlQXhpc1JhbmdlLFxuICBXYXRlcmZhbGxTdGVwLFxufSBmcm9tICcuLi9vcHRpb24tYnVpbGRlcic7XG5pbXBvcnQge1xuICBSRVBPUlRfQ0hBUlRfQ09MT1JTLFxuICBSRVBPUlRfS1BJX0NIQU5HRV9DT0xPUlMsXG4gIFJFUE9SVF9LUElfU1BBUktMSU5FX0NPTE9SLFxuICBSRVBPUlRfS1BJX1RSQUNLX0NPTE9SLFxuICBSRVBPUlRfTVVURURfVEVYVF9DT0xPUixcbiAgUkVQT1JUX1JFRkVSRU5DRV9DT0xPUixcbiAgUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlMsXG59IGZyb20gJy4uL3RoZW1lL3BhbGV0dGUnO1xuaW1wb3J0IHtcbiAgQnVpbHRFeHBvcnQsIENvbGxlY3RlZENvbXBvbmVudCwgQ29sbGVjdGVkUmVwb3J0LCBIRUFERVJfRk9PVEVSX05BTUUsIEtwaUV4cG9ydEhlaWdodHMsIFRleHRPdmVyZmxvdywgY292ZXJMaW5lcyxcbiAgZW1wdHlMYWJlbCwgZXhwb3J0Q2VsbCwgZXhwb3J0Tm90ZUxpbmVzLCBleHBvcnRUaXRsZSwgZXhwb3J0V2luZG93c0xpbmUsIGlzRW1wdHlUaWxlLCBrcGlDYXJkSGFzRXh0cmFzLFxuICBrcGlFeHBvcnRIZWlnaHQsIGtwaUV4cG9ydFBhcnRzLCBsaXN0Q29sdW1ucywgbGlzdEhlYWRpbmdzLCBsaXN0VG90YWxzUm93LCBtb3JlUm93c05vdGljZSwgc2NhbGVkS3BpSGVpZ2h0cyxcbiAgdGV4dE92ZXJmbG93LFxufSBmcm9tICcuL3JlcG9ydC1leHBvcnQtY29sbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZEV4cG9ydENlbGwsIGdyaWRFeHBvcnRUYWJsZSB9IGZyb20gJy4vcmVwb3J0LWdyaWQtZXhwb3J0JztcbmltcG9ydCB7XG4gIE9WRVJGTE9XX1NMQUNLLCBSZXBvcnRUZXh0TGF5b3V0U2VydmljZSwgVGV4dEJsb2NrTGF5b3V0LCBUZXh0U2VnbWVudExheW91dCwgVGV4dFRhYmxlTGF5b3V0LFxufSBmcm9tICcuL3JlcG9ydC10ZXh0LWxheW91dC5zZXJ2aWNlJztcblxuXG4vLyBDb21wb25lbnQgdGl0bGUgc3RyaXAgaGVpZ2h0IG9uIHRoZSBzbGlkZSwgaW5jaGVzLlxuY29uc3QgVElUTEVfSCA9IDAuMjg7XG5cbi8vIFRoZSBzbWFsbCBwcmludCBhIGNvbXBvbmVudCBtYXkgY2FycnksIGluY2hlczogdGhlIGRheXMgaXQgcmVhZHMgdW5kZXIgaXRzXG4vLyB0aXRsZSAoYSBzdWJ0aXRsZSBsaW5lKSwgaXRzIG5vdGVzIGF0IHRoZSBmb290IG9mIGl0cyBib3ggKGEgbGluZSBlYWNoKSwgYW5kXG4vLyB0aGUgbGluZXMgb2YgYSBLUEkgY2FyZCB1bmRlciBpdHMgdmFsdWUuIEEgY2hhcnQncyBvciBhIGxpc3QncyBub3RlcyBnaXZlXG4vLyB3YXkgYmVmb3JlIGl0cyBib2R5IHdvdWxkIHNocmluayB1bmRlciBNSU5fQk9EWV9ILlxuY29uc3QgU01BTExfRk9OVF9TSVpFID0gODtcbmNvbnN0IFNVQlRJVExFX0ggPSAwLjE4O1xuY29uc3QgTk9URV9MSU5FX0ggPSAwLjE2O1xuY29uc3QgTUlOX0JPRFlfSCA9IDAuNjtcbmNvbnN0IE1VVEVEX0NPTE9SID0gUkVQT1JUX01VVEVEX1RFWFRfQ09MT1I7XG5cbi8vIEEgS1BJIGNhcmQncyBwYXJ0cywgdG9wIHRvIGJvdHRvbSwgaW5jaGVzIChrcGlFeHBvcnRQYXJ0cyBzaGVkcyB0aGVcbi8vIHNwYXJrbGluZSwgdGhlbiB0aGUgdGFyZ2V0LCB0aGVuIHRoZSBub3RlcyBvbiBhIHNob3J0IHRpbGUpLlxuY29uc3QgS1BJX1RBUkdFVF9URVhUX0ggPSAwLjE4O1xuY29uc3QgS1BJX0JBUl9HQVAgPSAwLjAyO1xuY29uc3QgS1BJX0JBUl9IID0gMC4wNTtcbmNvbnN0IEtQSV9IRUlHSFRTOiBLcGlFeHBvcnRIZWlnaHRzID0ge1xuICB2YWx1ZTogMC40OCxcbiAgbGFiZWw6IDAuMjIsXG4gIGRlbHRhOiAwLjIyLFxuICB3aW5kb3c6IDAuMTgsXG4gIHRhcmdldDogS1BJX1RBUkdFVF9URVhUX0ggKyBLUElfQkFSX0dBUCArIEtQSV9CQVJfSCArIDAuMDMsXG4gIHNwYXJrbGluZTogMC40MixcbiAgbm90ZTogTk9URV9MSU5FX0gsXG59O1xuLy8gVGhlIHNpemUgb2YgdGhlIGRlbHRhLCB3aW5kb3cgYW5kIHRhcmdldCBsaW5lcy5cbmNvbnN0IEtQSV9MSU5FX0ZPTlRfU0laRSA9IDk7XG4vLyBUaGUgZGVsdGEncyB0cmlhbmdsZTogaXRzIHNpZGUsIGFuZCB0aGUgZ2FwIGJlZm9yZSB0aGUgY2hhbmdlLlxuY29uc3QgS1BJX0FSUk9XID0gMC4wOTtcbmNvbnN0IEtQSV9BUlJPV19HQVAgPSAwLjA0O1xuLy8gQSBjaGFyYWN0ZXIncyBhdmVyYWdlIHdpZHRoIGFzIGEgc2hhcmUgb2YgaXRzIGZvbnQgc2l6ZSwgZm9yIHBsYWNpbmcgdGhlXG4vLyB0cmlhbmdsZSBiZXNpZGUgdGV4dCBQb3dlclBvaW50IGxheXMgb3V0LlxuY29uc3QgUFBUWF9DSEFSX1dJRFRIID0gMC40Mjtcbi8vIFRoZSB0YXJnZXQncyBwcm9ncmVzcyBiYXIsIGFuZCB0aGUgdHJhY2sgaXQgZmlsbHMuXG5jb25zdCBLUElfQkFSX1cgPSAxLjc7XG5jb25zdCBLUElfVFJBQ0tfQ09MT1IgPSBSRVBPUlRfS1BJX1RSQUNLX0NPTE9SO1xuLy8gVGhlIHNwYXJrbGluZSdzIHdpZGVzdCBib3gsIGFuZCBpdHMgc2VyaWVzIG5hbWUgaW4gdGhlIGRhdGEgc2hlZXQgd2hlbiB0aGVcbi8vIG1lYXN1cmUgaGFzIG5vIGxhYmVsLlxuY29uc3QgS1BJX1NQQVJLTElORV9XID0gMjtcbmNvbnN0IEtQSV9TUEFSS0xJTkVfTkFNRSA9ICdUcmVuZCc7XG5cbi8vIEEgcmFuayBheGlzIGRyYXduIHRvcC1kb3duIGtlZXBzIGl0cyBjYXRlZ29yeSBsYWJlbHMgdW5kZXIgdGhlIHBsb3Q6IGF0IHRoZVxuLy8gYXhpcydzIGhpZ2ggZW5kLCB3aGljaCBhIHJldmVyc2VkIGF4aXMgcHV0cyBhdCB0aGUgYm90dG9tLiBSYW5rcyB1cCB0byB0aGlzXG4vLyBtYW55IGFyZSBzdGVwcGVkIG9uZSBhdCBhIHRpbWUuXG5jb25zdCBQUFRYX1JBTktfQ0FURUdPUllfTEFCRUxfUE9TID0gJ2hpZ2gnO1xuY29uc3QgUFBUWF9SQU5LX1dIT0xFX1NURVBfUEVBSyA9IDEwO1xuY29uc3QgUFBUWF9SQU5LX0ZPUk1BVF9DT0RFID0gJzAnO1xuLy8gQXBwcm94aW1hdGUgdGFibGUgcm93IGhlaWdodCwgaW5jaGVzIOKAlCBkcml2ZXMgdGhlIHJvd3MtdGhhdC1maXQgY2FwLlxuY29uc3QgU0xJREVfUk9XX0ggPSAwLjI2O1xuXG4vLyBUaGUgc3BhY2VzIGEgdGFibGUncyBncm91cCBsYWJlbCBzdGVwcyBpbiBieSBwZXIgbGV2ZWw6IGEgY2VsbCdzIHRleHQgaXNcbi8vIHRoZSBvbmUgcGxhY2UgYSBzbGlkZSB0YWJsZSBpbmRlbnRzLlxuY29uc3QgR1JJRF9JTkRFTlQgPSAnXFx1MDBBMFxcdTAwQTBcXHUwMEEwJztcblxuLy8gUm93cyBmZXRjaGVkIGZvciBhIGxpc3QncyBzbGlkZSB0YWJsZS4gQSBzbGlkZSB0YWJsZSBuZXZlciBjb250aW51ZXMgb250b1xuLy8gYW5vdGhlciBzbGlkZSwgc28gdGhpcyBvbmx5IGhhcyB0byBjb3ZlciB0aGUgcm93cyBhIGJveCBjYW4gc2hvdzsgdGhlXG4vLyBtb3JlUm93c05vdGljZSgpIHJvdyBuYW1lcyB0aGUgcmVzdC5cbmV4cG9ydCBjb25zdCBQUFRYX0xJU1RfUk9XUyA9IDEwMDtcblxuLy8gT3VyIGxlZ2VuZCBwb3NpdGlvbnMgbWFwcGVkIHRvIHBwdHhnZW5qcydzIHNpbmdsZS1sZXR0ZXIgbGVnZW5kUG9zIGNvZGVzLlxuLy8gJ2hpZGRlbicgaGFzIG5vIHNsb3Qg4oCUIHNob3dMZWdlbmQgaXMgdHVybmVkIG9mZiBpbnN0ZWFkIOKAlCBzbyBpdCBmYWxscyBiYWNrXG4vLyB0byB0b3AuXG5jb25zdCBQUFRYX0xFR0VORF9QT1M6IFJlY29yZDxMZWdlbmRQb3NpdGlvbiwgJ3QnIHwgJ2InIHwgJ2wnIHwgJ3InPiA9IHtcbiAgdG9wOiAndCcsXG4gIGJvdHRvbTogJ2InLFxuICBsZWZ0OiAnbCcsXG4gIHJpZ2h0OiAncicsXG4gIGhpZGRlbjogJ3QnLFxufTtcblxuLy8gV2hhdCBhIHdhdGVyZmFsbCdzIHNlcmllcyBhcmUgY2FsbGVkIGluIFBvd2VyUG9pbnQncyBkYXRhIHNoZWV0IGFuZCBvbiBob3Zlci5cbi8vIFRoZSBsZWdlbmQgc3RheXMgb2ZmLCBhcyBpdCBkb2VzIG9uIHNjcmVlbiwgdW5sZXNzIHRoZSBjaGFydCBkcmF3c1xuLy8gcmVmZXJlbmNlcywgd2hpY2ggb25seSB0aGUgbGVnZW5kIGNhbiBuYW1lIGluIFBvd2VyUG9pbnQuXG5jb25zdCBXQVRFUkZBTExfU0VSSUVTX05BTUVTOiBSZWNvcmQ8V2F0ZXJmYWxsU3RlcEtpbmQsIHN0cmluZz4gPSB7XG4gIHJpc2U6ICdJbmNyZWFzZScsXG4gIGZhbGw6ICdEZWNyZWFzZScsXG4gIHRvdGFsOiAnVG90YWwnLFxufTtcblxuLy8gQSBudWxsIGlzIGEgcGVyaW9kIHdpdGggbm8gdmFsdWUuIFRoZSBzY3JlZW4gYnJlYWtzIHRoZSBsaW5lIHRoZXJlLCBhbmRcbi8vIHBwdHhnZW5qcydzIGRlZmF1bHQgKCdzcGFuJykgd291bGQgZHJhdyBzdHJhaWdodCBhY3Jvc3MgaXQuIFRoZSBzZXR0aW5nIGlzXG4vLyBjaGFydC1sZXZlbCwgc28gYSBjb21ibydzIGV2ZXJ5IHR5cGUgaW5oZXJpdHMgaXQgdGhyb3VnaCB0aGUgY2hhcnQgb3B0aW9ucy5cbmNvbnN0IEJMQU5LU19BU19HQVBTID0geyBkaXNwbGF5QmxhbmtzQXM6ICdnYXAnIH0gYXMgY29uc3Q7XG5cbi8vIFRoZSBheGlzIGxhYmVsIGFuZCB0aXRsZSBzaXplcyBldmVyeSBjaGFydCB3aXRoIGF4ZXMgc2hhcmVzLCB3aGljaGV2ZXIgYXhpc1xuLy8gdGhleSBsYW5kIG9uLlxuY29uc3QgQVhJU19GT05UX1NJWkVTID0geyBjYXRBeGlzTGFiZWxGb250U2l6ZTogOSwgdmFsQXhpc0xhYmVsRm9udFNpemU6IDksIHZhbEF4aXNUaXRsZUZvbnRTaXplOiAxMCB9IGFzIGNvbnN0O1xuXG4vLyBBIGxpbmUgc3R5bGUgYXMgUG93ZXJQb2ludCdzIHByZXNldCBkYXNoIChhOnByc3REYXNoKS4gcHB0eGdlbmpzIHdyaXRlcyBpdFxuLy8gb24gbGluZSBzZXJpZXMgb25seSwgc28gYW4gYXJlYSBpcyBuZXZlciBkYXNoZWQuXG5jb25zdCBQUFRYX0xJTkVfREFTSDogUmVjb3JkPFJlcG9ydENoYXJ0TGluZVN0eWxlLCBzdHJpbmc+ID0ge1xuICBbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuU29saWRdOiAnc29saWQnLFxuICBbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRGFzaGVkXTogJ2Rhc2gnLFxuICBbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRG90dGVkXTogJ3N5c0RvdCcsXG59O1xuXG4vLyBBIGxpbmUncyBtYXJrZXJzLCBhcyBvbiBzY3JlZW46IGEgZG90IHRoZSBzY3JlZW4ncyBzaXplIG9uIGVhY2ggcG9pbnQuXG5jb25zdCBQUFRYX0xJTkVfU1lNQk9MX1NJWkUgPSA2O1xuXG4vLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXM6IHdob2xlIHBlcmNlbnRhZ2VzLiBUaGUgc2hhcmVzIGFyZVxuLy8gcmF0aW9zLCBzbyAnMCUnIGlzIHJpZ2h0IHdoYXRldmVyIHRoZSByZXBvcnQncyBwZXJjZW50Rm9ybWF0LlxuY29uc3QgUFBUWF9QRVJDRU5UX0ZPUk1BVF9DT0RFID0gJzAlJztcblxuLy8gVGhlIHNpemUgb2YgYSBjaGFydCdzIGRhdGEgbGFiZWxzLCBhIHN0ZXAgdW5kZXIgdGhlIGF4aXMgbGFiZWxzLCBhcyBvblxuLy8gc2NyZWVuLlxuY29uc3QgUFBUWF9EQVRBX0xBQkVMX0ZPTlRfU0laRSA9IDg7XG5cbi8vIFRoZSBtb3N0IGNhdGVnb3JpZXMgYW4gJ2F1dG8nIGRhdGEtbGFiZWxlZCBjaGFydCBsYWJlbHMgaW4gUG93ZXJQb2ludCxcbi8vIHdoaWNoIGNhbm5vdCBoaWRlIHRoZSBsYWJlbHMgdGhhdCBvdmVybGFwOiBwYXN0IHRoaXMgbWFueSwgaXQgbGFiZWxzIG5vbmUuXG5leHBvcnQgY29uc3QgUFBUWF9BVVRPX0xBQkVMX01BWF9QT0lOVFMgPSAyNDtcblxuLy8gQSByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmUncyB3aWR0aCBpbiBwb2ludHM6IGEgaGFpcmxpbmUgYmVzaWRlIHRoZVxuLy8gc2VyaWVzLCBhcyBvbiBzY3JlZW4uXG5jb25zdCBQUFRYX0NPTlNUQU5UX0xJTkVfU0laRSA9IDE7XG5cbi8vIFdoYXQgdGhlIHVwcGVyIGVkZ2Ugb2YgYSByZWZlcmVuY2UgYmFuZCBpcyBjYWxsZWQgaW4gdGhlIGRhdGEgc2hlZXQgYW5kIHRoZVxuLy8gbGVnZW5kLCBhZnRlciB0aGUgYmFuZCdzIG93biBsYWJlbCBvbiBpdHMgbG93ZXIgZWRnZS5cbmNvbnN0IFBQVFhfQkFORF9VUFBFUl9TVUZGSVggPSAnICh1cHBlciknO1xuXG4vLyBXaGF0IHRoZSBleHBvcnQncyBvdmVyZmxvdyBnYXRlIHNheXMgdGhlIGRlY2sgZG9lcyB3aXRoIGEgdGV4dCBibG9jayB0aGF0XG4vLyBkb2VzIG5vdCBmaXQgaXRzIGJveC5cbmNvbnN0IFBQVFhfT1ZFUkZMT1dfTk9URSA9ICdJbiB0aGUgUG93ZXJQb2ludCBpdCBydW5zIHBhc3QgdGhlIGJvdHRvbSBvZiBpdHMgYm94LCBhbmQgdGFibGUgcm93cyBwYXN0IGl0IGFyZSAnXG4gICsgJ2xlZnQgb3V0Lic7XG5cbi8vIFRoZSBzaG9ydGVzdCB0ZXh0IGJveCBhIHRleHQgYmxvY2sncyB3b3JkcyBnZXQgYmV0d2VlbiBpdHMgdGFibGVzLCBpbmNoZXMsXG4vLyBob3dldmVyIGNsb3NlIHRoZSBjYW52YXMgc2V0cyB0aGVpciB0b3AgYW5kIGJvdHRvbS5cbmNvbnN0IFRFWFRfU0VHTUVOVF9NSU5fSCA9IDAuMDU7XG5cbi8vIEEgdGV4dCB0YWJsZSdzIGNlbGwgbWFyZ2lucywgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0LCBpbiBwb2ludHM6IHRoZVxuLy8gcGFkZGluZyBldmVyeSByZW5kZXJlciBkcmF3cyAoVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcpLiBwcHR4Z2VuanMgMy4xMiByZWFkc1xuLy8gYSBtYXJnaW4gbGlzdCBhcyBwb2ludHMgd2hlbiBpdHMgZmlyc3QgdmFsdWUgaXMgYXQgbGVhc3QgMSwgYW5kIGFzIGluY2hlc1xuLy8gb3RoZXJ3aXNlLlxuY29uc3QgVEVYVF9UQUJMRV9DRUxMX01BUkdJTiA9IFtcbiAgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcudmVydGljYWwsXG4gIFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HLmhvcml6b250YWwsXG4gIFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HLnZlcnRpY2FsLFxuICBURVhUX1RBQkxFX0NFTExfUEFERElORy5ob3Jpem9udGFsLFxuXTtcblxuLy8gV2hlcmUgdGhlIGxlZ2VuZCBvZiBhIGNoYXJ0IHdpdGggcmVmZXJlbmNlIG9yIHN0YXRpc3RpYyBsaW5lcyBzaXRzIHdoZW5cbi8vIHRoZSBjb25maWcgZG9lcyBub3QgcGluIGl0OiB0aGUgb25lIHBsYWNlIFBvd2VyUG9pbnQgbmFtZXMgdGhvc2UgbGluZXMuXG5jb25zdCBQUFRYX0NPTlNUQU5UX0xFR0VORDogTGVnZW5kUG9zaXRpb24gPSAndG9wJztcblxuLy8gT25lIG5hdGl2ZSBjaGFydCBzZXJpZXM6IGl0cyBuYW1lLCBpdHMgZmlsbCBhbmQgaXRzIHZhbHVlIHBlciBjYXRlZ29yeS4gQVxuLy8gbnVsbCBpcyBhIGJsYW5rIHBvaW50OiBhIGdhcCBpbiBldmVyeSBheGlzIGNoYXJ0LCBub3Qgb25seSB0aGUgd2F0ZXJmYWxsLFxuLy8gYW5kIGEgemVybyB3aGVyZSBiYXJzIHN0YWNrLlxuaW50ZXJmYWNlIFBwdHhDaGFydFNlcmllcyB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXTtcbn1cblxuLy8gT25lIG5hdGl2ZSBjaGFydCBvZiBhIFBvd2VyUG9pbnQgY2hhcnQ6IHRoZSB0eXBlIGl0IGRyYXdzLCB3aGljaCBvZiB0aGVcbi8vIGNoYXJ0IGRhdGEncyBzZXJpZXMgaXQgaG9sZHMgKGJ5IGluZGV4KSwgd2hldGhlciB0aGV5IHBsb3QgYWdhaW5zdCB0aGVcbi8vIHNlY29uZGFyeSB2YWx1ZSBheGlzLCBhbmQgdGhlIG9wdGlvbnMgbGFpZCBvdmVyIHRoZSBjaGFydCdzIGZvciBpdCBhbG9uZS5cbmludGVyZmFjZSBQcHR4RW50cnkge1xuICB0eXBlOiBzdHJpbmc7XG4gIGluZGV4ZXM6IG51bWJlcltdO1xuICBzZWNvbmRhcnk6IGJvb2xlYW47XG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBBIGxpbmUgUG93ZXJQb2ludCBkcmF3cyBhdCBvbmUgdmFsdWUgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSBwbG90LCBhcyBhXG4vLyBzZXJpZXMgb2YgaXRzIG93bjogYSByZWZlcmVuY2UgbGluZSwgb25lIGVkZ2Ugb2YgYSByZWZlcmVuY2UgYmFuZCwgb3IgYVxuLy8gbWVhc3VyZSdzIHN0YXRpc3RpYyBsaW5lLiBwcHR4Z2VuanMgaGFzIG5vIG1hcmtMaW5lIG9yIG1hcmtBcmVhLlxuaW50ZXJmYWNlIFBwdHhDb25zdGFudExpbmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIHNlY29uZGFyeTogYm9vbGVhbjtcbn1cblxuLy8gVGhlIG9wdGlvbnMgb2Ygb25lIHJ1biBvZiBQb3dlclBvaW50IHRleHQuIFBvd2VyUG9pbnQgcHJvb2ZzIGV2ZXJ5IHJ1biBpbiBpdHNcbi8vIGxhbmd1YWdlLCBhbmQgcHB0eGdlbmpzIHdyaXRlcyBlbi1VUyBmb3IgYSBydW4gdGhhdCBuYW1lcyBub25lLiBBIHJ1biB3aG9zZVxuLy8gd2hvbGUgdGV4dCBpcyBhIHZhbHVlIHdyaXR0ZW4gaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSAoYSBLUEkgdmFsdWUsIGEgZGF0ZVxuLy8gY2VsbCwgdGhlIGNvdmVyJ3MgZGF0ZSkgcGFzc2VzIHRoYXQgbG9jYWxlLCBzbyBhIEZyZW5jaCBkYXRlIGlzIG5vdCBtYXJrZWRcbi8vIGFzIG1pc3NwZWxsZWQgRW5nbGlzaC4gQXV0aG9yZWQgYW5kIGludGVyZmFjZSB0ZXh0ICh0aXRsZXMsIGxhYmVscyxcbi8vIGhlYWRpbmdzLCBmaWx0ZXIgbGluZXMsIG5vdGljZXMpIHBhc3NlcyBub25lIGFuZCBrZWVwcyB0aGUgZGVmYXVsdCwgc28gYW5cbi8vIEVuZ2xpc2ggdGl0bGUgaW4gYSBGcmVuY2ggcmVwb3J0IGlzIG5ldmVyIHByb29mZWQgYXMgRnJlbmNoLlxuZXhwb3J0IGZ1bmN0aW9uIHBwdHhSdW5PcHRpb25zKFxuICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgdmFsdWVMb2NhbGU/OiBSZXBvcnRMb2NhbGVUYWcsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2YWx1ZUxvY2FsZSA/IHsgLi4ub3B0aW9ucywgbGFuZzogdmFsdWVMb2NhbGUgfSA6IG9wdGlvbnM7XG59XG5cbi8vIEJ1aWxkcyB0aGUgUG93ZXJQb2ludCBkZWNrIGNsaWVudC1zaWRlIHdpdGggcHB0eGdlbmpzLiBDaGFydHMgYXJlIE5BVElWRVxuLy8gZWRpdGFibGUgUG93ZXJQb2ludCBjaGFydHMgKHNsaWRlLmFkZENoYXJ0IHdyaXRlcyByZWFsIGNoYXJ0IFhNTCB3aXRoIGFuXG4vLyBlbWJlZGRlZCBkYXRhIHdvcmtib29rIOKAlCBcIkVkaXQgRGF0YVwiIHdvcmtzKSwgbmV2ZXIgaW1hZ2VzLiBUaGUgcGFnZSBJUyB0aGVcbi8vIHNsaWRlOiB0aGUgcmVwb3J0J3MgdW5pdCBpcyBpbmNoZXMg4oCUIGV4YWN0bHkgUG93ZXJQb2ludCdzIHVuaXQg4oCUIHNvIHRoZVxuLy8gbGF5b3V0IGFuZCBldmVyeSBjb21wb25lbnQgcG9zaXRpb24gdHJhbnNmZXIgd2l0aCBubyBjb252ZXJzaW9uIGF0IGFsbC5cbi8vIHBwdHhnZW5qcyBpcyBsb2FkZWQgbGF6aWx5IHNvIGl0IGxpdmVzIGluIGl0cyBvd24gd2VicGFjayBjaHVuay5cbi8vXG4vLyBBIHRleHQgYmxvY2sncyB3b3JkcyBhbmQgdGFibGVzIGFyZSBwbGFjZWQgd2hlcmUgdGhlIGNhbnZhcyBsYXlzIHRoZW0gb3V0XG4vLyAoUmVwb3J0VGV4dExheW91dFNlcnZpY2UpLiBXb3JkcyB0aGF0IGRvIG5vdCBmaXQgYSBibG9jaydzIGJveCBydW4gb24gcGFzdFxuLy8gaXRzIGJvdHRvbSwgYW5kIHRhYmxlIHJvd3MgcGFzdCBpdCBhcmUgbGVmdCBvdXQsIHNvIGJ1aWxkKCkgaGFuZHMgdGhlIGRlY2tcbi8vIGJhY2sgdW5zYXZlZCB3aXRoIHRoZSBibG9ja3MgdGhhdCBkbyBub3QgZml0LCBhbmQgdGhlIGV4cG9ydCBjYW4gYXNrIGFib3V0XG4vLyB0aGVtIGJlZm9yZSBpdCBzYXZlcy5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvcnRQcHR4U2VydmljZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGV4dExheW91dCA9IGluamVjdChSZXBvcnRUZXh0TGF5b3V0U2VydmljZSk7XG5cbiAgcHVibGljIGFzeW5jIGJ1aWxkKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0KTogUHJvbWlzZTxCdWlsdEV4cG9ydD4ge1xuICAgIGNvbnN0IFBwdHhHZW5KUyA9IChhd2FpdCBpbXBvcnQoJ3BwdHhnZW5qcycpKS5kZWZhdWx0O1xuXG4gICAgY29uc3QgcmVwb3J0ID0gY29sbGVjdGVkLnJlcG9ydDtcbiAgICBjb25zdCBwYWdlVyA9IHJlcG9ydC5wYWdlV2lkdGg7XG4gICAgY29uc3QgcGFnZUggPSByZXBvcnQucGFnZUhlaWdodDtcblxuICAgIGNvbnN0IHBwdHggPSBuZXcgUHB0eEdlbkpTKCk7XG4gICAgcHB0eC5kZWZpbmVMYXlvdXQoeyBuYW1lOiAnUkVQT1JUJywgd2lkdGg6IHBhZ2VXLCBoZWlnaHQ6IHBhZ2VIIH0pO1xuICAgIHBwdHgubGF5b3V0ID0gJ1JFUE9SVCc7XG4gICAgcHB0eC50aXRsZSA9IHJlcG9ydC5uYW1lO1xuXG4gICAgdGhpcy5fdGl0bGVTbGlkZShwcHR4LCBjb2xsZWN0ZWQsIHBhZ2VXLCBwYWdlSCk7XG5cbiAgICAvLyBUaGUgdGV4dCBibG9ja3MgdGhhdCBkbyBub3QgZml0IHRoZWlyIGJveCwgYnkgY29tcG9uZW50IGlkLCBzbyBhIGhlYWRlclxuICAgIC8vIG9yIGZvb3RlciBibG9jayBpcyBsaXN0ZWQgb25jZSwgbm90IG9uY2UgcGVyIHNsaWRlLlxuICAgIGNvbnN0IG92ZXJmbG93cyA9IG5ldyBNYXA8bnVtYmVyLCBUZXh0T3ZlcmZsb3c+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGNvbGxlY3RlZC5wYWdlcy5rZXlzKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuX3JlbmRlclBhZ2UocHB0eCwgY29sbGVjdGVkLCBpbmRleCwgb3ZlcmZsb3dzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3ZlcmZsb3dzOiBbLi4ub3ZlcmZsb3dzLnZhbHVlcygpXSxcbiAgICAgIG92ZXJmbG93Tm90ZTogUFBUWF9PVkVSRkxPV19OT1RFLFxuICAgICAgLy8gQSBzbGlkZSdzIHNoYXBlcyBhcmUgbGFpZCBvdXQgYnkgUG93ZXJQb2ludCwgc28gYSBjb21wb25lbnQgY2Fubm90XG4gICAgICAvLyBmYWlsIHRvIGRyYXcgaGVyZSBhcyBhIFBERiB0YWJsZSBjYW4uXG4gICAgICB1bmRyYXduOiBbXSxcbiAgICAgIHNhdmU6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcHB0eC53cml0ZUZpbGUoeyBmaWxlTmFtZTogYCR7dGhpcy5fc2x1ZyhyZXBvcnQubmFtZSl9LnBwdHhgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gT25lIHJlcG9ydCBwYWdlJ3Mgc2xpZGUuIFRoZSBoZWFkZXIgYW5kIGZvb3RlciBmaXJzdCwgc28gdGhlIHBhZ2UncyBvd25cbiAgLy8gY29tcG9uZW50cyBzaXQgb24gdG9wIG9mIHRoZW0gZXhhY3RseSBhcyBvbiB0aGUgY2FudmFzLiBFYWNoIGxheWVyJ3MgdGV4dFxuICAvLyBmaWxscyBpdHMgdmFsdWUgdG9rZW5zIHdpdGggdGhhdCBsYXllcidzIHZhbHVlczogdGhlIG1hc3RlcidzIG9yIHRoZVxuICAvLyBwYWdlJ3MuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlclBhZ2UoXG4gICAgcHB0eDogYW55LFxuICAgIGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb3ZlcmZsb3dzOiBNYXA8bnVtYmVyLCBUZXh0T3ZlcmZsb3c+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXBvcnQgPSBjb2xsZWN0ZWQucmVwb3J0O1xuICAgIGNvbnN0IGNvbGxlY3RlZFBhZ2UgPSBjb2xsZWN0ZWQucGFnZXNbaW5kZXhdO1xuICAgIGNvbnN0IHNsaWRlID0gcHB0eC5hZGRTbGlkZSgpO1xuICAgIGNvbnN0IHRva2VucyA9IHRoaXMuX3Rva2Vucyhjb2xsZWN0ZWQsIGNvbGxlY3RlZFBhZ2UucGFnZSwgaW5kZXgpO1xuICAgIGNvbnN0IHBhZ2VUb2tlbnMgPSB7IC4uLnRva2VucywgdmFsdWVzOiBjb2xsZWN0ZWRQYWdlLnZhbHVlcyB9O1xuICAgIGNvbnN0IHRpbWV6b25lID0gcmVzb2x2ZVJlcG9ydFRpbWV6b25lKHJlcG9ydCk7XG5cbiAgICBpZiAoIWNvbGxlY3RlZFBhZ2UucGFnZS5tYXN0ZXJIaWRkZW4pIHtcbiAgICAgIGF3YWl0IHRoaXMuX3JlbmRlck1hc3RlcihzbGlkZSwgY29sbGVjdGVkLCB0b2tlbnMsIG92ZXJmbG93cyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3RlZFBhZ2UuY29tcG9uZW50cykge1xuICAgICAgaWYgKGl0ZW0uY29tcG9uZW50LnR5cGUgIT09ICd0ZXh0Jykge1xuICAgICAgICB0aGlzLl9yZW5kZXJDb21wb25lbnQocHB0eCwgc2xpZGUsIGl0ZW0sIHRva2VucywgdGltZXpvbmUsIGNvbGxlY3RlZC5mb3JtYXRDb250ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoYXdhaXQgdGhpcy5fcmVuZGVyVGV4dChzbGlkZSwgaXRlbS5jb21wb25lbnQsIHBhZ2VUb2tlbnMpKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZE92ZXJmbG93KG92ZXJmbG93cywgaXRlbS5jb21wb25lbnQsIHRva2Vucy5wYWdlTmFtZSwgcGFnZVRva2Vucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyLCB0aGVpciB2YWx1ZSB0b2tlbnMgZmlsbGVkIHdpdGggdGhlIG1hc3RlcidzXG4gIC8vIHZhbHVlcy4gVGhleSByZWFkIG5vIHBhZ2UgZmlsdGVyOiBpdHMgdG9rZW4gcHJpbnRzIHRoZSBlbSBkYXNoIHRoZXJlLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJNYXN0ZXIoXG4gICAgc2xpZGU6IGFueSxcbiAgICBjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCxcbiAgICB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQsXG4gICAgb3ZlcmZsb3dzOiBNYXA8bnVtYmVyLCBUZXh0T3ZlcmZsb3c+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtYXN0ZXJUb2tlbnMgPSB7XG4gICAgICAuLi50b2tlbnMsXG4gICAgICB2YWx1ZXM6IGNvbGxlY3RlZC5tYXN0ZXJWYWx1ZXMsXG4gICAgICBmaWx0ZXJzOiBsYXllckZpbHRlckZpZWxkcyhjb2xsZWN0ZWQuZmlsdGVyRmllbGRzLCBjb2xsZWN0ZWQucmVwb3J0LmZpbHRlckdyb3VwcyA/PyBbXSwgbnVsbCksXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIChjb2xsZWN0ZWQucmVwb3J0Lm1hc3Rlcj8uY29tcG9uZW50cyA/PyBbXSkuZmlsdGVyKGlzRHJhd24pKSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5fcmVuZGVyVGV4dChzbGlkZSwgY29tcG9uZW50LCBtYXN0ZXJUb2tlbnMpKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZE92ZXJmbG93KG92ZXJmbG93cywgY29tcG9uZW50LCBIRUFERVJfRk9PVEVSX05BTUUsIG1hc3RlclRva2Vucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTGlzdHMgYSB0ZXh0IGJsb2NrIHRoYXQgZG9lcyBub3QgZml0IGl0cyBib3gsIHVuZGVyIHRoZSBwYWdlIHRoZSBleHBvcnQnc1xuICAvLyBvdmVyZmxvdyBnYXRlIG5hbWVzIGl0IGJ5LiBBIGJsb2NrIGxpc3RlZCBvbiBhbiBlYXJsaWVyIHNsaWRlIChhIGhlYWRlciBvclxuICAvLyBmb290ZXIpIGtlZXBzIHRoYXQgZW50cnkuXG4gIHByaXZhdGUgX3JlY29yZE92ZXJmbG93KFxuICAgIG92ZXJmbG93czogTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PixcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBwYWdlOiBzdHJpbmcsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIW92ZXJmbG93cy5oYXMoY29tcG9uZW50LmlkKSkge1xuICAgICAgb3ZlcmZsb3dzLnNldChjb21wb25lbnQuaWQsIHRleHRPdmVyZmxvdyhjb21wb25lbnQsIHBhZ2UsIHRva2VucykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RpdGxlU2xpZGUocHB0eDogYW55LCBjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCwgcGFnZVc6IG51bWJlciwgcGFnZUg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHNsaWRlID0gcHB0eC5hZGRTbGlkZSgpO1xuXG4gICAgc2xpZGUuYWRkVGV4dChjb2xsZWN0ZWQucmVwb3J0Lm5hbWUsIHtcbiAgICAgIHg6IDAuNSwgeTogcGFnZUggKiAwLjMsIHc6IHBhZ2VXIC0gMSwgaDogMC44LFxuICAgICAgZm9udFNpemU6IDMwLCBib2xkOiB0cnVlLCBjb2xvcjogJzFGMjkzMycsXG4gICAgfSk7XG5cbiAgICAvLyBjb3ZlckxpbmVzKCkgbGVhZHMgd2l0aCB0aGUgZXhwb3J0IGRhdGUsIHRoZSBvbmUgbGluZSB3cml0dGVuIGluIHRoZVxuICAgIC8vIHJlcG9ydCdzIGxvY2FsZTsgdGhlIGZpbHRlciBhbmQgY29udGV4dCBsaW5lcyBhcmUgaW50ZXJmYWNlIHRleHQuXG4gICAgY29uc3QgbGluZXMgPSBjb3ZlckxpbmVzKGNvbGxlY3RlZCk7XG4gICAgY29uc3QgcnVucyA9IGxpbmVzLm1hcCgobGluZSwgaW5kZXgpID0+ICh7XG4gICAgICB0ZXh0OiBsaW5lLFxuICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoXG4gICAgICAgIHsgYnJlYWtMaW5lOiBpbmRleCA8IGxpbmVzLmxlbmd0aCAtIDEgfSxcbiAgICAgICAgaW5kZXggPT09IDAgPyBjb2xsZWN0ZWQuZm9ybWF0Q29udGV4dC5sb2NhbGUgOiB1bmRlZmluZWQsXG4gICAgICApLFxuICAgIH0pKTtcblxuICAgIHNsaWRlLmFkZFRleHQocnVucywge1xuICAgICAgeDogMC41LCB5OiBwYWdlSCAqIDAuMyArIDAuOSwgdzogcGFnZVcgLSAxLCBoOiBNYXRoLm1heCgwLjQsIGxpbmVzLmxlbmd0aCAqIDAuMjUpLFxuICAgICAgZm9udFNpemU6IDEyLCBjb2xvcjogJzUyNjA2RCcsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIHRleHQgYmxvY2sgYXMgbmF0aXZlIFBvd2VyUG9pbnQgdGV4dCwgZWRpdGFibGUgaW4gdGhlIGRlY2ssIGVhY2ggcnVuXG4gIC8vIGNhcnJ5aW5nIGl0cyBvd24gYm9sZC9pdGFsaWMvY29sb3Ivc2l6ZS4gVGhlIGJsb2NrIGlzIG1lYXN1cmVkIGFzIHRoZVxuICAvLyBjYW52YXMgbGF5cyBpdCBvdXQgKFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlKS4gQSBibG9jayB3aXRob3V0IGEgdGFibGUgaXNcbiAgLy8gT05FIHRleHQgYm94IChfYWRkVGV4dEJveCkuIEEgYmxvY2sgd2l0aCB0YWJsZXMgaXMgYSBzdGFjayBpbnNpZGUgaXRzXG4gIC8vIHBhZGRpbmcgKF9yZW5kZXJUZXh0U3RhY2spLiBSZXR1cm5zIHdoZXRoZXIgYW55dGhpbmcgcnVucyBwYXN0IHRoZSBib3R0b21cbiAgLy8gb2YgdGhlIGJveCBvciB3YXMgbGVmdCBvdXQuXG4gIHByaXZhdGUgYXN5bmMgX3JlbmRlclRleHQoc2xpZGU6IGFueSwgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsIHRva2VuczogVGV4dFRva2VuQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGh0bWwgPSBjb21wb25lbnQuY29uZmlnPy5odG1sID8/ICcnO1xuICAgIGNvbnN0IGJsb2NrcyA9IHRleHRCbG9ja3MoaHRtbCwgdG9rZW5zKTtcbiAgICBjb25zdCBsYXlvdXQgPSBhd2FpdCB0aGlzLl90ZXh0TGF5b3V0Lm1lYXN1cmUoY29tcG9uZW50LCB0b2tlbnMpO1xuICAgIGNvbnN0IHRleHRDb3VudCA9IGJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiBibG9jay5raW5kID09PSAndGV4dCcpLmxlbmd0aDtcbiAgICBjb25zdCB0YWJsZUNvdW50ID0gYmxvY2tzLmxlbmd0aCAtIHRleHRDb3VudDtcblxuICAgIC8vIFRoZSBtZWFzdXJlIGZpbmRzIGEgYmxvY2sncyBwYXJ0cyBvbmUgZm9yIG9uZSB3aXRoIHRleHRCbG9ja3MsIHVubGVzcyB0aGVcbiAgICAvLyBjYW52YXMgcmVuZGVyZWQgdGhlIGh0bWwgZGlmZmVyZW50bHkuIEEgYmxvY2sgd2hvc2UgcGFydHMgaXQgZGlkIG5vdFxuICAgIC8vIGZpbmQgZmFsbHMgYmFjayB0byB0aGUgb25lIHRleHQgYm94LCBpdHMgdGFibGVzIHJlYWQgYXMgbGluZXMgb2YgdGV4dC5cbiAgICBpZiAoIXRhYmxlQ291bnQgfHwgbGF5b3V0LnRhYmxlcy5sZW5ndGggIT09IHRhYmxlQ291bnQgfHwgbGF5b3V0LnNlZ21lbnRzLmxlbmd0aCAhPT0gdGV4dENvdW50KSB7XG4gICAgICB0aGlzLl9hZGRUZXh0Qm94KHNsaWRlLCBjb21wb25lbnQsIGJsb2NrUGFyYWdyYXBocyhibG9ja3MpKTtcblxuICAgICAgcmV0dXJuIGxheW91dC5vdmVyZmxvdztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyVGV4dFN0YWNrKHNsaWRlLCBjb21wb25lbnQsIGJsb2NrcywgbGF5b3V0KSB8fCBsYXlvdXQub3ZlcmZsb3c7XG4gIH1cblxuICAvLyBUaGUgd29yZHMgYXMgT05FIHRleHQgYm94IG92ZXIgdGhlIHdob2xlIGJsb2NrLiBJdHMgaW5zZXQgaXMgdGhlIGJsb2NrJ3NcbiAgLy8gcGFkZGluZywgc28gdGhlIHdvcmRzIGxhbmQgd2hlcmUgdGhleSBzYXQgb24gc2NyZWVuLlxuICBwcml2YXRlIF9hZGRUZXh0Qm94KHNsaWRlOiBhbnksIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCBwYXJhZ3JhcGhzOiBUZXh0UGFyYWdyYXBoW10pOiB2b2lkIHtcbiAgICBjb25zdCBydW5zID0gdGhpcy5fcGFyYWdyYXBoUnVucyhwYXJhZ3JhcGhzKTtcbiAgICBpZiAoIXJ1bnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFkZGluZyA9IGNvbXBvbmVudC5jb25maWc/LnBhZGRpbmc7XG4gICAgY29uc3QgaW5zZXQgPSAodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gKHZhbHVlID8/IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcpICogNzI7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHJ1bnMsIHtcbiAgICAgIHg6IGNvbXBvbmVudC54LCB5OiBjb21wb25lbnQueSwgdzogY29tcG9uZW50LncsIGg6IGNvbXBvbmVudC5oLFxuICAgICAgdmFsaWduOiAndG9wJyxcbiAgICAgIGZvbnRGYWNlOiAnQXJpYWwnLFxuICAgICAgbWFyZ2luOiBbaW5zZXQocGFkZGluZz8ubGVmdCksIGluc2V0KHBhZGRpbmc/LnJpZ2h0KSwgaW5zZXQocGFkZGluZz8uYm90dG9tKSwgaW5zZXQocGFkZGluZz8udG9wKV0sXG4gICAgICBmaXQ6ICdub25lJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgYmxvY2sgd2l0aCB0YWJsZXMgYXMgYSBzdGFjayBpbnNpZGUgaXRzIHBhZGRpbmc6IGEgdGV4dCBib3ggZm9yIHRoZVxuICAvLyB3b3JkcyBiZWZvcmUsIGJldHdlZW4gYW5kIGFmdGVyIGl0cyB0YWJsZXMsIGFuZCBhIG5hdGl2ZSB0YWJsZSBmb3IgZWFjaFxuICAvLyB0YWJsZSwgZWFjaCBhdCB0aGUgdG9wIHRoZSBjYW52YXMgZ2l2ZXMgaXQuIFBvd2VyUG9pbnQgc3BhY2VzIGxpbmVzIGFcbiAgLy8gbGl0dGxlIGRpZmZlcmVudGx5IGZyb20gdGhlIGNhbnZhcywgc28gcGxhY2luZyBldmVyeSBwYXJ0IGFmcmVzaCBrZWVwc1xuICAvLyB0aGF0IGRyaWZ0IGZyb20gYWRkaW5nIHVwIGRvd24gdGhlIGJsb2NrLiBSZXR1cm5zIHdoZXRoZXIgYW55IHBhcnQgd2FzXG4gIC8vIGxlZnQgb3V0LlxuICBwcml2YXRlIF9yZW5kZXJUZXh0U3RhY2soXG4gICAgc2xpZGU6IGFueSxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBibG9ja3M6IFRleHRCbG9ja1tdLFxuICAgIGxheW91dDogVGV4dEJsb2NrTGF5b3V0LFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBwYWRkaW5nID0gY29tcG9uZW50LmNvbmZpZz8ucGFkZGluZztcbiAgICBjb25zdCB4ID0gY29tcG9uZW50LnggKyAocGFkZGluZz8ubGVmdCA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKTtcbiAgICBjb25zdCB5ID0gY29tcG9uZW50LnkgKyAocGFkZGluZz8udG9wID8/IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcpO1xuICAgIGxldCBzZWdtZW50SW5kZXggPSAwO1xuICAgIGxldCB0YWJsZUluZGV4ID0gMDtcbiAgICBsZXQgZmxhZ2dlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MpIHtcbiAgICAgIGNvbnN0IGxlZnRPdXQgPSBibG9jay5raW5kID09PSAndGV4dCdcbiAgICAgICAgPyB0aGlzLl9hZGRUZXh0U2VnbWVudChzbGlkZSwgYmxvY2sucGFyYWdyYXBocywgbGF5b3V0LnNlZ21lbnRzW3NlZ21lbnRJbmRleCsrXSwgbGF5b3V0LCB4LCB5KVxuICAgICAgICA6IHRoaXMuX2FkZFRleHRUYWJsZShzbGlkZSwgYmxvY2sudGFibGUsIGxheW91dC50YWJsZXNbdGFibGVJbmRleCsrXSwgbGF5b3V0LCB4LCB5KTtcblxuICAgICAgZmxhZ2dlZCA9IGZsYWdnZWQgfHwgbGVmdE91dDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhZ2dlZDtcbiAgfVxuXG4gIC8vIFRoZSB3b3JkcyBiZXR3ZWVuIHR3byB0YWJsZXMgKG9yIGJlZm9yZSB0aGUgZmlyc3QsIG9yIGFmdGVyIHRoZSBsYXN0KSBhc1xuICAvLyBhIHRleHQgYm94IGZyb20gdGhlIHRvcCBvZiB0aGVpciBmaXJzdCBsaW5lIHRvIHRoZSBib3R0b20gb2YgdGhlaXIgbGFzdCxcbiAgLy8gYXMgd2lkZSBhcyB0aGUgYmxvY2sncyBjb250ZW50LiBBIHN0cmV0Y2ggdGhhdCBkcmF3cyBub3RoaW5nIGlzIHNraXBwZWQsXG4gIC8vIGFuZCBvbmUgdGhhdCBzdGFydHMgYmVsb3cgdGhlIGJveCBpcyBsZWZ0IG91dC4gUmV0dXJucyB3aGV0aGVyIGl0IHdhcy5cbiAgcHJpdmF0ZSBfYWRkVGV4dFNlZ21lbnQoXG4gICAgc2xpZGU6IGFueSxcbiAgICBwYXJhZ3JhcGhzOiBUZXh0UGFyYWdyYXBoW10sXG4gICAgc2VnbWVudDogVGV4dFNlZ21lbnRMYXlvdXQgfCBudWxsLFxuICAgIGxheW91dDogVGV4dEJsb2NrTGF5b3V0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXNlZ21lbnQgfHwgIXBhcmFncmFwaHMuc29tZSgocGFyYWdyYXBoKSA9PiBwYXJhZ3JhcGgucnVucy5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNlZ21lbnQudG9wID49IGxheW91dC5jb250ZW50SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX3BhcmFncmFwaFJ1bnMocGFyYWdyYXBocyksIHtcbiAgICAgIHgsIHk6IHkgKyBzZWdtZW50LnRvcCwgdzogbGF5b3V0LmNvbnRlbnRXaWR0aCwgaDogTWF0aC5tYXgoVEVYVF9TRUdNRU5UX01JTl9ILCBzZWdtZW50LmJvdHRvbSAtIHNlZ21lbnQudG9wKSxcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHZhbGlnbjogJ3RvcCcsXG4gICAgICBmb250RmFjZTogJ0FyaWFsJyxcbiAgICAgIGZpdDogJ25vbmUnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQSB0YWJsZSBhcyBhIG5hdGl2ZSwgZWRpdGFibGUgUG93ZXJQb2ludCB0YWJsZSB3aGVyZSB0aGUgY2FudmFzIHB1dHMgaXQsXG4gIC8vIGluIGl0cyBjb2x1bW4gd2lkdGhzIGFuZCByb3cgaGVpZ2h0cywgaW4gdGhlIG9uZSBsb29rIGV2ZXJ5IHJlbmRlcmVyXG4gIC8vIGRyYXdzIChURVhUX1RBQkxFXyogaW4gdGV4dC50cykuIE9ubHkgdGhlIHJvd3MgdGhhdCBlbmQgaW5zaWRlIHRoZSBib3ggYXJlXG4gIC8vIGtlcHQuIFJldHVybnMgd2hldGhlciBhbnkgcm93IHdhcyBsZWZ0IG91dC5cbiAgcHJpdmF0ZSBfYWRkVGV4dFRhYmxlKFxuICAgIHNsaWRlOiBhbnksXG4gICAgdGFibGU6IFRleHRUYWJsZSxcbiAgICB0YWJsZUxheW91dDogVGV4dFRhYmxlTGF5b3V0LFxuICAgIGxheW91dDogVGV4dEJsb2NrTGF5b3V0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXB0ID0gdGhpcy5fa2VwdFJvd3ModGFibGVMYXlvdXQsIGxheW91dC5jb250ZW50SGVpZ2h0KTtcblxuICAgIGlmIChrZXB0KSB7XG4gICAgICBzbGlkZS5hZGRUYWJsZSh0aGlzLl90YWJsZVJvd3ModGFibGUsIGtlcHQpLCB7XG4gICAgICAgIHg6IHggKyB0YWJsZUxheW91dC5sZWZ0LFxuICAgICAgICB5OiB5ICsgdGFibGVMYXlvdXQudG9wLFxuICAgICAgICB3OiB0YWJsZUxheW91dC53aWR0aCxcbiAgICAgICAgY29sVzogdGFibGVMYXlvdXQuY29sdW1uV2lkdGhzLFxuICAgICAgICByb3dIOiB0YWJsZUxheW91dC5yb3dIZWlnaHRzLnNsaWNlKDAsIGtlcHQpLFxuICAgICAgICBhdXRvUGFnZTogZmFsc2UsXG4gICAgICAgIGZvbnRGYWNlOiAnQXJpYWwnLFxuICAgICAgICBmb250U2l6ZTogREVGQVVMVF9URVhUX1NJWkUsXG4gICAgICAgIGNvbG9yOiBERUZBVUxUX1RFWFRfQ09MT1IucmVwbGFjZSgnIycsICcnKSxcbiAgICAgICAgYm9yZGVyOiB7IHR5cGU6ICdzb2xpZCcsIHB0OiBURVhUX1RBQkxFX0JPUkRFUl9XSURUSCwgY29sb3I6IFRFWFRfVEFCTEVfQk9SREVSX0NPTE9SLnJlcGxhY2UoJyMnLCAnJykgfSxcbiAgICAgICAgbWFyZ2luOiBURVhUX1RBQkxFX0NFTExfTUFSR0lOLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtlcHQgPCB0YWJsZS5yb3dzLmxlbmd0aDtcbiAgfVxuXG4gIC8vIEhvdyBtYW55IG9mIGEgdGFibGUncyByb3dzLCBmcm9tIHRoZSB0b3AsIGVuZCBpbnNpZGUgdGhlIGJveC5cbiAgcHJpdmF0ZSBfa2VwdFJvd3ModGFibGVMYXlvdXQ6IFRleHRUYWJsZUxheW91dCwgY29udGVudEhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgYm90dG9tID0gdGFibGVMYXlvdXQudG9wO1xuICAgIGxldCBrZXB0ID0gMDtcblxuICAgIGZvciAoY29uc3Qgcm93SGVpZ2h0IG9mIHRhYmxlTGF5b3V0LnJvd0hlaWdodHMpIHtcbiAgICAgIGJvdHRvbSArPSByb3dIZWlnaHQ7XG4gICAgICBpZiAoYm90dG9tID4gY29udGVudEhlaWdodCArIE9WRVJGTE9XX1NMQUNLKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBrZXB0Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtlcHQ7XG4gIH1cblxuICAvLyBUaGUga2VwdCByb3dzIGFzIHBwdHhnZW5qcyBjZWxscywgZWFjaCByb3cgaW4gZ3JpZCBvcmRlci4gQSBQb3dlclBvaW50XG4gIC8vIHRhYmxlIGlzIGEgZnVsbCBncmlkLCBhbmQgcHB0eGdlbmpzIGNvdW50cyBpdHMgY29sdW1ucyBvbiB0aGUgZmlyc3Qgcm93XG4gIC8vIGFuZCBzbGlwcyBhIG1lcmdlZCBjZWxsJ3MgY29udGludWF0aW9uIGludG8gdGhlIHJvdyBiZWxvdyBhdCB0aGF0IGNlbGwnc1xuICAvLyBwbGFjZSBpbiBpdHMgb3duIHJvdy4gU28gYSBjZWxsIGlzIHdyaXR0ZW4gaW4gaXRzIHRvcCBsZWZ0IHNsb3Qgb25seSwgYVxuICAvLyBzbG90IG5vIGNlbGwgaG9sZHMgZ2V0cyBhbiBlbXB0eSBjZWxsLCBhbmQgYSBjZWxsJ3Mgc3BhbnMgZW5kIHdoZXJlIHRoZXlcbiAgLy8gd291bGQgcmVhY2ggcGFzdCB0aGUga2VwdCByb3dzIG9yIGludG8gYSBzbG90IGFub3RoZXIgY2VsbCBob2xkc1xuICAvLyAoY2xhaW1TbG90cykuXG4gIHByaXZhdGUgX3RhYmxlUm93cyh0YWJsZTogVGV4dFRhYmxlLCBrZXB0OiBudW1iZXIpOiBhbnlbXVtdIHtcbiAgICBjb25zdCBzbG90czogKFRleHRUYWJsZUNlbGwgfCBudWxsKVtdW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBrZXB0IH0sICgpID0+IEFycmF5KHRhYmxlLmNvbHVtbnMpLmZpbGwobnVsbCkpO1xuICAgIHRhYmxlLnJvd3Muc2xpY2UoMCwga2VwdCkuZm9yRWFjaCgocm93KSA9PiByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4gY2xhaW1TbG90cyhzbG90cywgY2VsbCkpKTtcblxuICAgIHJldHVybiBzbG90cy5tYXAoKHJvdywgcm93SW5kZXgpID0+IHJvdy5mbGF0TWFwKChjZWxsLCBjb2x1bW4pID0+IHtcbiAgICAgIGlmICghY2VsbCkge1xuICAgICAgICByZXR1cm4gW3sgdGV4dDogJycgfV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjZWxsLnJvdyA9PT0gcm93SW5kZXggJiYgY2VsbC5jb2x1bW4gPT09IGNvbHVtbiA/IFt0aGlzLl90YWJsZUNlbGwoY2VsbCldIDogW107XG4gICAgfSkpO1xuICB9XG5cbiAgLy8gQSB0ZXh0IHRhYmxlJ3MgY2VsbDogaXRzIHdvcmRzLCBpdHMgc3BhbnMsIGl0cyBmaWxsIGFuZCBpdHMgYWxpZ25tZW50LiBBXG4gIC8vIGhlYWRlciBjZWxsJ3MgcnVucyBhcmUgYWxyZWFkeSBib2xkIChwYXJzZVRhYmxlKSwgc28gYSBydW4gaXRzIGh0bWwgc2V0c1xuICAvLyBpbiBhIG5vcm1hbCB3ZWlnaHQgc3RheXMgdGhhdCB3YXkuXG4gIHByaXZhdGUgX3RhYmxlQ2VsbChjZWxsOiBUZXh0VGFibGVDZWxsKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHJ1bnMgPSB0aGlzLl9wYXJhZ3JhcGhSdW5zKGNlbGwucGFyYWdyYXBocyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gQW4gZW1wdHkgY2VsbCBzdGlsbCBuZWVkcyBpdHMgb25lIGVtcHR5IHBhcmFncmFwaC5cbiAgICAgIHRleHQ6IHJ1bnMubGVuZ3RoID8gcnVucyA6ICcnLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjb2xzcGFuOiBjZWxsLmNvbFNwYW4sXG4gICAgICAgIHJvd3NwYW46IGNlbGwucm93U3BhbixcbiAgICAgICAgZmlsbDogY2VsbC5maWxsID8geyBjb2xvcjogY2VsbC5maWxsLnJlcGxhY2UoJyMnLCAnJykgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgYWxpZ246IGNlbGwuYWxpZ24sXG4gICAgICAgIHZhbGlnbjogY2VsbC52YWxpZ24gPz8gJ21pZGRsZScsXG4gICAgICAgIG1hcmdpbjogVEVYVF9UQUJMRV9DRUxMX01BUkdJTixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFBhcmFncmFwaHMgYXMgdGhlIHJ1bnMgb2Ygb25lIG5hdGl2ZSB0ZXh0IGJvZHksIGVhY2ggcnVuIGluIGl0cyBvd25cbiAgLy8gc3R5bGUsIGEgbGluZSBicmVhayBhZnRlciBlYWNoIHBhcmFncmFwaCBidXQgdGhlIGxhc3QuIEFuIGVtcHR5IHBhcmFncmFwaFxuICAvLyBpcyBhIGJsYW5rIGxpbmUuIFRleHQgYm94ZXMgYW5kIHRhYmxlIGNlbGxzIHRha2UgdGhlIHNhbWUgcnVucy5cbiAgcHJpdmF0ZSBfcGFyYWdyYXBoUnVucyhwYXJhZ3JhcGhzOiBUZXh0UGFyYWdyYXBoW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIHBhcmFncmFwaHMuZmxhdE1hcCgocGFyYWdyYXBoLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPT09IHBhcmFncmFwaHMubGVuZ3RoIC0gMTtcbiAgICAgIGNvbnN0IHBhcmFncmFwaE9wdGlvbnMgPSB7XG4gICAgICAgIGFsaWduOiBwYXJhZ3JhcGguYWxpZ24sXG4gICAgICAgIGJ1bGxldDogcGFyYWdyYXBoLmJ1bGxldCA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IHsgdHlwZTogJ251bWJlcicgfVxuICAgICAgICAgIDogKHBhcmFncmFwaC5idWxsZXQgPT09ICdidWxsZXQnID8gdHJ1ZSA6IHVuZGVmaW5lZCksXG4gICAgICB9O1xuICAgICAgY29uc3QgcnVuczogVGV4dFJ1bltdID0gcGFyYWdyYXBoLnJ1bnMubGVuZ3RoID8gcGFyYWdyYXBoLnJ1bnMgOiBbeyB0ZXh0OiAnJyB9XTtcblxuICAgICAgcmV0dXJuIHJ1bnMubWFwKChydW4sIHJ1bkluZGV4KSA9PiAoe1xuICAgICAgICB0ZXh0OiBydW4udGV4dCxcbiAgICAgICAgb3B0aW9uczogdGhpcy5fcnVuT3B0aW9ucyhydW4sIHBhcmFncmFwaE9wdGlvbnMsIHJ1bkluZGV4ID09PSBydW5zLmxlbmd0aCAtIDEgJiYgIWlzTGFzdCksXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBPbmUgcnVuJ3Mgb3B0aW9uczogaXRzIG93biBzdHlsZSBvdmVyIGl0cyBwYXJhZ3JhcGgncyBhbGlnbm1lbnQgYW5kXG4gIC8vIGJ1bGxldCwgYW5kIGEgbGluZSBicmVhayB3aGVuIGl0IGVuZHMgYSBwYXJhZ3JhcGggdGhhdCBpcyBub3QgdGhlIGxhc3QuXG4gIHByaXZhdGUgX3J1bk9wdGlvbnMoXG4gICAgcnVuOiBUZXh0UnVuLFxuICAgIHBhcmFncmFwaE9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGJyZWFrTGluZTogYm9vbGVhbixcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJhZ3JhcGhPcHRpb25zLFxuICAgICAgYm9sZDogcnVuLmJvbGQsXG4gICAgICBpdGFsaWM6IHJ1bi5pdGFsaWMsXG4gICAgICB1bmRlcmxpbmU6IHJ1bi51bmRlcmxpbmUgPyB7IHN0eWxlOiAnc25nJyB9IDogdW5kZWZpbmVkLFxuICAgICAgc3RyaWtlOiBydW4uc3RyaWtlID8gJ3NuZ1N0cmlrZScgOiB1bmRlZmluZWQsXG4gICAgICBjb2xvcjogKHJ1bi5jb2xvciA/PyBERUZBVUxUX1RFWFRfQ09MT1IpLnJlcGxhY2UoJyMnLCAnJyksXG4gICAgICBoaWdobGlnaHQ6IHJ1bi5oaWdobGlnaHQ/LnJlcGxhY2UoJyMnLCAnJyksXG4gICAgICBmb250U2l6ZTogcnVuLmZvbnRTaXplID8/IERFRkFVTFRfVEVYVF9TSVpFLFxuICAgICAgZm9udEZhY2U6IHJ1bi5mb250RmFjZSxcbiAgICAgIGh5cGVybGluazogcnVuLmxpbmsgPyB7IHVybDogcnVuLmxpbmsgfSA6IHVuZGVmaW5lZCxcbiAgICAgIGJyZWFrTGluZSxcbiAgICB9O1xuICB9XG5cbiAgLy8gV2hhdCB0aGUgdG9rZW5zIG9mIGEgdGV4dCBibG9jayBhbmQgb2YgYSB0aWxlJ3MgdGl0bGUgZmlsbCB3aXRoIG9uIHRoaXNcbiAgLy8gc2xpZGU6IHRoZSBwYWdlJ3MgcG9zaXRpb24gYW1vbmcgdGhlIHJlcG9ydCdzIHBhZ2VzIOKAlCB0aGUgdGl0bGUgc2xpZGUgaXNcbiAgLy8gbm90IGEgcmVwb3J0IHBhZ2Ug4oCUIGFuZCB0aGUgcmVwb3J0J3MgZmlsdGVycyB3aXRoIHRoZSBwYWdlJ3Mgb3duIHBhZ2VcbiAgLy8gZmlsdGVycyAobGF5ZXJGaWx0ZXJGaWVsZHMpLlxuICBwcml2YXRlIF90b2tlbnMoY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsIHBhZ2U6IFJlcG9ydFBhZ2UsIGluZGV4OiBudW1iZXIpOiBUZXh0VG9rZW5Db250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZU51bWJlcjogaW5kZXggKyAxLFxuICAgICAgcGFnZU5hbWU6IHBhZ2UubmFtZSB8fCBgUGFnZSAke2luZGV4ICsgMX1gLFxuICAgICAgcmVwb3J0TmFtZTogY29sbGVjdGVkLnJlcG9ydC5uYW1lLFxuICAgICAgZmlsdGVyczogbGF5ZXJGaWx0ZXJGaWVsZHMoY29sbGVjdGVkLmZpbHRlckZpZWxkcywgY29sbGVjdGVkLnJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10sIHBhZ2UuaWQpLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHRpbGUgb24gaXRzIHNsaWRlLCBpdHMgdGl0bGUncyB0b2tlbnMgZmlsbGVkIHdpdGggdGhlIHNsaWRlJ3MgcGFnZS5cbiAgcHJpdmF0ZSBfcmVuZGVyQ29tcG9uZW50KFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQsXG4gICAgdGltZXpvbmU6IHN0cmluZyxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBpdGVtLmNvbXBvbmVudDtcbiAgICAvLyBHZW9tZXRyeSBpcyBpbiBpbmNoZXMg4oCUIFBvd2VyUG9pbnQncyBuYXRpdmUgdW5pdC5cbiAgICBjb25zdCB7IHgsIHksIHcsIGggfSA9IGNvbXBvbmVudDtcblxuICAgIGNvbnN0IHRpdGxlID0gZXhwb3J0VGl0bGUoY29tcG9uZW50LCB0b2tlbnMsIGl0ZW0uc2VhcmNoLCBpdGVtLmNydW1icywgaXRlbS5maWx0ZXJlZCk7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KHRpdGxlLCB7XG4gICAgICAgIHgsIHksIHcsIGg6IFRJVExFX0gsXG4gICAgICAgIGZvbnRTaXplOiAxMCwgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnLCB2YWxpZ246ICd0b3AnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQSBjaGFydCBvciBsaXN0IHRoYXQgY29tcGFyZXMgb3IgaGFzIGEgdGltZWZyYW1lIG5hbWVzIGl0cyBkYXlzIHVuZGVyXG4gICAgLy8gdGhlIHRpdGxlLCBhbmQgaXRzIG5vdGVzIHNpdCBhdCB0aGUgZm9vdCBvZiBpdHMgYm94OyBhIEtQSSBjYXJkIGRyYXdzXG4gICAgLy8gYm90aCBpdHNlbGYuIE5laXRoZXIgdGFrZXMgcm9vbSBmcm9tIGEgY29tcG9uZW50IHdpdGhvdXQgdGhvc2Uga2V5cy5cbiAgICBjb25zdCBzdWJ0aXRsZSA9IGV4cG9ydFdpbmRvd3NMaW5lKGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0LmxvY2FsZSk7XG4gICAgY29uc3Qgbm90ZXMgPSBjb21wb25lbnQudHlwZSA9PT0gJ2twaScgPyBbXSA6IGV4cG9ydE5vdGVMaW5lcyhpdGVtLCB0aW1lem9uZSwgY29udGV4dC5sb2NhbGUpO1xuICAgIGNvbnN0IHRvcCA9IHkgKyBUSVRMRV9IICsgKHN1YnRpdGxlID8gU1VCVElUTEVfSCA6IDApO1xuICAgIGNvbnN0IHJvb20gPSBNYXRoLm1heCgwLjMsIHkgKyBoIC0gdG9wKTtcbiAgICBjb25zdCBrZXB0ID0gbm90ZXMuc2xpY2UoMCwgTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigocm9vbSAtIE1JTl9CT0RZX0gpIC8gTk9URV9MSU5FX0gpKSk7XG5cbiAgICBpZiAoc3VidGl0bGUpIHtcbiAgICAgIHNsaWRlLmFkZFRleHQodGhpcy5fZml0RXN0aW1hdGUoc3VidGl0bGUsIFNNQUxMX0ZPTlRfU0laRSwgdyksIHtcbiAgICAgICAgeCwgeTogeSArIFRJVExFX0gsIHcsIGg6IFNVQlRJVExFX0gsXG4gICAgICAgIGZvbnRTaXplOiBTTUFMTF9GT05UX1NJWkUsIGNvbG9yOiBNVVRFRF9DT0xPUiwgdmFsaWduOiAndG9wJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHlZID0gdG9wO1xuICAgIGNvbnN0IGJvZHlIID0gTWF0aC5tYXgoMC4zLCByb29tIC0ga2VwdC5sZW5ndGggKiBOT1RFX0xJTkVfSCk7XG5cbiAgICBpZiAoa2VwdC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5vdGVMaW5lcyA9IGtlcHQubWFwKChub3RlKSA9PiB0aGlzLl9maXRFc3RpbWF0ZShub3RlLCBTTUFMTF9GT05UX1NJWkUsIHcpKTtcblxuICAgICAgc2xpZGUuYWRkVGV4dCh0aGlzLl9saW5lUnVucyhub3RlTGluZXMsIHsgaXRhbGljOiB0cnVlIH0pLCB7XG4gICAgICAgIHgsIHk6IGJvZHlZICsgYm9keUgsIHcsIGg6IGtlcHQubGVuZ3RoICogTk9URV9MSU5FX0gsXG4gICAgICAgIGZvbnRTaXplOiBTTUFMTF9GT05UX1NJWkUsIGNvbG9yOiBNVVRFRF9DT0xPUiwgdmFsaWduOiAndG9wJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghaXRlbS5kYXRhIHx8IGlzRW1wdHlUaWxlKGl0ZW0pKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KGVtcHR5TGFiZWwoaXRlbSksIHtcbiAgICAgICAgeCwgeTogYm9keVksIHcsIGg6IGJvZHlILFxuICAgICAgICBmb250U2l6ZTogMTAsIGl0YWxpYzogdHJ1ZSwgY29sb3I6IE1VVEVEX0NPTE9SLCBhbGlnbjogJ2NlbnRlcicsIHZhbGlnbjogJ21pZGRsZScsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29tcG9uZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NoYXJ0JzpcbiAgICAgICAgdGhpcy5fcmVuZGVyQ2hhcnQocHB0eCwgc2xpZGUsIGNvbXBvbmVudCwgaXRlbS5kYXRhLCBjb250ZXh0LCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICB0aGlzLl9yZW5kZXJUYWJsZShzbGlkZSwgY29tcG9uZW50LCBpdGVtLmRhdGEsIGl0ZW0uaGlkZGVuQ29sdW1ucywgdGltZXpvbmUsIGNvbnRleHQsIHgsIGJvZHlZLCB3LCBib2R5SCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JpZCc6XG4gICAgICAgIHRoaXMuX3JlbmRlckdyaWRUYWJsZShzbGlkZSwgaXRlbSwgY29udGV4dCwgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdrcGknOlxuICAgICAgICB0aGlzLl9yZW5kZXJLcGkocHB0eCwgc2xpZGUsIGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0LCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBMaW5lcyBvZiBvbmUgdGV4dCBib3gsIGVhY2ggaXRzIG93biBwYXJhZ3JhcGguXG4gIHByaXZhdGUgX2xpbmVSdW5zKGxpbmVzOiByZWFkb25seSBzdHJpbmdbXSwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IGFueVtdIHtcbiAgICByZXR1cm4gbGluZXMubWFwKChsaW5lLCBpbmRleCkgPT4gKHsgdGV4dDogbGluZSwgb3B0aW9uczogeyAuLi5vcHRpb25zLCBicmVha0xpbmU6IGluZGV4IDwgbGluZXMubGVuZ3RoIC0gMSB9IH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckNoYXJ0KFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gICAgY29uc3QgY2hhcnRUeXBlID0gY29uZmlnLmNoYXJ0VHlwZSA/PyAnYmFyJztcblxuICAgIGlmIChjaGFydFR5cGUgPT09ICd3YXRlcmZhbGwnKSB7XG4gICAgICB0aGlzLl9yZW5kZXJXYXRlcmZhbGwocHB0eCwgc2xpZGUsIGNvbXBvbmVudCwgZGF0YSwgY29udGV4dCwgeCwgeSwgdywgaCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHRyYWN0ZWQgPSBleHRyYWN0Q2hhcnRTZXJpZXMoY29tcG9uZW50LCBkYXRhKTtcblxuICAgIGNvbnN0IHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBiYXI6IHBwdHguQ2hhcnRUeXBlLmJhcixcbiAgICAgIGxpbmU6IHBwdHguQ2hhcnRUeXBlLmxpbmUsXG4gICAgICBhcmVhOiBwcHR4LkNoYXJ0VHlwZS5hcmVhLFxuICAgICAgcGllOiBwcHR4LkNoYXJ0VHlwZS5waWUsXG4gICAgICBkb251dDogcHB0eC5DaGFydFR5cGUuZG91Z2hudXQsXG4gICAgfTtcblxuICAgIGNvbnN0IHBpZSA9IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnO1xuICAgIGNvbnN0IGNvbG9yQnkgPSBpc0NvbG9yQnkoY29uZmlnKTtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLl9jYXRlZ29yeUxhYmVscyhcbiAgICAgIGV4dHJhY3RlZC5jYXRlZ29yaWVzLFxuICAgICAgZGF0YS5ncmFudWxhcml0eSxcbiAgICAgIGNvbnRleHQubG9jYWxlLFxuICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICApO1xuICAgIC8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgcHJpbWFyeSBiYXJzIGFuZCBhcmVhcyBwbG90IHRoZSBzaGFyZXMgdGhlIHNjcmVlblxuICAgIC8vIGRyYXdzLCBzdGFja2VkOiBQb3dlclBvaW50J3Mgb3duIHBlcmNlbnRTdGFja2VkIGdyb3VwaW5nIGlzIGRyb3BwZWQgb24gYW5cbiAgICAvLyBhcmVhIGNoYXJ0LCBzbyBvbmUgcnVsZSBjb3ZlcnMgYm90aC4gVGhlIGRhdGEgc2hlZXQgaG9sZHMgdGhlIHNoYXJlcztcbiAgICAvLyB0aGUgQ1NWIGtlZXBzIHRoZSByYXcgdmFsdWVzLlxuICAgIGNvbnN0IHNoYXJlcyA9IHBlcmNlbnRTdGFja2VkU2hhcmVzKGV4dHJhY3RlZCwgY29uZmlnKTtcblxuICAgIC8vIE5hdGl2ZSBjaGFydCBkYXRhOiBvbmUgZW50cnkgcGVyIHNlcmllcyAocGllIGNoYXJ0cyB0YWtlIGV4YWN0bHkgb25lKS5cbiAgICAvLyBjb2xvckJ5IGVtaXRzIG9uZSBzZXJpZXMgcGVyIGNhdGVnb3J5IGZvciB0aGUgb24tc2NyZWVuIG92ZXJsYXA7IFBvd2VyUG9pbnRcbiAgICAvLyBoYXMgbm8gZXF1aXZhbGVudCBvdmVybGFwLCBzbyBjb2xsYXBzZSB0aGVtIGJhY2sgaW50byBhIHNpbmdsZSBzZXJpZXMgKGVhY2hcbiAgICAvLyBjYXRlZ29yeSdzIHZhbHVlIHNpdHMgYXQgaXRzIG93biBzbG90KSDigJQgb25lIGZ1bGwtd2lkdGggYmFyIHBlciBjYXRlZ29yeSDigJRcbiAgICAvLyByYXRoZXIgdGhhbiBsZXR0aW5nIFBvd2VyUG9pbnQgY2x1c3RlciB0aGVtIGludG8gc2xpdmVycy5cbiAgICBjb25zdCBtZWFzdXJlRGF0YSA9IGNvbG9yQnlcbiAgICAgID8gW3tcbiAgICAgICAgbmFtZTogY29uZmlnLm1lYXN1cmVzPy5bMF0/LmxhYmVsID8/IGNvbmZpZy5jb2xvckJ5Py5sYWJlbCA/PyAnJyxcbiAgICAgICAgbGFiZWxzLFxuICAgICAgICB2YWx1ZXM6IGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkKSxcbiAgICAgIH1dXG4gICAgICA6IChwaWUgPyBleHRyYWN0ZWQuc2VyaWVzLnNsaWNlKDAsIDEpIDogZXh0cmFjdGVkLnNlcmllcylcbiAgICAgICAgLm1hcCgoc2VyaWVzLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzZXJpZXMubmFtZSxcbiAgICAgICAgICBsYWJlbHMsXG4gICAgICAgICAgLy8gQSBwaWUga2VlcHMgdGhlIDAgdGhlIHNjcmVlbidzIHBpZSB1c2VzOyBhbiBheGlzIGNoYXJ0IGtlZXBzIGl0c1xuICAgICAgICAgIC8vIG51bGwgc28gdGhlIHBvaW50IGlzIGEgZ2FwLlxuICAgICAgICAgIHZhbHVlczogcGllID8gc2VyaWVzLnZhbHVlcy5tYXAoKHZhbHVlKSA9PiB2YWx1ZSA/PyAwKSA6IChzaGFyZXM/LmdldChpbmRleCkgPz8gc2VyaWVzLnZhbHVlcyksXG4gICAgICAgIH0pKTtcblxuICAgIC8vIFRoZSB0eXBlIGVhY2ggY2hhcnREYXRhIGVudHJ5IGlzIGRyYXduIGFzLiBBIHBpZSBpcyBvbmUgZW50cnkgb2YgaXRzIG93blxuICAgIC8vIHR5cGU7IGNvbG9yQnkgY29sbGFwc2VkIGl0cyBzZXJpZXMgaW50byBvbmUsIGRyYXduIGFzIHRoZSBsb25lIG1lYXN1cmUncy5cbiAgICBjb25zdCBzZXJpZXNEYXRhVHlwZXM6IHN0cmluZ1tdID0gcGllXG4gICAgICA/IFtjaGFydFR5cGVdXG4gICAgICA6IHNlcmllc1R5cGVzKGV4dHJhY3RlZCwgY2hhcnRUeXBlKS5zbGljZSgwLCBjb2xvckJ5ID8gMSA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgZGF0YVR5cGVzID0gc2VyaWVzRGF0YVR5cGVzLmxlbmd0aCA/IHNlcmllc0RhdGFUeXBlcyA6IFtjaGFydFR5cGVdO1xuICAgIC8vIFRoZSB2YWx1ZSBheGlzIG9mIGVhY2ggY2hhcnREYXRhIGVudHJ5OyBhIHBpZSBhbmQgYSBjb2xvckJ5IGNoYXJ0IGhhdmVcbiAgICAvLyBvbmUgc2VyaWVzIG9uIHRoZSBvbmUgYXhpcy5cbiAgICBjb25zdCBheGlzSW5kZXhlcyA9IHBpZSB8fCBjb2xvckJ5ID8gWzAgYXMgVmFsdWVBeGlzSW5kZXhdIDogc2VyaWVzQXhpc0luZGV4ZXMoZXh0cmFjdGVkLCBjb25maWcpO1xuICAgIGNvbnN0IHR3b0F4ZXMgPSBheGlzSW5kZXhlcy5pbmNsdWRlcygxKTtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gY2hhcnRSZWZlcmVuY2VzKGNvbmZpZywgdHdvQXhlcyk7XG4gICAgY29uc3QgZm9ybWF0Q29kZXMgPSBwaWUgPyBbXSA6IHRoaXMuX21lYXN1cmVGb3JtYXRDb2Rlcyhjb25maWcsIGV4dHJhY3RlZCwgYXhpc0luZGV4ZXMsIGNvbnRleHQsIHNoYXJlcywgcmVmZXJlbmNlcyk7XG4gICAgLy8gQSB2YWx1ZSBheGlzIHRoYXQgcGxvdHMgbm90aGluZyBidXQgcmFua3MgcmVhZHMgdG9wLWRvd24sIHJhbmsgMSBhdCB0aGVcbiAgICAvLyB0b3AsIGFzIG9uIHNjcmVlbiAoYSAxMDAlIHN0YWNrZWQgY2hhcnQncyBwcmltYXJ5IGF4aXMgaXMgaXRzIHNoYXJlcykuXG4gICAgY29uc3QgcmFua0F4ZXMgPSBwaWUgfHwgY29sb3JCeSB8fCBzaGFyZXMgPyBbZmFsc2UsIGZhbHNlXSA6IHJhbmtWYWx1ZUF4ZXMoZXh0cmFjdGVkLCBkYXRhLCBjb25maWcpO1xuICAgIGNvbnN0IHJhbmtQZWFrcyA9IChbMCwgMV0gYXMgY29uc3QpLm1hcCgoYXhpc0luZGV4KSA9PiBjaGFydFZhbHVlUGVhayhcbiAgICAgIGV4dHJhY3RlZC5zZXJpZXMuZmlsdGVyKChfLCBpbmRleCkgPT4gYXhpc0luZGV4ZXNbaW5kZXhdID09PSBheGlzSW5kZXgpLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudmFsdWVzKSxcbiAgICAgIGZhbHNlLFxuICAgICkpO1xuXG4gICAgLy8gUmVmZXJlbmNlcyBhbmQgc3RhdGlzdGljIGxpbmVzIGZvbGxvdyB0aGUgbWVhc3VyZXMgaW4gdGhlIGNoYXJ0IGRhdGEsXG4gICAgLy8gZWFjaCBhIGNvbnN0YW50IHNlcmllcyBvZiBpdHMgb3duLlxuICAgIGNvbnN0IGNvbnN0YW50cyA9IHBpZVxuICAgICAgPyBbXVxuICAgICAgOiBbXG4gICAgICAgIC4uLnRoaXMuX3JlZmVyZW5jZUxpbmVzKHJlZmVyZW5jZXMpLFxuICAgICAgICAuLi50aGlzLl9zdGF0TGluZXMoY29uZmlnLCBleHRyYWN0ZWQsIGF4aXNJbmRleGVzLCBzaGFyZXMsIGNvbG9yQnksIG1lYXN1cmVEYXRhWzBdPy5uYW1lID8/ICcnKSxcbiAgICAgIF07XG4gICAgY29uc3QgbGVnZW5kUG9zaXRpb24gPSB0aGlzLl9sZWdlbmRQb3NpdGlvbihjb25maWcsIGNvbG9yQnksIGV4dHJhY3RlZC5zZXJpZXMubGVuZ3RoLCBjb25zdGFudHMubGVuZ3RoKTtcbiAgICBjb25zdCBjaGFydERhdGEgPSBbXG4gICAgICAuLi5tZWFzdXJlRGF0YSxcbiAgICAgIC4uLmNvbnN0YW50cy5tYXAoKGxpbmUpID0+ICh7IG5hbWU6IGxpbmUubmFtZSwgbGFiZWxzLCB2YWx1ZXM6IGxhYmVscy5tYXAoKCkgPT4gbGluZS52YWx1ZSkgfSkpLFxuICAgIF07XG5cbiAgICAvLyBTZXJpZXMgY29sb3JzIGFyZSBwZXIgZW50cnkgKF9lbnRyeVBsYW4pLCBuZXZlciBjaGFydC1sZXZlbCwgd2hlcmUgYVxuICAgIC8vIG11bHRpLXR5cGUgY2hhcnQncyBldmVyeSBlbnRyeSB3b3VsZCBpbmhlcml0IHRoZW0uXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHgsIHksIHcsIGgsXG4gICAgICBzaG93TGVnZW5kOiBsZWdlbmRQb3NpdGlvbiAhPT0gJ2hpZGRlbicsXG4gICAgICBsZWdlbmRQb3M6IFBQVFhfTEVHRU5EX1BPU1tsZWdlbmRQb3NpdGlvbl0sXG4gICAgICBsZWdlbmRGb250U2l6ZTogOSxcbiAgICAgIGJhckRpcjogY29uZmlnLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnYmFyJyA6ICdjb2wnLFxuICAgICAgYmFyR3JvdXBpbmc6IGNvbmZpZy5zdGFja2VkIHx8IHNoYXJlcyA/ICdzdGFja2VkJyA6ICdjbHVzdGVyZWQnLFxuICAgICAgaG9sZVNpemU6IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JyA/IDU1IDogdW5kZWZpbmVkLFxuICAgICAgLi4uKHR3b0F4ZXNcbiAgICAgICAgPyB0aGlzLl90d29BeGVzT3B0aW9ucyhjb25maWcsIGRhdGEsIGZvcm1hdENvZGVzLCBzaGFyZXMsIHJhbmtBeGVzLCByYW5rUGVha3MpXG4gICAgICAgIDogdGhpcy5fYXhpc1RleHRPcHRpb25zKGNvbmZpZywgZGF0YSwgcGllKSksXG4gICAgICAuLi5CTEFOS1NfQVNfR0FQUyxcbiAgICAgIC8vIEEgcGllIGhhcyBubyBheGVzLiBBIGNvbWJvJ3MgdHlwZXMgaW5oZXJpdCB0aGVzZSBmcm9tIHRoZSBjaGFydCBsZXZlbDtcbiAgICAgIC8vIGEgdHdvLWF4aXMgY2hhcnQncyB2YWx1ZSBheGVzIGNhcnJ5IHRoZWlyIG93biBmb3JtYXQgY29kZXMuIEEgMTAwJVxuICAgICAgLy8gc3RhY2tlZCBjaGFydCdzIG9uZSB2YWx1ZSBheGlzIGlzIHRoZSBzaGFyZSBheGlzLlxuICAgICAgLi4uKHBpZSB8fCB0d29BeGVzID8ge30gOiAoc2hhcmVzID8gdGhpcy5fcGVyY2VudEF4aXNPcHRpb25zKHNoYXJlcykgOiB7XG4gICAgICAgIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IGZvcm1hdENvZGVzWzBdLFxuICAgICAgfSkpLFxuICAgICAgLi4uKHBpZSA/IHt9IDogdGhpcy5fY2F0ZWdvcnlPcmRlck9wdGlvbnMoY29uZmlnLCBkYXRhVHlwZXMpKSxcbiAgICAgIC4uLih0d29BeGVzIHx8ICFyYW5rQXhlc1swXSA/IHt9IDoge1xuICAgICAgICAuLi50aGlzLl9yYW5rQXhpc09wdGlvbnMoY29uZmlnLnZhbHVlQXhpcywgcmFua1BlYWtzWzBdKSxcbiAgICAgICAgY2F0QXhpc0xhYmVsUG9zOiBQUFRYX1JBTktfQ0FURUdPUllfTEFCRUxfUE9TLFxuICAgICAgfSksXG4gICAgICBkYXRhQm9yZGVyOiB7IHB0OiAwLCBjb2xvcjogJ0ZGRkZGRicgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgcHJpb3JTdHlsZXMgPSBwaWUgPyBudWxsIDogcHJpb3JTZXJpZXNTdHlsZXMoY29uZmlnLCBkYXRhLCBleHRyYWN0ZWQpO1xuICAgIGNvbnN0IGVudHJpZXMgPSBbXG4gICAgICAuLi50aGlzLl9lbnRyeVBsYW4oZGF0YVR5cGVzLCBleHRyYWN0ZWQsIGNvbmZpZywgYXhpc0luZGV4ZXMsIHNoYXJlcywgY2hhcnREYXRhLmxlbmd0aCwgcHJpb3JTdHlsZXMpXG4gICAgICAgIC5tYXAoKGVudHJ5KSA9PiB0aGlzLl93aXRoRGF0YUxhYmVscyhlbnRyeSwgY29uZmlnLCBmb3JtYXRDb2Rlcywgc2hhcmVzLCBsYWJlbHMubGVuZ3RoKSksXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lLCBpbmRleCkgPT4gdGhpcy5fY29uc3RhbnRFbnRyeShsaW5lLCBtZWFzdXJlRGF0YS5sZW5ndGggKyBpbmRleCwgY2hhcnREYXRhLmxlbmd0aCkpLFxuICAgIF07XG5cbiAgICB0aGlzLl9hZGRDaGFydChzbGlkZSwgdHlwZU1hcCwgZW50cmllcywgY2hhcnREYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFdoZXJlIHRoZSBsZWdlbmQgc2l0cywgYXMgb24gc2NyZWVuIChyZXNvbHZlTGVnZW5kUG9zaXRpb24pLCB3aXRoIHR3b1xuICAvLyBkaWZmZXJlbmNlcy4gQSBzaW5nbGUtc2VyaWVzIGNvbG9yQnkgY2hhcnQgY2FuJ3QgY2FycnkgYSBwZXItY2F0ZWdvcnlcbiAgLy8gbGVnZW5kIGluIGEgbmF0aXZlIFBvd2VyUG9pbnQgYmFyIGNoYXJ0LCBzbyB0aGUgY2F0ZWdvcnkgYXhpcyBsYWJlbHNcbiAgLy8gaWRlbnRpZnkgZWFjaCBiYXIgaW5zdGVhZC4gQW5kIGEgcmVmZXJlbmNlIG9yIHN0YXRpc3RpYyBsaW5lIGlzIG5hbWVkIGluXG4gIC8vIHRoZSBsZWdlbmQgYWxvbmUsIHdoZXJlIHRoZSBzY3JlZW4gbGFiZWxzIGl0IG9uIHRoZSBsaW5lLCBzbyBhIGNoYXJ0IHRoYXRcbiAgLy8gZHJhd3Mgb25lIHNob3dzIHRoZSBsZWdlbmQgd2hlbmV2ZXIgdGhlIGNvbmZpZyBkb2VzIG5vdCBwaW4gaXQuIEEgcGlubmVkXG4gIC8vIHBvc2l0aW9uLCAnaGlkZGVuJyBpbmNsdWRlZCwgc3RpbGwgd2lucy5cbiAgcHJpdmF0ZSBfbGVnZW5kUG9zaXRpb24oXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBjb2xvckJ5OiBib29sZWFuLFxuICAgIHNlcmllc0NvdW50OiBudW1iZXIsXG4gICAgY29uc3RhbnRDb3VudDogbnVtYmVyLFxuICApOiBMZWdlbmRQb3NpdGlvbiB7XG4gICAgaWYgKGNvbnN0YW50Q291bnQpIHtcbiAgICAgIHJldHVybiBjb25maWcubGVnZW5kID8/IFBQVFhfQ09OU1RBTlRfTEVHRU5EO1xuICAgIH1cblxuICAgIHJldHVybiBjb2xvckJ5ID8gJ2hpZGRlbicgOiByZXNvbHZlTGVnZW5kUG9zaXRpb24oY29uZmlnLCBzZXJpZXNDb3VudCk7XG4gIH1cblxuICAvLyBFYWNoIHJlZmVyZW5jZSAoY2hhcnRSZWZlcmVuY2VzKSBhcyBjb25zdGFudCBsaW5lczogYSBsaW5lIGF0IGl0cyB2YWx1ZSxcbiAgLy8gb3IgYSBiYW5kJ3MgbG93ZXIgZWRnZSB1bmRlciBpdHMgbGFiZWwgYW5kIGl0cyB1cHBlciBlZGdlIHVuZGVyIHRoZSBsYWJlbFxuICAvLyB3aXRoIFBQVFhfQkFORF9VUFBFUl9TVUZGSVguIEEgY2hhcnQgZHJhd3MgdGhlIG9uZXMgdGhlIHNjcmVlbiBkcmF3czogbm9uZVxuICAvLyBvbiBhIGhvcml6b250YWwgY2hhcnQgb3IgYSBwaWUuXG4gIHByaXZhdGUgX3JlZmVyZW5jZUxpbmVzKHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10pOiBQcHR4Q29uc3RhbnRMaW5lW10ge1xuICAgIHJldHVybiByZWZlcmVuY2VzLmZsYXRNYXAoKHJlZmVyZW5jZSkgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IHsgbmFtZTogcmVmZXJlbmNlLmxhYmVsLCB2YWx1ZTogcmVmZXJlbmNlLmxvdywgY29sb3I6IFJFUE9SVF9SRUZFUkVOQ0VfQ09MT1IsIHNlY29uZGFyeTogcmVmZXJlbmNlLmF4aXNJbmRleCA9PT0gMSB9O1xuXG4gICAgICByZXR1cm4gcmVmZXJlbmNlLmJhbmRcbiAgICAgICAgPyBbbGluZSwgeyAuLi5saW5lLCBuYW1lOiBgJHtyZWZlcmVuY2UubGFiZWx9JHtQUFRYX0JBTkRfVVBQRVJfU1VGRklYfWAsIHZhbHVlOiByZWZlcmVuY2UuaGlnaCB9XVxuICAgICAgICA6IFtsaW5lXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEVhY2ggbWVhc3VyZSdzIHN0YXRpc3RpYyBsaW5lLCB0YWtlbiBvdmVyIHRoZSB2YWx1ZXMgdGhlIHNlcmllcyBwbG90c1xuICAvLyAoaXRzIHNoYXJlcyBvbiBhIDEwMCUgc3RhY2tlZCBjaGFydCksIG5hbWVkIGFmdGVyIHRoZSBzZXJpZXMgKCdWaXNpdHNcbiAgLy8gYXZlcmFnZScpIGFuZCBkcmF3biBpbiBpdHMgY29sb3Igb24gaXRzIGF4aXMuIEEgY29sb3JCeSBjaGFydCdzIG9uZSBsaW5lXG4gIC8vIGlzIHRha2VuIG92ZXIgaXRzIGNvbGxhcHNlZCBiYXJzIGFuZCBkcmF3biBpbiB0aGUgcmVmZXJlbmNlIHNsYXRlLCBhcyBvblxuICAvLyBzY3JlZW4uIEEgc2VyaWVzIHdpdGggbm8gdmFsdWUgZHJhd3Mgbm9uZSwgYW5kIGEgaG9yaXpvbnRhbCBjaGFydCBub25lLlxuICBwcml2YXRlIF9zdGF0TGluZXMoXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICAgIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgY29sb3JCeTogYm9vbGVhbixcbiAgICBjb2xvckJ5TmFtZTogc3RyaW5nLFxuICApOiBQcHR4Q29uc3RhbnRMaW5lW10ge1xuICAgIGlmICghZHJhd3NTdGF0TGluZXMoY29uZmlnKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmUgPSAoXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICB2YWx1ZXM6IChudW1iZXIgfCBudWxsKVtdLFxuICAgICAgc3RhdDogUmVwb3J0Q2hhcnRNYXJrU3RhdCxcbiAgICAgIGNvbG9yOiBzdHJpbmcsXG4gICAgICBzZWNvbmRhcnk6IGJvb2xlYW4sXG4gICAgKTogUHB0eENvbnN0YW50TGluZVtdID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gc2VyaWVzU3RhdCh2YWx1ZXMsIHN0YXQpO1xuICAgICAgY29uc3Qgc3RhdE5hbWUgPSBTVEFUX0xBQkVMW3N0YXRdO1xuXG4gICAgICByZXR1cm4gdmFsdWUgPT09IG51bGxcbiAgICAgICAgPyBbXVxuICAgICAgICA6IFt7IG5hbWU6IG5hbWUgPyBgJHtuYW1lfSAke3N0YXROYW1lLnRvTG93ZXJDYXNlKCl9YCA6IHN0YXROYW1lLCB2YWx1ZSwgY29sb3IsIHNlY29uZGFyeSB9XTtcbiAgICB9O1xuXG4gICAgaWYgKGNvbG9yQnkpIHtcbiAgICAgIGNvbnN0IHN0YXQgPSBtZWFzdXJlTWFya1N0YXQoZXh0cmFjdGVkLnNlcmllc1swXT8ubWVhc3VyZSk7XG5cbiAgICAgIHJldHVybiBzdGF0ID8gbGluZShjb2xvckJ5TmFtZSwgY29sb3JCeVZhbHVlcyhleHRyYWN0ZWQpLCBzdGF0LCBSRVBPUlRfUkVGRVJFTkNFX0NPTE9SLCBmYWxzZSkgOiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0cmFjdGVkLnNlcmllcy5mbGF0TWFwKChzZXJpZXMsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ID0gbWVhc3VyZU1hcmtTdGF0KHNlcmllcy5tZWFzdXJlKTtcblxuICAgICAgcmV0dXJuIHN0YXRcbiAgICAgICAgPyBsaW5lKHNlcmllcy5uYW1lLCBzaGFyZXM/LmdldChpbmRleCkgPz8gc2VyaWVzLnZhbHVlcywgc3RhdCwgc2VyaWVzSGV4KHNlcmllcywgaW5kZXgpLCBheGlzSW5kZXhlc1tpbmRleF0gPT09IDEpXG4gICAgICAgIDogW107XG4gICAgfSk7XG4gIH1cblxuICAvLyBBIGNvbnN0YW50IGxpbmUncyBvd24gZW50cnk6IGRhc2hlZCwgd2l0aG91dCBtYXJrZXJzIG9yIGRhdGEgbGFiZWxzLCBvblxuICAvLyBpdHMgdmFsdWUgYXhpcy4gSXRzIGNvbG9ycyBydW4gdGhlIGxlbmd0aCBvZiB0aGUgY2hhcnQncyBkYXRhLCBhcyBhXG4gIC8vIG1lYXN1cmUgbGluZSdzIGRvIChfZW50cnlQbGFuKSwgc28gbm8gbWFya2VyIGV2ZXIgdGFrZXMgYSByYW5kb20gY29sb3IuXG4gIHByaXZhdGUgX2NvbnN0YW50RW50cnkobGluZTogUHB0eENvbnN0YW50TGluZSwgaW5kZXg6IG51bWJlciwgdG90YWxEYXRhOiBudW1iZXIpOiBQcHR4RW50cnkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnbGluZScsXG4gICAgICBpbmRleGVzOiBbaW5kZXhdLFxuICAgICAgc2Vjb25kYXJ5OiBsaW5lLnNlY29uZGFyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2hhcnRDb2xvcnM6IEFycmF5PHN0cmluZz4odG90YWxEYXRhKS5maWxsKGxpbmUuY29sb3IpLFxuICAgICAgICBsaW5lRGFzaDogUFBUWF9MSU5FX0RBU0hbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRGFzaGVkXSxcbiAgICAgICAgbGluZURhdGFTeW1ib2w6ICdub25lJyxcbiAgICAgICAgbGluZVNpemU6IFBQVFhfQ09OU1RBTlRfTElORV9TSVpFLFxuICAgICAgICBzaG93VmFsdWU6IGZhbHNlLFxuICAgICAgICAuLi4obGluZS5zZWNvbmRhcnkgPyB7IHNlY29uZGFyeVZhbEF4aXM6IHRydWUsIHNlY29uZGFyeUNhdEF4aXM6IHRydWUgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSBudW1iZXIgZm9ybWF0IGNvZGUgb2YgdGhlIG1lYXN1cmVzIHBsb3R0ZWQgb24gZWFjaCB2YWx1ZSBheGlzLCBieVxuICAvLyBheGlzIGluZGV4LCBtYXRjaGluZyB0aGUgc2NyZWVuJ3MgdGlja3MgKF92YWx1ZUF4aXNDb2RlKTogYSBvbmUtYXhpcyBjaGFydFxuICAvLyB0YWtlcyB0aGUgZm9ybWF0IGl0cyBwbG90dGVkIHNlcmllcycgbWVhc3VyZXMgYWdyZWUgb24sIGFzIG9uIHNjcmVlbi4gQSAxMDAlIHN0YWNrZWRcbiAgLy8gY2hhcnQncyBzaGFyZSBheGlzIGlzIGRyYXduIGluIFBQVFhfUEVSQ0VOVF9GT1JNQVRfQ09ERSBpbnN0ZWFkOyB0aGVzZVxuICAvLyBjb2RlcyBzdGlsbCB3cml0ZSB0aGUgcmF3IHZhbHVlcyBvZiB0aGUgc2VyaWVzIGJlc2lkZSBpdHMgc2hhcmVzLiBUaGVcbiAgLy8gcmVmZXJlbmNlcyBvbiBhbiBheGlzIGNvdW50IHRvd2FyZCBpdHMgcGVhaywgYXMgb24gc2NyZWVuXG4gIC8vIChyZWZlcmVuY2VQZWFrKSwgZXhjZXB0IGEgMTAwJSBzdGFja2VkIGNoYXJ0J3MsIHdoaWNoIGFyZSBzaGFyZXMuXG4gIHByaXZhdGUgX21lYXN1cmVGb3JtYXRDb2RlcyhcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGV4dHJhY3RlZDogRXh0cmFjdGVkQ2hhcnRTZXJpZXMsXG4gICAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIHJlZmVyZW5jZXM6IERyYXduUmVmZXJlbmNlW10sXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZWFjaCA9IChheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KSA9PiAoc2hhcmVzICYmIGF4aXNJbmRleCA9PT0gMCA/IDAgOiByZWZlcmVuY2VQZWFrKHJlZmVyZW5jZXMsIGF4aXNJbmRleCkpO1xuXG4gICAgaWYgKCFheGlzSW5kZXhlcy5pbmNsdWRlcygxKSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyk7XG4gICAgICBjb25zdCBzcGVjID0gYXhpc051bWJlckZvcm1hdChleHRyYWN0ZWQuc2VyaWVzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMubWVhc3VyZSkpO1xuXG4gICAgICByZXR1cm4gW3RoaXMuX3ZhbHVlQXhpc0NvZGUoc3BlYywgdmFsdWVzLCAhIWNvbmZpZy5zdGFja2VkLCBjb250ZXh0LCByZWFjaCgwKSldO1xuICAgIH1cblxuICAgIHJldHVybiAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgb25BeGlzID0gZXh0cmFjdGVkLnNlcmllcy5maWx0ZXIoKF8sIGluZGV4KSA9PiBheGlzSW5kZXhlc1tpbmRleF0gPT09IGF4aXNJbmRleCk7XG5cbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZUF4aXNDb2RlKFxuICAgICAgICBheGlzTnVtYmVyRm9ybWF0KG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1lYXN1cmUpKSxcbiAgICAgICAgb25BeGlzLm1hcCgoc2VyaWVzKSA9PiBzZXJpZXMudmFsdWVzKSxcbiAgICAgICAgISFjb25maWcuc3RhY2tlZCAmJiAhc2hhcmVzLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICByZWFjaChheGlzSW5kZXgpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgbWVhc3VyZSBlbnRyeSB3aXRoIGl0cyBkYXRhIGxhYmVscyAoY29uZmlnLmRhdGFMYWJlbHMpLCBzZXQgb24gdGhlXG4gIC8vIGVudHJ5IGFsb25lOiBvbiBhIGNoYXJ0IG9mIHNldmVyYWwgZW50cmllcyBhIGNoYXJ0LWxldmVsIGtleSB3b3VsZCByZWFjaFxuICAvLyBldmVyeSBvbmUgb2YgdGhlbS4gTmV2ZXIgY2FsbGVkIGZvciBhIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZS5cbiAgLy9cbiAgLy8gJ2FsbCcgbGFiZWxzIGV2ZXJ5IHBvaW50LiBQb3dlclBvaW50IGNhbm5vdCBoaWRlIG92ZXJsYXBwaW5nIGxhYmVscywgc29cbiAgLy8gJ2F1dG8nIGxhYmVscyBldmVyeSBwb2ludCB1cCB0byBQUFRYX0FVVE9fTEFCRUxfTUFYX1BPSU5UUyBjYXRlZ29yaWVzXG4gIC8vIGFuZCBub25lIHBhc3QgdGhhdC4gcHB0eGdlbmpzIGNhbm5vdCBsYWJlbCBhIHNpbmdsZSBwb2ludCwgc28gJ2xhc3QnXG4gIC8vIGxhYmVscyBub25lIChhIGRvY3VtZW50ZWQgZ2FwKSwgZXhjZXB0IG9uIGEgY29sb3JCeSBjaGFydDogdGhlcmUgZXZlcnlcbiAgLy8gYmFyIGlzIGl0cyBvd24gc2VyaWVzJyBsYXRlc3QgcG9pbnQgb24gc2NyZWVuLCBzbyAnbGFzdCcgbGFiZWxzIGV2ZXJ5XG4gIC8vIGJhciBvZiB0aGUgb25lIGNvbGxhcHNlZCBzZXJpZXMsIGFzICdhbGwnIGRvZXMuXG4gIC8vXG4gIC8vIEEgbGFiZWwgaXMgd3JpdHRlbiBpbiBpdHMgYXhpcydzIGZvcm1hdCBjb2RlICgnMCUnIGZvciBhIHNoYXJlKS4gQVxuICAvLyBzdGFja2VkIGJhcidzIHNpdHMgaW4gdGhlIG1pZGRsZSBvZiBpdHMgc2VnbWVudCBhbmQgYSBsaW5lJ3MgYWJvdmUgaXRzXG4gIC8vIHBvaW50LiBBIGNsdXN0ZXJlZCBiYXIga2VlcHMgUG93ZXJQb2ludCdzIGRlZmF1bHQsIG91dHNpZGUgaXRzIGVuZCwgd2hpY2hcbiAgLy8gcHB0eGdlbmpzIHdvdWxkIGRyb3Agb24gYSBvbmUtZW50cnkgY2hhcnQgaWYgbmFtZWQ7IGFuIGFyZWEgdGFrZXMgbm9cbiAgLy8gcG9zaXRpb24gYXQgYWxsLCBhbmQgcHB0eGdlbmpzIGRvZXMgbm90IHN0cmlwIG9uZSBmcm9tIGEgY29tYm8ncyBhcmVhLlxuICBwcml2YXRlIF93aXRoRGF0YUxhYmVscyhcbiAgICBlbnRyeTogUHB0eEVudHJ5LFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgZm9ybWF0Q29kZXM6IHN0cmluZ1tdLFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgY2F0ZWdvcnlDb3VudDogbnVtYmVyLFxuICApOiBQcHR4RW50cnkge1xuICAgIGNvbnN0IG1vZGUgPSBjb25maWcuZGF0YUxhYmVscztcbiAgICBjb25zdCBzaG93ID0gbW9kZSA9PT0gUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkFsbFxuICAgICAgfHwgKG1vZGUgPT09IFJlcG9ydENoYXJ0RGF0YUxhYmVscy5BdXRvICYmIGNhdGVnb3J5Q291bnQgPD0gUFBUWF9BVVRPX0xBQkVMX01BWF9QT0lOVFMpXG4gICAgICB8fCAobW9kZSA9PT0gUmVwb3J0Q2hhcnREYXRhTGFiZWxzLkxhc3QgJiYgaXNDb2xvckJ5KGNvbmZpZykpO1xuICAgIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG5cbiAgICBpZiAoIXNob3cgfHwgY2hhcnRUeXBlID09PSAncGllJyB8fCBjaGFydFR5cGUgPT09ICdkb251dCcpIHtcbiAgICAgIHJldHVybiBlbnRyeTtcbiAgICB9XG5cbiAgICBjb25zdCBzaGFyZSA9ICEhc2hhcmVzPy5oYXMoZW50cnkuaW5kZXhlc1swXSk7XG4gICAgY29uc3Qgc3RhY2tlZCA9IGVudHJ5LnR5cGUgPT09ICdiYXInICYmIChzaGFyZXMgPyBzaGFyZSA6ICEhY29uZmlnLnN0YWNrZWQpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fZGF0YUxhYmVsUG9zaXRpb24oZW50cnkudHlwZSwgc3RhY2tlZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZW50cnksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIC4uLmVudHJ5Lm9wdGlvbnMsXG4gICAgICAgIHNob3dWYWx1ZTogdHJ1ZSxcbiAgICAgICAgZGF0YUxhYmVsRm9ybWF0Q29kZTogc2hhcmUgPyBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUgOiBmb3JtYXRDb2Rlc1tlbnRyeS5zZWNvbmRhcnkgPyAxIDogMF0sXG4gICAgICAgIGRhdGFMYWJlbEZvbnRTaXplOiBQUFRYX0RBVEFfTEFCRUxfRk9OVF9TSVpFLFxuICAgICAgICAuLi4ocG9zaXRpb24gPyB7IGRhdGFMYWJlbFBvc2l0aW9uOiBwb3NpdGlvbiB9IDoge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQncyBzaGFyZSBheGlzLCBhcyBvbiBzY3JlZW46IGZyb20gMCAoLTEwMCUgd2hlbiBhXG4gIC8vIHNoYXJlIGlzIG5lZ2F0aXZlKSB0byAxMDAlLCBhIGdyaWRsaW5lIGV2ZXJ5IDI1JSwgaW4gd2hvbGUgcGVyY2VudGFnZXMuXG4gIHByaXZhdGUgX3BlcmNlbnRBeGlzT3B0aW9ucyhzaGFyZXM6IFBlcmNlbnRTaGFyZXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbEF4aXNNaW5WYWw6IHBlcmNlbnRBeGlzTWluKHNoYXJlcyksXG4gICAgICB2YWxBeGlzTWF4VmFsOiBQRVJDRU5UX0FYSVNfTUFYLFxuICAgICAgdmFsQXhpc01ham9yVW5pdDogUEVSQ0VOVF9BWElTX0lOVEVSVkFMLFxuICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogUFBUWF9QRVJDRU5UX0ZPUk1BVF9DT0RFLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHR3by1heGlzIGNoYXJ0J3MgYXhlcywgZWFjaCBpbiBpdHMgb3duIG9iamVjdDogcHB0eGdlbmpzIGJ1aWxkcyB0aGVcbiAgLy8gc2Vjb25kIHZhbHVlIGFuZCBjYXRlZ29yeSBheGVzIGZyb20gdGhlIGNoYXJ0J3Mgb3B0aW9ucyB3aXRoIHRoZXNlIGxhaWRcbiAgLy8gb3ZlciB0aGVtLCBzbyBhIHZhbHVlLWF4aXMga2V5IGxlZnQgYXQgdGhlIGNoYXJ0IGxldmVsIHdvdWxkIHJlYWNoIGJvdGguXG4gIC8vIFRoZSBwcmltYXJ5IHZhbHVlIGF4aXMgaXMgb24gdGhlIGxlZnQgd2l0aCB0aGUgY2F0ZWdvcnkgYXhpcyB1bmRlciBpdDtcbiAgLy8gdGhlIHNlY29uZCBpcyBvbiB0aGUgcmlnaHQsIHdpdGhvdXQgZ3JpZGxpbmVzIG9mIGl0cyBvd24sIGFuZCBpdHNcbiAgLy8gY2F0ZWdvcnkgYXhpcyBpcyBoaWRkZW4uIEVhY2ggdmFsdWUgYXhpcyBpcyB0aXRsZWQgb25seSBieSBpdHMgb3duIGxhYmVsXG4gIC8vIGFuZCBmb3JtYXR0ZWQgYnkgdGhlIG1lYXN1cmVzIHBsb3R0ZWQgYWdhaW5zdCBpdCwgYXMgb24gc2NyZWVuLiBPbiBhIDEwMCVcbiAgLy8gc3RhY2tlZCBjaGFydCB0aGUgcHJpbWFyeSBheGlzIGlzIHRoZSBzaGFyZSBheGlzLCBhbmQgdGhlIHNlY29uZCBheGlzJ3NcbiAgLy8gc2VyaWVzIGFyZSBub3Qgc3RhY2tlZC5cbiAgcHJpdmF0ZSBfdHdvQXhlc09wdGlvbnMoXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIGZvcm1hdENvZGVzOiBzdHJpbmdbXSxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIHJhbmtBeGVzOiBib29sZWFuW10sXG4gICAgcmFua1BlYWtzOiBudW1iZXJbXSxcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHZhbHVlQXhpcyA9IChheGlzSW5kZXg6IFZhbHVlQXhpc0luZGV4KSA9PiB7XG4gICAgICBjb25zdCBheGlzID0gYXhpc0luZGV4ID09PSAxID8gY29uZmlnLnNlY29uZGFyeUF4aXMgOiBjb25maWcudmFsdWVBeGlzO1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLl92YWx1ZUF4aXNSYW5nZU9wdGlvbnMoYXhpcywgYXhpcz8ubGFiZWwpO1xuICAgICAgY29uc3QgcmFuayA9IHJhbmtBeGVzW2F4aXNJbmRleF0gPyB0aGlzLl9yYW5rQXhpc09wdGlvbnMoYXhpcywgcmFua1BlYWtzW2F4aXNJbmRleF0pIDoge307XG5cbiAgICAgIGlmIChzaGFyZXMgJiYgYXhpc0luZGV4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7IC4uLnJhbmdlLCAuLi50aGlzLl9wZXJjZW50QXhpc09wdGlvbnMoc2hhcmVzKSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyAuLi5yYW5nZSwgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogZm9ybWF0Q29kZXNbYXhpc0luZGV4XSwgLi4ucmFuayB9O1xuICAgIH07XG4gICAgLy8gVGhlIGNhdGVnb3J5IGxhYmVscyBzdGF5IHVuZGVyIHRoZSBwbG90IHdoZW4gdGhlIHByaW1hcnkgdmFsdWUgYXhpcyBpc1xuICAgIC8vIGEgcmFuayBheGlzIGRyYXduIHRvcC1kb3duLlxuICAgIGNvbnN0IGNhdGVnb3J5ID0gcmFua0F4ZXNbMF1cbiAgICAgID8geyAuLi50aGlzLl9jYXRlZ29yeVRpdGxlT3B0aW9ucyhjb25maWcsIGRhdGEpLCBjYXRBeGlzTGFiZWxQb3M6IFBQVFhfUkFOS19DQVRFR09SWV9MQUJFTF9QT1MgfVxuICAgICAgOiB0aGlzLl9jYXRlZ29yeVRpdGxlT3B0aW9ucyhjb25maWcsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkFYSVNfRk9OVF9TSVpFUyxcbiAgICAgIHZhbEF4ZXM6IFt2YWx1ZUF4aXMoMCksIHsgLi4udmFsdWVBeGlzKDEpLCB2YWxHcmlkTGluZTogeyBzdHlsZTogJ25vbmUnIH0gfV0sXG4gICAgICBjYXRBeGVzOiBbY2F0ZWdvcnksIHsgY2F0QXhpc0hpZGRlbjogdHJ1ZSB9XSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSByYW5rIGF4aXMsIGFzIG9uIHNjcmVlbjogcmV2ZXJzZWQgKCdtYXhNaW4nKSwgc28gcmFuayAxIGlzIGF0IHRoZSB0b3AsXG4gIC8vIHN0YXJ0aW5nIGF0IHJhbmsgMSB1bmxlc3MgdGhlIGNvbmZpZyBwaW5zIGEgYm91bmQsIGFuZCBsYWJlbGVkIGluIHdob2xlXG4gIC8vIHJhbmtzLiBGZXcgcmFua3MgYXJlIHN0ZXBwZWQgb25lIGF0IGEgdGltZSB3aGVuIHRoZSBjb25maWcgcGlucyBub1xuICAvLyBpbnRlcnZhbCwgc28gbm8gdGljayBmYWxscyBiZXR3ZWVuIHR3byByYW5rcy5cbiAgcHJpdmF0ZSBfcmFua0F4aXNPcHRpb25zKGF4aXM6IENoYXJ0VmFsdWVBeGlzIHwgdW5kZWZpbmVkLCBwZWFrOiBudW1iZXIpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcmFuZ2UgPSB2YWx1ZUF4aXNSYW5nZShheGlzKTtcbiAgICBjb25zdCB3aG9sZVN0ZXBzID0gcmFuZ2UuaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCAmJiBwZWFrIDw9IFBQVFhfUkFOS19XSE9MRV9TVEVQX1BFQUs7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsQXhpc09yaWVudGF0aW9uOiAnbWF4TWluJyxcbiAgICAgIHZhbEF4aXNNaW5WYWw6IHJhbmdlLm1pbiA/PyBSQU5LX0FYSVNfTUlOLFxuICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogUFBUWF9SQU5LX0ZPUk1BVF9DT0RFLFxuICAgICAgLi4uKHdob2xlU3RlcHMgPyB7IHZhbEF4aXNNYWpvclVuaXQ6IDEgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSBob3Jpem9udGFsIGJhciBjaGFydCByZWFkcyB0b3AtZG93biwgZmlyc3QgY2F0ZWdvcnkgYXQgdGhlIHRvcCwgYXMgaXRcbiAgLy8gZG9lcyBvbiBzY3JlZW4uIFBvd2VyUG9pbnQgZHJhd3MgY2F0ZWdvcnkgMCBuZXh0IHRvIHRoZSB2YWx1ZSBheGlzLCBhdCB0aGVcbiAgLy8gYm90dG9tLCBzbyB0aGUgY2F0ZWdvcnkgYXhpcyBpcyByZXZlcnNlZCAoJ21heE1pbicpOyB0aGUgdmFsdWUgYXhpcyB0aGVuXG4gIC8vIGNyb3NzZXMgYXQgdGhlIGxhc3QgY2F0ZWdvcnkgKCdtYXgnKSwgd2hpY2ggbm93IHNpdHMgYXQgdGhlIGJvdHRvbSwgYW5kXG4gIC8vICduZXh0VG8nIGtlZXBzIGl0cyBsYWJlbHMgb24gdGhhdCBsaW5lIChwcHR4Z2VuanMncyBkZWZhdWx0IGZvciBhIGJhclxuICAvLyBkaXJlY3Rpb24sICdsb3cnLCB3b3VsZCBmb2xsb3cgdGhlIGZpcnN0IGNhdGVnb3J5IHRvIHRoZSB0b3ApLiBPbmx5IGFuXG4gIC8vIGFsbC1iYXIgY2hhcnQ6IGEgbGluZSBvciBhcmVhIGlzIG5ldmVyIGRyYXduIHNpZGV3YXlzLlxuICBwcml2YXRlIF9jYXRlZ29yeU9yZGVyT3B0aW9ucyhjb25maWc6IENoYXJ0Q29uZmlnLCB0eXBlczogc3RyaW5nW10pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgaWYgKGNvbmZpZy5vcmllbnRhdGlvbiAhPT0gJ2hvcml6b250YWwnIHx8IHR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgIT09ICdiYXInKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGNhdEF4aXNPcmllbnRhdGlvbjogJ21heE1pbicsIGNhdEF4aXNDcm9zc2VzQXQ6ICdtYXgnLCB2YWxBeGlzTGFiZWxQb3M6ICduZXh0VG8nIH07XG4gIH1cblxuICAvLyBUaGUgdmFsdWUgYXhpcydzIG51bWJlciBmb3JtYXQgY29kZSwgbWF0Y2hpbmcgdGhlIHNjcmVlbidzIHRpY2tzOiB3aXRoIGFuXG4gIC8vIGF4aXMgZm9ybWF0IChheGlzTnVtYmVyRm9ybWF0LCBvciBhIHdhdGVyZmFsbCdzIGZvcm1hdHRlZCBtZWFzdXJlKSB0aGVcbiAgLy8gdW5pdHMgYW5kIGRlY2ltYWxzIHRoZSBzY3JlZW4gZGVjaWRlcyBmcm9tIHRoZSBzYW1lIHBlYWs7IHdpdGhvdXQgb25lLFxuICAvLyB0aGUgY29kZSBmb3IgdGhlIHNjcmVlbidzIHBsYWluIHRpY2tzLiBUaGUgcGVhayBpcyB0aGUgc2VyaWVzJyBvciB0aGVcbiAgLy8gZnVydGhlc3QgcmVmZXJlbmNlIG9uIHRoZSBheGlzIChyZWFjaCksIHdoaWNoZXZlciBpcyBsYXJnZXI7IHRoZSBmb3JtYXRcbiAgLy8gaGVscGVycyByZWFkIGl0IG9mZiBhIG9uZS1wb2ludCBzZXJpZXMuXG4gIHByaXZhdGUgX3ZhbHVlQXhpc0NvZGUoXG4gICAgc3BlYzogTnVtYmVyRm9ybWF0U3BlYyB8IG51bGwsXG4gICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXVtdLFxuICAgIHN0YWNrZWQ6IGJvb2xlYW4sXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICByZWFjaDogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHBlYWsgPSBNYXRoLm1heChjaGFydFZhbHVlUGVhayh2YWx1ZXMsIHN0YWNrZWQpLCByZWFjaCk7XG4gICAgY29uc3QgcGVha1NlcmllcyA9IFtbcGVha11dO1xuXG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICByZXR1cm4gY2hhcnRBeGlzRm9ybWF0Q29kZShwZWFrU2VyaWVzLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnQgPSByZXNvbHZlQ2hhcnROdW1iZXJGb3JtYXQoc3BlYywgcGVhaywgY29udGV4dCk7XG5cbiAgICByZXR1cm4gbnVtYmVyRm9ybWF0Q29kZShzcGVjLCBjb250ZXh0LCBjaGFydCwgcGVha1NlcmllcywgZmFsc2UpO1xuICB9XG5cbiAgLy8gT25lIG5hdGl2ZSBjaGFydCB3aGVuIHRoZSBwbGFuIGlzIGEgc2luZ2xlIGVudHJ5LCBpdHMgb3B0aW9ucyBsYWlkIG92ZXJcbiAgLy8gdGhlIGNoYXJ0J3MuIE90aGVyd2lzZSBwcHR4Z2VuanMncyBtdWx0aS10eXBlIGNoYXJ0LCB3aGVyZSBldmVyeSBlbnRyeSdzXG4gIC8vIG93biBvcHRpb25zIGFyZSBsYWlkIG92ZXIgdGhlIGNoYXJ0J3MuXG4gIHByaXZhdGUgX2FkZENoYXJ0KFxuICAgIHNsaWRlOiBhbnksXG4gICAgdHlwZU1hcDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBlbnRyaWVzOiBQcHR4RW50cnlbXSxcbiAgICBjaGFydERhdGE6IHVua25vd25bXSxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZCB7XG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICBzbGlkZS5hZGRDaGFydCh0eXBlTWFwW2VudHJ5LnR5cGVdLCBlbnRyeS5pbmRleGVzLm1hcCgoaW5kZXgpID0+IGNoYXJ0RGF0YVtpbmRleF0pLCB7IC4uLm9wdGlvbnMsIC4uLmVudHJ5Lm9wdGlvbnMgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzbGlkZS5hZGRDaGFydChlbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICB0eXBlOiB0eXBlTWFwW2VudHJ5LnR5cGVdLFxuICAgICAgZGF0YTogZW50cnkuaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBjaGFydERhdGFbaW5kZXhdKSxcbiAgICAgIG9wdGlvbnM6IGVudHJ5Lm9wdGlvbnMsXG4gICAgfSkpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEhvdyBhIGNoYXJ0J3Mgc2VyaWVzIChkYXRhVHlwZXMsIG9uZSBwZXIgY2hhcnREYXRhIGVudHJ5KSBhcmUgY3V0IGludG9cbiAgLy8gbmF0aXZlIGNoYXJ0cywgYW5kIHRoZSBjb2xvcnMgZWFjaCBkcmF3cyBpbi5cbiAgLy9cbiAgLy8gQSBwaWUncyBzbGljZXMgYW5kIGEgY29sb3JCeSBjaGFydCdzIGNvbGxhcHNlZCBiYXJzIGFyZSBvbmUgc2VyaWVzIGNvbG9yZWRcbiAgLy8gcG9pbnQgYnkgcG9pbnQsIHNvIHRoZWlyIG9uZSBlbnRyeSBrZWVwcyB0aGUgd2hvbGUgcGFsZXR0ZS4gRXZlcnkgb3RoZXJcbiAgLy8gZW50cnkgaXMgaGFuZGVkIGV4YWN0bHkgaXRzIG93biBzZXJpZXMnIGNvbG9ycyAoc2VyaWVzSGV4KSwgc28gYSBsb25lIGJhclxuICAvLyBzZXJpZXMgaXMgb25lIGNvbG9yLCBhcyBvbiBzY3JlZW4sIHJhdGhlciB0aGFuIGEgY29sb3IgcGVyIGJhci5cbiAgLy9cbiAgLy8gQmFycyBzaGFyZSBvbmUgZW50cnkgcGVyIHZhbHVlIGF4aXMsIHNpbmNlIHNlcGFyYXRlIGJhciBjaGFydHMgb24gb25lIGF4aXNcbiAgLy8gb3ZlcmxhcCBpbnN0ZWFkIG9mIGNsdXN0ZXJpbmcsIGFuZCBhcmVhcyBsaWtld2lzZSwgc2luY2UgdGhleSBzdGFjayBvbmx5XG4gIC8vIGluc2lkZSBvbmUgYXJlYSBjaGFydC4gRWFjaCBsaW5lIGdldHMgYW4gZW50cnkgb2YgaXRzIG93biwgc28gaXRzIGxpbmVcbiAgLy8gb3B0aW9ucyBhcmUgaXRzIG93bi4gcHB0eGdlbmpzIGNvbG9ycyBhIGxpbmUgYnkgaXRzIHBsYWNlIGluIGl0cyBlbnRyeSBidXRcbiAgLy8gZmlsbHMgaXRzIG1hcmtlcnMgYnkgaXRzIHBsYWNlIGFjcm9zcyBldmVyeSBlbnRyeSdzIGRhdGEsIGFuZCB3aXRoIGFcbiAgLy8gcmFuZG9tIGNvbG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGlzdCwgc28gYSBsaW5lJ3MgbGlzdCBpcyBpdHMgb25lIGNvbG9yXG4gIC8vIHRoZSB3aG9sZSBsZW5ndGggb2YgdGhlIGNoYXJ0J3MgZGF0YSAodG90YWxEYXRhLCB3aGljaCBjb3VudHMgdGhlXG4gIC8vIGNvbnN0YW50IGxpbmVzIGFmdGVyIHRoZSBtZWFzdXJlcyB0b28pLlxuICAvL1xuICAvLyBBbiBlbnRyeSBvbiB0aGUgc2Vjb25kIHZhbHVlIGF4aXMgKHNlcmllc0F4aXNJbmRleGVzKSBwbG90cyBhZ2FpbnN0IHRoZVxuICAvLyBzZWNvbmQgdmFsdWUgYW5kIGNhdGVnb3J5IGF4ZXMuXG4gIC8vXG4gIC8vIEEgbGluZSBlbnRyeSBkcmF3cyBpdHMgbWVhc3VyZSdzIGxpbmUgc3R5bGUgKFBQVFhfTElORV9EQVNIKSBhbmQgaXRzXG4gIC8vIG1hcmtlcnMsIG9yIG5vbmUuIE9uIGEgMTAwJSBzdGFja2VkIGNoYXJ0IG9ubHkgdGhlIHNoYXJlIGVudHJpZXMgc3RhY2s7XG4gIC8vIGEgYmFyIG9yIGFyZWEgZW50cnkgb24gdGhlIHNlY29uZCBheGlzIGlzIGRyYXduIHNpZGUgYnkgc2lkZSwgYXMgb25cbiAgLy8gc2NyZWVuLlxuICAvL1xuICAvLyBBIGNoYXJ0IHRoYXQgcGxvdHMgYSBwcmlvciBzZXJpZXMgY29sb3JzIGl0IGFzIHRoZSBzY3JlZW4gZG9lc1xuICAvLyAocHJpb3JTdHlsZXMpOiBpbiBpdHMgY3VycmVudCBzZXJpZXMnIGNvbG9yLCBhbmQgZGFzaGVkIHdoZW4gaXQgaXMgYSBsaW5lXG4gIC8vIHdob3NlIG1lYXN1cmUgbmFtZXMgbm8gbGluZSBzdHlsZSBvZiBpdHMgb3duLlxuICBwcml2YXRlIF9lbnRyeVBsYW4oXG4gICAgZGF0YVR5cGVzOiBzdHJpbmdbXSxcbiAgICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgYXhpc0luZGV4ZXM6IFZhbHVlQXhpc0luZGV4W10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICB0b3RhbERhdGE6IG51bWJlcixcbiAgICBwcmlvclN0eWxlczogeyBjb2xvcnM6IHN0cmluZ1tdOyBwcmlvcnM6IGJvb2xlYW5bXSB9IHwgbnVsbCxcbiAgKTogUHB0eEVudHJ5W10ge1xuICAgIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG4gICAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnIHx8IGlzQ29sb3JCeShjb25maWcpKSB7XG4gICAgICByZXR1cm4gW3sgdHlwZTogZGF0YVR5cGVzWzBdLCBpbmRleGVzOiBbMF0sIHNlY29uZGFyeTogZmFsc2UsIG9wdGlvbnM6IHsgY2hhcnRDb2xvcnM6IFJFUE9SVF9DSEFSVF9DT0xPUlMgfSB9XTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyaWVzOiBQcHR4RW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IHBlckF4aXMgPSBuZXcgTWFwPHN0cmluZywgUHB0eEVudHJ5PigpO1xuICAgIGRhdGFUeXBlcy5mb3JFYWNoKCh0eXBlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc2Vjb25kYXJ5ID0gYXhpc0luZGV4ZXNbaW5kZXhdID09PSAxO1xuICAgICAgY29uc3Qga2V5ID0gYCR7dHlwZX0tJHtzZWNvbmRhcnl9YDtcbiAgICAgIGxldCBlbnRyeSA9IHR5cGUgPT09ICdsaW5lJyA/IHVuZGVmaW5lZCA6IHBlckF4aXMuZ2V0KGtleSk7XG5cbiAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgZW50cnkgPSB7IHR5cGUsIGluZGV4ZXM6IFtdLCBzZWNvbmRhcnksIG9wdGlvbnM6IHt9IH07XG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIHBlckF4aXMuc2V0KGtleSwgZW50cnkpO1xuICAgICAgfVxuXG4gICAgICBlbnRyeS5pbmRleGVzLnB1c2goaW5kZXgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaGV4ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmICghZXh0cmFjdGVkLnNlcmllc1tpbmRleF0pIHtcbiAgICAgICAgcmV0dXJuIFJFUE9SVF9DSEFSVF9DT0xPUlNbaW5kZXggJSBSRVBPUlRfQ0hBUlRfQ09MT1JTLmxlbmd0aF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmlvclN0eWxlcz8uY29sb3JzW2luZGV4XSA/PyBzZXJpZXNIZXgoZXh0cmFjdGVkLnNlcmllc1tpbmRleF0sIGluZGV4KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcbiAgICAgIC4uLmVudHJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjaGFydENvbG9yczogZW50cnkudHlwZSA9PT0gJ2xpbmUnXG4gICAgICAgICAgPyBBcnJheTxzdHJpbmc+KHRvdGFsRGF0YSkuZmlsbChoZXgoZW50cnkuaW5kZXhlc1swXSkpXG4gICAgICAgICAgOiBlbnRyeS5pbmRleGVzLm1hcChoZXgpLFxuICAgICAgICAuLi4oZW50cnkudHlwZSA9PT0gJ2xpbmUnXG4gICAgICAgICAgPyB0aGlzLl9saW5lT3B0aW9ucyhleHRyYWN0ZWQuc2VyaWVzW2VudHJ5LmluZGV4ZXNbMF1dPy5tZWFzdXJlLCAhIXByaW9yU3R5bGVzPy5wcmlvcnNbZW50cnkuaW5kZXhlc1swXV0pXG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihzaGFyZXMgJiYgZW50cnkudHlwZSAhPT0gJ2xpbmUnICYmICFzaGFyZXMuaGFzKGVudHJ5LmluZGV4ZXNbMF0pXG4gICAgICAgICAgPyB7IGJhckdyb3VwaW5nOiBlbnRyeS50eXBlID09PSAnYXJlYScgPyAnc3RhbmRhcmQnIDogJ2NsdXN0ZXJlZCcgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oZW50cnkuc2Vjb25kYXJ5ID8geyBzZWNvbmRhcnlWYWxBeGlzOiB0cnVlLCBzZWNvbmRhcnlDYXRBeGlzOiB0cnVlIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8vIFdoZXJlIGEgZGF0YSBsYWJlbCBzaXRzOiBQb3dlclBvaW50J3MgZExibFBvcyBjb2RlLCBvciB1bmRlZmluZWQgdG8gbGVhdmVcbiAgLy8gaXQgb3V0IChfd2l0aERhdGFMYWJlbHMgc2F5cyB3aHkpLlxuICBwcml2YXRlIF9kYXRhTGFiZWxQb3NpdGlvbih0eXBlOiBzdHJpbmcsIHN0YWNrZWRCYXI6IGJvb2xlYW4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlID09PSAnbGluZScpIHtcbiAgICAgIHJldHVybiAndCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrZWRCYXIgPyAnY3RyJyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEEgbGluZSBlbnRyeSdzIGRhc2ggYW5kIG1hcmtlcnMuIEEgc3R5bGUgUG93ZXJQb2ludCBoYXMgbm8gZGFzaCBmb3IgaXNcbiAgLy8gZHJhd24gc29saWQsIGFuZCBhIHByaW9yJ3MgbGluZSBkYXNoZWQgdW5sZXNzIGl0cyBtZWFzdXJlIG5hbWVzIGEgc3R5bGUuXG4gIHByaXZhdGUgX2xpbmVPcHRpb25zKG1lYXN1cmU6IENoYXJ0TWVhc3VyZSB8IHVuZGVmaW5lZCwgcHJpb3IgPSBmYWxzZSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBzdHlsZSA9IG1lYXN1cmVMaW5lU3R5bGUobWVhc3VyZSkgPz8gKHByaW9yID8gUmVwb3J0Q2hhcnRMaW5lU3R5bGUuRGFzaGVkIDogdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lRGFzaDogc3R5bGUgPyBQUFRYX0xJTkVfREFTSFtzdHlsZV0gOiBQUFRYX0xJTkVfREFTSFtSZXBvcnRDaGFydExpbmVTdHlsZS5Tb2xpZF0sXG4gICAgICBsaW5lRGF0YVN5bWJvbDogbWVhc3VyZT8ubWFya2VycyA9PT0gZmFsc2UgPyAnbm9uZScgOiAnY2lyY2xlJyxcbiAgICAgIGxpbmVEYXRhU3ltYm9sU2l6ZTogUFBUWF9MSU5FX1NZTUJPTF9TSVpFLFxuICAgIH07XG4gIH1cblxuICAvLyBBIHdhdGVyZmFsbCBpcyBhIHN0YWNrZWQgYmFyIGNoYXJ0IHdob3NlIGZpcnN0IHNlcmllcyBpcyBpbnZpc2libGU6IGl0XG4gIC8vIGxpZnRzIGVhY2ggYmFyIHRvIHdoZXJlIGl0cyBzdGVwIHN0YXJ0cy4gVGhlIHNlcmllcyBhcmUgY3V0IGRpZmZlcmVudGx5XG4gIC8vIGZyb20gdGhlIHNjcmVlbidzOyBfd2F0ZXJmYWxsU2VyaWVzIHNheXMgd2h5LlxuICBwcml2YXRlIF9yZW5kZXJXYXRlcmZhbGwoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gY29tcG9uZW50LmNvbmZpZyBhcyBDaGFydENvbmZpZztcbiAgICBjb25zdCB3YXRlcmZhbGwgPSBleHRyYWN0V2F0ZXJmYWxsKGNvbXBvbmVudCwgZGF0YSk7XG4gICAgY29uc3QgbWVhc3VyZSA9IGNvbmZpZy5tZWFzdXJlcz8uWzBdO1xuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuX2NhdGVnb3J5TGFiZWxzKFxuICAgICAgd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5jYXRlZ29yeSksXG4gICAgICBkYXRhLmdyYW51bGFyaXR5LFxuICAgICAgY29udGV4dC5sb2NhbGUsXG4gICAgICBjaGFydERhdGVMYWJlbChjb25maWcpLFxuICAgICk7XG4gICAgY29uc3Qgc2VyaWVzID0gdGhpcy5fd2F0ZXJmYWxsU2VyaWVzKHdhdGVyZmFsbC5zdGVwcyk7XG4gICAgLy8gVGhlIHJlZmVyZW5jZXMgYXJlIGNvbnN0YW50IGxpbmVzIGJlc2lkZSB0aGUgc3RhY2tlZCBiYXJzLCBvbiB0aGUgb25lXG4gICAgLy8gdmFsdWUgYXhpcy4gV2l0aG91dCBhbnkgdGhlIGNoYXJ0IGlzIHRoZSBvbmUgc3RhY2tlZCBiYXIgY2hhcnQsIHdpdGhvdXRcbiAgICAvLyBhIGxlZ2VuZDsgd2l0aCB0aGVtIHRoZSBsZWdlbmQgbmFtZXMgdGhlbSAoX2xlZ2VuZFBvc2l0aW9uKSwgYXMgaXRcbiAgICAvLyBhbG9uZSBjYW4sIGJlc2lkZSB0aGUgc3RlcHMnIGtpbmRzLlxuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBjaGFydFJlZmVyZW5jZXMoY29uZmlnLCBmYWxzZSk7XG4gICAgY29uc3QgY29uc3RhbnRzID0gdGhpcy5fcmVmZXJlbmNlTGluZXMocmVmZXJlbmNlcyk7XG4gICAgY29uc3QgbGVnZW5kUG9zaXRpb246IExlZ2VuZFBvc2l0aW9uID0gY29uc3RhbnRzLmxlbmd0aCA/IGNvbmZpZy5sZWdlbmQgPz8gUFBUWF9DT05TVEFOVF9MRUdFTkQgOiAnaGlkZGVuJztcbiAgICBjb25zdCBjaGFydERhdGEgPSBbXG4gICAgICAuLi5zZXJpZXMubWFwKChlbnRyeSkgPT4gKHsgbmFtZTogZW50cnkubmFtZSwgbGFiZWxzLCB2YWx1ZXM6IGVudHJ5LnZhbHVlcyB9KSksXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lKSA9PiAoeyBuYW1lOiBsaW5lLm5hbWUsIGxhYmVscywgdmFsdWVzOiBsYWJlbHMubWFwKCgpID0+IGxpbmUudmFsdWUpIH0pKSxcbiAgICBdO1xuICAgIGNvbnN0IGVudHJpZXM6IFBwdHhFbnRyeVtdID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnYmFyJyxcbiAgICAgICAgaW5kZXhlczogc2VyaWVzLm1hcCgoXywgaW5kZXgpID0+IGluZGV4KSxcbiAgICAgICAgc2Vjb25kYXJ5OiBmYWxzZSxcbiAgICAgICAgb3B0aW9uczogeyBjaGFydENvbG9yczogc2VyaWVzLm1hcCgoZW50cnkpID0+IGVudHJ5LmNvbG9yKSwgYmFyR3JvdXBpbmc6ICdzdGFja2VkJyB9LFxuICAgICAgfSxcbiAgICAgIC4uLmNvbnN0YW50cy5tYXAoKGxpbmUsIGluZGV4KSA9PiB0aGlzLl9jb25zdGFudEVudHJ5KGxpbmUsIHNlcmllcy5sZW5ndGggKyBpbmRleCwgY2hhcnREYXRhLmxlbmd0aCkpLFxuICAgIF07XG5cbiAgICB0aGlzLl9hZGRDaGFydChzbGlkZSwgeyBiYXI6IHBwdHguQ2hhcnRUeXBlLmJhciwgbGluZTogcHB0eC5DaGFydFR5cGUubGluZSB9LCBlbnRyaWVzLCBjaGFydERhdGEsIHtcbiAgICAgIHgsIHksIHcsIGgsXG4gICAgICBzaG93TGVnZW5kOiBsZWdlbmRQb3NpdGlvbiAhPT0gJ2hpZGRlbicsXG4gICAgICBsZWdlbmRQb3M6IFBQVFhfTEVHRU5EX1BPU1tsZWdlbmRQb3NpdGlvbl0sXG4gICAgICBsZWdlbmRGb250U2l6ZTogOSxcbiAgICAgIGJhckRpcjogY29uZmlnLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAnYmFyJyA6ICdjb2wnLFxuICAgICAgLi4udGhpcy5fYXhpc1RleHRPcHRpb25zKGNvbmZpZywgZGF0YSwgZmFsc2UpLFxuICAgICAgLi4uQkxBTktTX0FTX0dBUFMsXG4gICAgICAvLyBUaGUgYXhpcyBzcGFucyB0aGUgcnVubmluZyB0b3RhbCwgc28gaXRzIHBlYWsgaXMgdGhlIGZ1cnRoZXN0IGEgc3RlcFxuICAgICAgLy8gZW5kcyBmcm9tIHplcm8gKG9yIHRoZSBmdXJ0aGVzdCByZWZlcmVuY2UpOyB0aGUgcGllY2VzIGl0IGlzIGN1dCBpbnRvXG4gICAgICAvLyBuZXZlciBzdGFjayBwYXN0IHRoYXQuIFRoZSBvbmUgbWVhc3VyZSdzIGZvcm1hdCB3cml0ZXMgaXQsIGFzIG9uXG4gICAgICAvLyBzY3JlZW4uXG4gICAgICB2YWxBeGlzTGFiZWxGb3JtYXRDb2RlOiB0aGlzLl92YWx1ZUF4aXNDb2RlKFxuICAgICAgICBtZWFzdXJlICYmIGhhc051bWJlckZvcm1hdChtZWFzdXJlKSA/IG1lYXN1cmUgOiBudWxsLFxuICAgICAgICBbd2F0ZXJmYWxsLnN0ZXBzLm1hcCgoc3RlcCkgPT4gc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKSldLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgcmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCAwKSxcbiAgICAgICksXG4gICAgICAuLi50aGlzLl9jYXRlZ29yeU9yZGVyT3B0aW9ucyhjb25maWcsIFsnYmFyJ10pLFxuICAgICAgLy8gQSBydW5uaW5nIHRvdGFsIGNhbiBnbyBiZWxvdyB6ZXJvLCB3aGVyZSB0aGUgY2F0ZWdvcnkgYXhpcyBjcm9zc2VzO1xuICAgICAgLy8gaXRzIGxhYmVscyBzdGF5IGF0IHRoZSBwbG90J3MgZWRnZSBpbnN0ZWFkIG9mIGFjcm9zcyB0aGUgYmFycy5cbiAgICAgIGNhdEF4aXNMYWJlbFBvczogJ2xvdycsXG4gICAgfSk7XG4gIH1cblxuICAvLyBQb3dlclBvaW50IHN0YWNrcyBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzIGFwYXJ0LCBlYWNoIGZyb20gemVybywgc28gYVxuICAvLyBiYXIgY2Fubm90IHNpbXBseSBzaXQgb24gdGhlIHRvdGFsIGJlZm9yZSBpdCB0aGUgd2F5IGl0IGRvZXMgb24gc2NyZWVuLlxuICAvLyBFYWNoIHN0ZXAgaXMgY3V0IGF0IHplcm8gaW5zdGVhZDogdGhlIGludmlzaWJsZSBiYXNlIGNhcnJpZXMgaXQgdG8gaXRzIGVuZFxuICAvLyBuZWFyZXIgemVybywgYW5kIGl0cyBraW5kJ3Mgc2VyaWVzIGNhcnJpZXMgdGhlIHJlc3Qg4oCUIG9uZSBzZXJpZXMgYWJvdmUgemVyb1xuICAvLyBhbmQgb25lIGJlbG93LCBiZWNhdXNlIGEgc3RlcCB0aGF0IGNyb3NzZXMgemVybyBuZWVkcyBib3RoLiBFdmVyeSBvdGhlclxuICAvLyBwb2ludCBpcyBsZWZ0IGJsYW5rOiBhIHplcm8gdGhlcmUgd291bGQgc3RpbGwgZHJhdyBhIHplcm8taGVpZ2h0IGJhciwgd2hpY2hcbiAgLy8gcmVuZGVycyBhcyBhIGhhaXJsaW5lLiBBIGtpbmQncyBzZXJpZXMgdGhhdCBzdGF5cyBibGFuayBpcyBkcm9wcGVkLlxuICBwcml2YXRlIF93YXRlcmZhbGxTZXJpZXMoc3RlcHM6IFdhdGVyZmFsbFN0ZXBbXSk6IFBwdHhDaGFydFNlcmllc1tdIHtcbiAgICBjb25zdCBiYXNlOiBQcHR4Q2hhcnRTZXJpZXMgPSB7IG5hbWU6ICcnLCBjb2xvcjogJ3RyYW5zcGFyZW50JywgdmFsdWVzOiBbXSB9O1xuICAgIGNvbnN0IGtpbmRzID0gT2JqZWN0LmtleXMoV0FURVJGQUxMX1NFUklFU19OQU1FUykgYXMgV2F0ZXJmYWxsU3RlcEtpbmRbXTtcbiAgICBjb25zdCBwaWVjZSA9IChraW5kOiBXYXRlcmZhbGxTdGVwS2luZCkgPT4gKHtcbiAgICAgIGtpbmQsIG5hbWU6IFdBVEVSRkFMTF9TRVJJRVNfTkFNRVNba2luZF0sIGNvbG9yOiBSRVBPUlRfV0FURVJGQUxMX0NPTE9SU1traW5kXSwgdmFsdWVzOiBbXSBhcyAobnVtYmVyIHwgbnVsbClbXSxcbiAgICB9KTtcbiAgICBjb25zdCBhYm92ZSA9IGtpbmRzLm1hcChwaWVjZSk7XG4gICAgY29uc3QgYmVsb3cgPSBraW5kcy5tYXAocGllY2UpO1xuICAgIGNvbnN0IGJsYW5rWmVybyA9ICh2YWx1ZTogbnVtYmVyKSA9PiAodmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWUpO1xuXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHN0ZXBzKSB7XG4gICAgICBjb25zdCBlbmQgPSBzdGVwLnN0YXJ0ICsgKHN0ZXAuY2hhbmdlID8/IDApO1xuICAgICAgY29uc3QgbG93ID0gTWF0aC5taW4oc3RlcC5zdGFydCwgZW5kKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSBNYXRoLm1heChzdGVwLnN0YXJ0LCBlbmQpO1xuXG4gICAgICBiYXNlLnZhbHVlcy5wdXNoKGJsYW5rWmVybyhsb3cgPiAwID8gbG93IDogKGhpZ2ggPCAwID8gaGlnaCA6IDApKSk7XG4gICAgICBhYm92ZS5mb3JFYWNoKChlbnRyeSkgPT4gZW50cnkudmFsdWVzLnB1c2goXG4gICAgICAgIGVudHJ5LmtpbmQgPT09IHN0ZXAua2luZCA/IGJsYW5rWmVybyhNYXRoLm1heChoaWdoLCAwKSAtIE1hdGgubWF4KGxvdywgMCkpIDogbnVsbCxcbiAgICAgICkpO1xuICAgICAgYmVsb3cuZm9yRWFjaCgoZW50cnkpID0+IGVudHJ5LnZhbHVlcy5wdXNoKFxuICAgICAgICBlbnRyeS5raW5kID09PSBzdGVwLmtpbmQgPyBibGFua1plcm8oTWF0aC5taW4obG93LCAwKSAtIE1hdGgubWluKGhpZ2gsIDApKSA6IG51bGwsXG4gICAgICApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2Jhc2UsIC4uLlsuLi5hYm92ZSwgLi4uYmVsb3ddLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LnZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwpKV07XG4gIH1cblxuICAvLyBDb21wYWN0IHBlcmlvZCBsYWJlbHMgbWF0Y2ggdGhlIG9uLXNjcmVlbiBheGlzLCBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlIGFuZFxuICAvLyB0aGUgYXhpcydzIGRhdGUgbGFiZWwgc3R5bGUgKGEgc2hvcnQgbGFiZWwgdGFrZXMgaXRzIHllYXIgb25seSB3aGVuIHRoZVxuICAvLyBkYXRhIHNwYW5zIHllYXJzKTsgUG93ZXJQb2ludCBjYW4ndCBkbyBhIHN0eWxlZCBzZWNvbmQgbGluZSwgc28gaXQnc1xuICAvLyBpbmxpbmUuXG4gIHByaXZhdGUgX2NhdGVnb3J5TGFiZWxzKFxuICAgIGNhdGVnb3JpZXM6IHN0cmluZ1tdLFxuICAgIGdyYW51bGFyaXR5OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBsb2NhbGU6IFJlcG9ydExvY2FsZVRhZyxcbiAgICBkYXRlTGFiZWw6IFJlcG9ydENoYXJ0RGF0ZUxhYmVsLFxuICApOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFncmFudWxhcml0eSkge1xuICAgICAgcmV0dXJuIGNhdGVnb3JpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbXVsdGlZZWFyID0gc3BhbnNNdWx0aXBsZVllYXJzKGNhdGVnb3JpZXMpO1xuXG4gICAgcmV0dXJuIGNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gZm9ybWF0UGVyaW9kTGFiZWwoY2F0ZWdvcnksIGdyYW51bGFyaXR5LCBtdWx0aVllYXIsIGxvY2FsZSwgZGF0ZUxhYmVsKSk7XG4gIH1cblxuICAvLyBUaGUgYXhpcyBsYWJlbCBhbmQgdGl0bGUgc2V0dGluZ3Mgb2YgYSBjaGFydCB3aXRoIG9uZSB2YWx1ZSBheGlzLCBhbmQgdGhhdFxuICAvLyBheGlzJ3MgcmFuZ2UgKHZhbHVlQXhpcykuIEEgcGllIGhhcyBubyB2YWx1ZSBheGlzIHRvIHRpdGxlLiBXaXRob3V0IGFcbiAgLy8gdmFsdWVBeGlzLmxhYmVsIHRoZSB2YWx1ZSBheGlzIGlzIHRpdGxlZCBieSB0aGUgZmlyc3QgbWVhc3VyZSdzIGxhYmVsLCBhc1xuICAvLyBkZWNrcyBhbHdheXMgaGF2ZSBiZWVuOyB0aGUgc2NyZWVuIHNob3dzIG9ubHkgYW4gZXhwbGljaXQgdGl0bGUuIEFuXG4gIC8vIGV4cGxpY2l0IGVtcHR5IGxhYmVsIHN1cHByZXNzZXMgdGhhdCBmYWxsYmFjaywgYXMgaXQgZG9lcyBvbiBzY3JlZW4sIGFuZFxuICAvLyBhIDEwMCUgc3RhY2tlZCBjaGFydCdzIHNoYXJlIGF4aXMgaXMgbmV2ZXIgdGl0bGVkIHdpdGggb25lIHNlcmllcycgbmFtZS5cbiAgcHJpdmF0ZSBfYXhpc1RleHRPcHRpb25zKGNvbmZpZzogQ2hhcnRDb25maWcsIGRhdGE6IENvbXBvbmVudERhdGEsIHBpZTogYm9vbGVhbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uQVhJU19GT05UX1NJWkVTLFxuICAgICAgLi4udGhpcy5fY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnLCBkYXRhKSxcbiAgICAgIC4uLihwaWVcbiAgICAgICAgPyB7IHNob3dWYWxBeGlzVGl0bGU6IGZhbHNlIH1cbiAgICAgICAgOiB0aGlzLl92YWx1ZUF4aXNSYW5nZU9wdGlvbnMoXG4gICAgICAgICAgY29uZmlnLnZhbHVlQXhpcyxcbiAgICAgICAgICBjb25maWcudmFsdWVBeGlzPy5sYWJlbCA/PyAoY29uZmlnLnBlcmNlbnRTdGFja2VkID09PSB0cnVlID8gdW5kZWZpbmVkIDogY29uZmlnLm1lYXN1cmVzPy5bMF0/LmxhYmVsKSxcbiAgICAgICAgKSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSBjYXRlZ29yeSBheGlzJ3MgdGl0bGUsIGFzIHRoZSBzY3JlZW4gYW5kIHRoZSBQREYgbmFtZSBpdFxuICAvLyAoY2F0ZWdvcnlBeGlzVGl0bGUpOiBhIGRyaWxsZWQgY2hhcnQncyBheGlzIG5hbWVzIHRoZSBsZXZlbCBpdCB3YXMgcmVhZFxuICAvLyBhdCwgZWxzZSB0aGUgYXV0aG9yZWQgdGl0bGUuXG4gIHByaXZhdGUgX2NhdGVnb3J5VGl0bGVPcHRpb25zKGNvbmZpZzogQ2hhcnRDb25maWcsIGRhdGE6IENvbXBvbmVudERhdGEpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgdGl0bGUgPSBjYXRlZ29yeUF4aXNUaXRsZShjb25maWcsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dDYXRBeGlzVGl0bGU6ICEhdGl0bGUsXG4gICAgICBjYXRBeGlzVGl0bGU6IHRpdGxlLFxuICAgICAgY2F0QXhpc1RpdGxlRm9udFNpemU6IDEwLFxuICAgIH07XG4gIH1cblxuICAvLyBPbmUgdmFsdWUgYXhpcydzIHRpdGxlIGFuZCB0aGUgcmFuZ2UgdGhlIGNvbmZpZyBwaW5zICh2YWx1ZUF4aXNSYW5nZSwgYXNcbiAgLy8gb24gc2NyZWVuKS4gRXZlcnkga2V5IGlzIHNldCwgZXZlbiB3aGVuIGVtcHR5LCBzbyBvbiBhIHR3by1heGlzIGNoYXJ0XG4gIC8vIG5vdGhpbmcgaXMgaW5oZXJpdGVkIGZyb20gdGhlIGNoYXJ0J3Mgb3B0aW9ucy5cbiAgcHJpdmF0ZSBfdmFsdWVBeGlzUmFuZ2VPcHRpb25zKGF4aXM6IENoYXJ0VmFsdWVBeGlzIHwgdW5kZWZpbmVkLCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHJhbmdlID0gdmFsdWVBeGlzUmFuZ2UoYXhpcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1ZhbEF4aXNUaXRsZTogISF0aXRsZSxcbiAgICAgIHZhbEF4aXNUaXRsZTogdGl0bGUgfHwgdW5kZWZpbmVkLFxuICAgICAgdmFsQXhpc01pblZhbDogcmFuZ2UubWluLFxuICAgICAgdmFsQXhpc01heFZhbDogcmFuZ2UubWF4LFxuICAgICAgdmFsQXhpc01ham9yVW5pdDogcmFuZ2UuaW50ZXJ2YWwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgbGlzdCdzIHRhYmxlLCB3aXRob3V0IHRoZSBjb2x1bW5zIHRoZSB2aWV3ZXIgaGlkLiBBIHRvdGFscyByb3cgY2xvc2VzXG4gIC8vIGl0LCBib2xkIG9uIHRoZSBib3JkZXIgZ3JheSwgaW4gYSByb3cga2VwdCBmcmVlIGZvciBpdC5cbiAgcHJpdmF0ZSBfcmVuZGVyVGFibGUoXG4gICAgc2xpZGU6IGFueSxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIGhpZGRlbkNvbHVtbnM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICAgIHRpbWV6b25lOiBzdHJpbmcsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBsaXN0Q29sdW1ucyhjb21wb25lbnQsIGRhdGEsIGNvbnRleHQubG9jYWxlLCBoaWRkZW5Db2x1bW5zKTtcbiAgICBjb25zdCB0b3RhbHMgPSBsaXN0VG90YWxzUm93KGRhdGEsIGNvbHVtbnMsIHRpbWV6b25lLCBjb250ZXh0KTtcblxuICAgIGNvbnN0IGNhcCA9IE1hdGgubWF4KDIsIE1hdGguZmxvb3IoaCAvIFNMSURFX1JPV19IKSAtIDEgLSAodG90YWxzID8gMSA6IDApKTtcbiAgICBjb25zdCByb3dzID0gZGF0YS5yb3dzLnNsaWNlKDAsIGNhcCk7XG4gICAgY29uc3QgcmVtYWluaW5nID0gKGRhdGEucGFnaW5nPy50b3RhbCA/PyBkYXRhLnJvd3MubGVuZ3RoKSAtIHJvd3MubGVuZ3RoO1xuXG4gICAgLy8gQSBjb2x1bW4gb2YgZm9ybWF0dGVkIG51bWJlcnMgaXMgcmlnaHQtYWxpZ25lZCwgaXRzIGhlYWRpbmcgdG9vLCBhcyBvblxuICAgIC8vIHNjcmVlbi5cbiAgICBjb25zdCBhbGlnbiA9IChpbmRleDogbnVtYmVyKSA9PiAoY29sdW1uc1tpbmRleF0/Lm51bWVyaWMgPyB7IGFsaWduOiAncmlnaHQnIH0gOiB7fSk7XG5cbiAgICBjb25zdCBoZWFkZXIgPSBsaXN0SGVhZGluZ3MoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmxvY2FsZSwgaGlkZGVuQ29sdW1ucykubWFwKChoZWFkaW5nLCBpbmRleCkgPT4gKHtcbiAgICAgIHRleHQ6IGhlYWRpbmcsXG4gICAgICBvcHRpb25zOiB7IGJvbGQ6IHRydWUsIGNvbG9yOiAnRkZGRkZGJywgZmlsbDogeyBjb2xvcjogJzRFNzlBNycgfSwgLi4uYWxpZ24oaW5kZXgpIH0sXG4gICAgfSkpO1xuXG4gICAgLy8gQSBkYXRlIG9yIGZvcm1hdHRlZC1udW1iZXIgY2VsbCBpcyBhIHZhbHVlIHdyaXR0ZW4gaW4gdGhlIHJlcG9ydCdzXG4gICAgLy8gbG9jYWxlOyBldmVyeSBvdGhlciBjZWxsIHByaW50cyB0aGUgcXVlcnkncyB0ZXh0IGFzIGl0IGNhbWUuXG4gICAgY29uc3QgdmFsdWVMb2NhbGUgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uc1tpbmRleF07XG5cbiAgICAgIHJldHVybiBjb2x1bW4ubnVtZXJpYyB8fCBjb2x1bW4uZm9ybWF0ID09PSBSZXBvcnRMaXN0Q29sdW1uRm9ybWF0LkRhdGUgPyBjb250ZXh0LmxvY2FsZSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgY29uc3QgYm9keSA9IHJvd3MubWFwKChyb3cpID0+IGNvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAoe1xuICAgICAgdGV4dDogZXhwb3J0Q2VsbChyb3dbY29sdW1uLmNvbHVtbl0sIGNvbHVtbiwgdGltZXpvbmUsIGNvbnRleHQsIHJvdyksXG4gICAgICBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyhhbGlnbihpbmRleCksIHZhbHVlTG9jYWxlKGluZGV4KSksXG4gICAgfSkpKTtcblxuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBib2R5LnB1c2goW3tcbiAgICAgICAgdGV4dDogbW9yZVJvd3NOb3RpY2UocmVtYWluaW5nKSxcbiAgICAgICAgb3B0aW9uczogeyBjb2xzcGFuOiBjb2x1bW5zLmxlbmd0aCwgaXRhbGljOiB0cnVlLCBjb2xvcjogTVVURURfQ09MT1IgfSBhcyBhbnksXG4gICAgICB9XSk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGxhYmVsIGlzIGludGVyZmFjZSB0ZXh0LCBzbyBpdCBrZWVwcyB0aGUgZGVmYXVsdCBwcm9vZmluZyBsYW5ndWFnZS5cbiAgICBpZiAodG90YWxzKSB7XG4gICAgICBjb25zdCBsYWJlbENvbHVtbiA9IGxpc3RUb3RhbHNMYWJlbENvbHVtbihjb2x1bW5zLCBkYXRhLnRvdGFscyk7XG5cbiAgICAgIGJvZHkucHVzaCh0b3RhbHMubWFwKCh0ZXh0LCBpbmRleCkgPT4gKHtcbiAgICAgICAgdGV4dCxcbiAgICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoXG4gICAgICAgICAgeyBib2xkOiB0cnVlLCBmaWxsOiB7IGNvbG9yOiAnRTRFN0VCJyB9LCAuLi5hbGlnbihpbmRleCkgfSxcbiAgICAgICAgICBjb2x1bW5zW2luZGV4XS5jb2x1bW4gPT09IGxhYmVsQ29sdW1uID8gdW5kZWZpbmVkIDogdmFsdWVMb2NhbGUoaW5kZXgpLFxuICAgICAgICApLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBzbGlkZS5hZGRUYWJsZShbaGVhZGVyLCAuLi5ib2R5XSwge1xuICAgICAgeCwgeSwgdyxcbiAgICAgIGZvbnRTaXplOiA5LFxuICAgICAgY29sb3I6ICcxRjI5MzMnLFxuICAgICAgYm9yZGVyOiB7IHR5cGU6ICdzb2xpZCcsIHB0OiAwLjUsIGNvbG9yOiAnRTRFN0VCJyB9LFxuICAgICAgYXV0b1BhZ2U6IGZhbHNlLFxuICAgICAgcm93SDogU0xJREVfUk9XX0gsXG4gICAgICB2YWxpZ246ICdtaWRkbGUnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQSB0YWJsZSB0aWxlIGFzIGEgbmF0aXZlIHRhYmxlIChncmlkRXhwb3J0VGFibGUoKSk6IGl0cyBoZWFkaW5nIHJvd3NcbiAgLy8gc3Bhbm5lZCBhcyB0aGUgc2NyZWVuJ3MgaGVhZGVyLCBhcyBtYW55IGxpbmVzIGFzIHRoZSBib3ggaG9sZHMgKGdyb3Vwc1xuICAvLyBhbmQgdG90YWxzIGJvbGQsIGEgZ3JvdXAncyBsYWJlbCBzdGVwcGVkIGluIGJ5IGl0cyBkZXB0aCksIHRoZVxuICAvLyBtb3JlUm93c05vdGljZSByb3cgZm9yIHRoZSByZXN0IGFuZCB0aGUgdG90YWwgcm93LiBBIG51bWJlciBpcyB3cml0dGVuXG4gIC8vIGluIHRoZSByZXBvcnQncyBsb2NhbGUuXG4gIHByaXZhdGUgX3JlbmRlckdyaWRUYWJsZShcbiAgICBzbGlkZTogYW55LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgeTogbnVtYmVyLCB3OiBudW1iZXIsIGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdGFibGUgPSBncmlkRXhwb3J0VGFibGUoaXRlbS50YWJsZSEpO1xuICAgIGNvbnN0IGNlbGwgPSAoZXhwb3J0ZWQ6IEdyaWRFeHBvcnRDZWxsLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KSA9PiAoe1xuICAgICAgdGV4dDogYCR7R1JJRF9JTkRFTlQucmVwZWF0KGV4cG9ydGVkLmluZGVudCl9JHtleHBvcnRlZC50ZXh0fWAsXG4gICAgICBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyh7XG4gICAgICAgIC4uLihleHBvcnRlZC5jb2xTcGFuID4gMSA/IHsgY29sc3BhbjogZXhwb3J0ZWQuY29sU3BhbiB9IDoge30pLFxuICAgICAgICAuLi4oZXhwb3J0ZWQucm93U3BhbiA+IDEgPyB7IHJvd3NwYW46IGV4cG9ydGVkLnJvd1NwYW4gfSA6IHt9KSxcbiAgICAgICAgLi4uKGV4cG9ydGVkLmJvbGQgPyB7IGJvbGQ6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGV4cG9ydGVkLm51bWVyaWMgPyB7IGFsaWduOiAncmlnaHQnIH0gOiB7fSksXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9LCBleHBvcnRlZC5udW1lcmljID8gY29udGV4dC5sb2NhbGUgOiB1bmRlZmluZWQpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNhcCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaCAvIFNMSURFX1JPV19IKSAtIHRhYmxlLmhlYWQubGVuZ3RoIC0gKHRhYmxlLmZvb3QgPyAxIDogMCkpO1xuICAgIGNvbnN0IGxpbmVzID0gdGFibGUuYm9keS5zbGljZSgwLCBjYXApO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRhYmxlLmJvZHkubGVuZ3RoIC0gbGluZXMubGVuZ3RoICsgdGFibGUubW9yZVJvd3M7XG5cbiAgICBzbGlkZS5hZGRUYWJsZShbXG4gICAgICAuLi50YWJsZS5oZWFkLm1hcCgocm93KSA9PiByb3cubWFwKChoZWFkaW5nKSA9PiBjZWxsKGhlYWRpbmcsIHsgY29sb3I6ICdGRkZGRkYnLCBmaWxsOiB7IGNvbG9yOiAnNEU3OUE3JyB9IH0pKSksXG4gICAgICAuLi5saW5lcy5tYXAoKHJvdykgPT4gcm93Lm1hcCgobGluZSkgPT4gY2VsbChsaW5lKSkpLFxuICAgICAgLi4uKHJlbWFpbmluZyA+IDBcbiAgICAgICAgPyBbW3sgdGV4dDogbW9yZVJvd3NOb3RpY2UocmVtYWluaW5nKSwgb3B0aW9uczogeyBjb2xzcGFuOiB0YWJsZS5udW1lcmljLmxlbmd0aCwgaXRhbGljOiB0cnVlLCBjb2xvcjogTVVURURfQ09MT1IgfSB9XV1cbiAgICAgICAgOiBbXSksXG4gICAgICAuLi4odGFibGUuZm9vdCA/IFt0YWJsZS5mb290Lm1hcCgodG90YWwpID0+IGNlbGwodG90YWwsIHsgYm9sZDogdHJ1ZSwgZmlsbDogeyBjb2xvcjogJ0U0RTdFQicgfSB9KSldIDogW10pLFxuICAgIF0sIHtcbiAgICAgIHgsIHksIHcsXG4gICAgICBmb250U2l6ZTogOSxcbiAgICAgIGNvbG9yOiAnMUYyOTMzJyxcbiAgICAgIGJvcmRlcjogeyB0eXBlOiAnc29saWQnLCBwdDogMC41LCBjb2xvcjogJ0U0RTdFQicgfSxcbiAgICAgIGF1dG9QYWdlOiBmYWxzZSxcbiAgICAgIHJvd0g6IFNMSURFX1JPV19ILFxuICAgICAgdmFsaWduOiAnbWlkZGxlJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgS1BJIHRpbGU6IHRoZSBjYXJkIHRoZSBzY3JlZW4gZHJhd3MgKGtwaS1jYXJkLnRzIGRlY2lkZXMgZXZlcnkgbGluZSksXG4gIC8vIGFzIG5hdGl2ZSB0ZXh0IGJveGVzIGFuZCBzaGFwZXMgc3RhY2tlZCBhbmQgY2VudGVyZWQgaW4gdGhlIGJvZHkuIEEgY2FyZFxuICAvLyB3aXRoIG9ubHkgaXRzIHZhbHVlIGFuZCBsYWJlbCBrZWVwcyB0aGUgdGlsZSdzIGxvbmctc3RhbmRpbmcgc2luZ2xlIHRleHRcbiAgLy8gYm94LlxuICBwcml2YXRlIF9yZW5kZXJLcGkoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LFxuICAgIHRpbWV6b25lOiBzdHJpbmcsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGl0ZW0uY29tcG9uZW50LmNvbmZpZyBhcyBLcGlDb25maWc7XG4gICAgY29uc3QgdmlldyA9IGtwaUNhcmRWaWV3KGNvbmZpZywgaXRlbS5kYXRhLCB7IGZvcm1hdDogY29udGV4dCwgdGltZXpvbmUgfSk7XG4gICAgY29uc3Qgbm90ZXMgPSBleHBvcnROb3RlTGluZXMoaXRlbSwgdGltZXpvbmUsIGNvbnRleHQubG9jYWxlKTtcblxuICAgIGlmICgha3BpQ2FyZEhhc0V4dHJhcyh2aWV3LCBub3RlcykpIHtcbiAgICAgIHNsaWRlLmFkZFRleHQoW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdmlldy52YWx1ZSxcbiAgICAgICAgICBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyh7IGZvbnRTaXplOiAyOCwgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnLCBicmVha0xpbmU6IHRydWUgfSwgY29udGV4dC5sb2NhbGUpLFxuICAgICAgICB9LFxuICAgICAgICB7IHRleHQ6IHZpZXcubGFiZWwsIG9wdGlvbnM6IHsgZm9udFNpemU6IDEwLCBjb2xvcjogTVVURURfQ09MT1IgfSB9LFxuICAgICAgXSwge1xuICAgICAgICB4LCB5LCB3LCBoLFxuICAgICAgICBhbGlnbjogJ2NlbnRlcicsXG4gICAgICAgIHZhbGlnbjogJ21pZGRsZScsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEEgdGlsZSB0b28gc2hvcnQgZm9yIHRoZSBjYXJkJ3MgbGluZXMgc2hyaW5rcyB0aGVtIGFsbCBhbGlrZS5cbiAgICBjb25zdCBwYXJ0cyA9IGtwaUV4cG9ydFBhcnRzKHZpZXcsIG5vdGVzLCBoLCBLUElfSEVJR0hUUyk7XG4gICAgY29uc3QgaGVpZ2h0cyA9IHNjYWxlZEtwaUhlaWdodHMoS1BJX0hFSUdIVFMsIHBhcnRzLnNjYWxlKTtcbiAgICBjb25zdCBsaW5lRm9udFNpemUgPSBLUElfTElORV9GT05UX1NJWkUgKiBwYXJ0cy5zY2FsZTtcbiAgICBsZXQgdG9wID0geSArIE1hdGgubWF4KDAsIChoIC0ga3BpRXhwb3J0SGVpZ2h0KHZpZXcsIHBhcnRzLCBoZWlnaHRzKSkgLyAyKTtcbiAgICBjb25zdCBsaW5lID0gKHJ1bnM6IGFueVtdIHwgc3RyaW5nLCByb3dIOiBudW1iZXIsIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICBzbGlkZS5hZGRUZXh0KHJ1bnMsIHtcbiAgICAgICAgeCwgeTogdG9wLCB3LCBoOiByb3dILFxuICAgICAgICBhbGlnbjogJ2NlbnRlcicsIHZhbGlnbjogJ21pZGRsZScsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHRvcCArPSByb3dIO1xuICAgIH07XG5cbiAgICBsaW5lKFxuICAgICAgW3sgdGV4dDogdmlldy52YWx1ZSwgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoeyBib2xkOiB0cnVlLCBjb2xvcjogJzFGMjkzMycgfSwgY29udGV4dC5sb2NhbGUpIH1dLFxuICAgICAgaGVpZ2h0cy52YWx1ZSxcbiAgICAgIHsgZm9udFNpemU6IDI4ICogcGFydHMuc2NhbGUgfSxcbiAgICApO1xuXG4gICAgaWYgKHZpZXcubGFiZWwpIHtcbiAgICAgIGxpbmUodmlldy5sYWJlbCwgaGVpZ2h0cy5sYWJlbCwgeyBmb250U2l6ZTogMTAgKiBwYXJ0cy5zY2FsZSwgY29sb3I6IE1VVEVEX0NPTE9SIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy5kZWx0YSAmJiB2aWV3LmRlbHRhKSB7XG4gICAgICB0aGlzLl9rcGlEZWx0YShwcHR4LCBzbGlkZSwgdmlldy5kZWx0YSwgY29udGV4dCwgeCwgdG9wLCB3LCBwYXJ0cy5zY2FsZSk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5kZWx0YTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMud2luZG93KSB7XG4gICAgICBjb25zdCBkYXlzID0gdGhpcy5fZml0RXN0aW1hdGUodmlldy53aW5kb3csIGxpbmVGb250U2l6ZSwgdyk7XG5cbiAgICAgIGxpbmUoW3sgdGV4dDogZGF5cywgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoe30sIGNvbnRleHQubG9jYWxlKSB9XSwgaGVpZ2h0cy53aW5kb3csIHtcbiAgICAgICAgZm9udFNpemU6IGxpbmVGb250U2l6ZSwgY29sb3I6IE1VVEVEX0NPTE9SLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnRhcmdldCAmJiB2aWV3LnRhcmdldCkge1xuICAgICAgdGhpcy5fa3BpVGFyZ2V0KHBwdHgsIHNsaWRlLCB2aWV3LnRhcmdldCwgeCwgdG9wLCB3KTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLnRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAocGFydHMuc3BhcmtsaW5lICYmIHZpZXcuc3BhcmtsaW5lKSB7XG4gICAgICB0aGlzLl9rcGlTcGFya2xpbmUocHB0eCwgc2xpZGUsIGl0ZW0sIHZpZXcuc3BhcmtsaW5lLnZhbHVlcywgdmlldy5sYWJlbCwgeCwgdG9wLCB3KTtcbiAgICAgIHRvcCArPSBoZWlnaHRzLnNwYXJrbGluZTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMubm90ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmaXR0ZWQgPSBwYXJ0cy5ub3Rlcy5tYXAoKG5vdGUpID0+IHRoaXMuX2ZpdEVzdGltYXRlKG5vdGUsIFNNQUxMX0ZPTlRfU0laRSwgdykpO1xuXG4gICAgICBsaW5lKHRoaXMuX2xpbmVSdW5zKGZpdHRlZCwgeyBpdGFsaWM6IHRydWUgfSksIHBhcnRzLm5vdGVzLmxlbmd0aCAqIGhlaWdodHMubm90ZSwge1xuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgZGVsdGEgcm93OiB0aGUgY2hhbmdlIGluIHRoZSBjb2xvciBvZiB3aGF0IGl0IG1lYW5zIGFuZCB3aGF0IGl0IGlzXG4gIC8vIGNvbXBhcmVkIHdpdGggaW4gZ3JleSwgYXMgb25lIGNlbnRlcmVkIHRleHQgYm94LCB3aXRoIGEgdHJpYW5nbGUgYmVzaWRlXG4gIC8vIGl0IHBvaW50aW5nIHRoZSB3YXkgdGhlIHZhbHVlIG1vdmVkIChub25lIHdoZW4gdGhlIHNob3duIGNoYW5nZSByb3VuZHMgdG9cbiAgLy8gemVybykuIFBvd2VyUG9pbnQgbGF5cyB0aGUgdGV4dCBvdXQgaXRzZWxmLCBzbyB0aGUgdHJpYW5nbGUgc2l0cyB3aGVyZVxuICAvLyB0aGUgdGV4dCdzIGVzdGltYXRlZCB3aWR0aCBwdXRzIGl0cyBzdGFydC5cbiAgcHJpdmF0ZSBfa3BpRGVsdGEoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgZGVsdGE6IEtwaUNhcmREZWx0YSxcbiAgICBjb250ZXh0OiBSZXBvcnRGb3JtYXRDb250ZXh0LFxuICAgIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlcixcbiAgICBzY2FsZSA9IDEsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbG9yID0gUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW2RlbHRhLnRvbmVdO1xuICAgIGNvbnN0IGZvbnRTaXplID0gS1BJX0xJTkVfRk9OVF9TSVpFICogc2NhbGU7XG4gICAgY29uc3Qgcm93SCA9IEtQSV9IRUlHSFRTLmRlbHRhICogc2NhbGU7XG4gICAgY29uc3Qgc2lkZSA9IEtQSV9BUlJPVyAqIHNjYWxlO1xuICAgIGNvbnN0IGFycm93ID0gZGVsdGEudHJlbmQgPT09IFJlcG9ydEtwaVRyZW5kLkZsYXQgPyAwIDogc2lkZSArIEtQSV9BUlJPV19HQVAgKiBzY2FsZTtcbiAgICBjb25zdCBjaGFuZ2VXID0gdGhpcy5fZXN0aW1hdGVkV2lkdGgoZGVsdGEudGV4dCwgZm9udFNpemUpO1xuICAgIGNvbnN0IGNvbXBhcmVkID0gZGVsdGEuY29tcGFyZWRcbiAgICAgID8gdGhpcy5fZml0RXN0aW1hdGUoYCAke2RlbHRhLmNvbXBhcmVkfWAsIGZvbnRTaXplLCB3IC0gYXJyb3cgLSBjaGFuZ2VXKVxuICAgICAgOiAnJztcbiAgICBjb25zdCB0ZXh0VyA9IE1hdGgubWluKHcgLSBhcnJvdywgY2hhbmdlVyArIHRoaXMuX2VzdGltYXRlZFdpZHRoKGNvbXBhcmVkLCBmb250U2l6ZSkpO1xuICAgIGNvbnN0IHJ1bnMgPSBbXG4gICAgICB7IHRleHQ6IGRlbHRhLnRleHQsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHsgYm9sZDogdHJ1ZSwgY29sb3IgfSwgY29udGV4dC5sb2NhbGUpIH0sXG4gICAgICAuLi4oY29tcGFyZWQgPyBbeyB0ZXh0OiBjb21wYXJlZCwgb3B0aW9uczogeyBjb2xvcjogTVVURURfQ09MT1IgfSB9XSA6IFtdKSxcbiAgICBdO1xuXG4gICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICB4OiB4ICsgYXJyb3csIHk6IHRvcCwgdzogTWF0aC5tYXgoMC4xLCB3IC0gYXJyb3cpLCBoOiByb3dILFxuICAgICAgZm9udFNpemUsIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIGlmIChhcnJvdykge1xuICAgICAgc2xpZGUuYWRkU2hhcGUocHB0eC5TaGFwZVR5cGUudHJpYW5nbGUsIHtcbiAgICAgICAgeDogTWF0aC5tYXgoeCwgeCArICh3IC0gYXJyb3cgLSB0ZXh0VykgLyAyKSxcbiAgICAgICAgeTogdG9wICsgKHJvd0ggLSBzaWRlKSAvIDIsXG4gICAgICAgIHc6IHNpZGUsXG4gICAgICAgIGg6IHNpZGUsXG4gICAgICAgIGZpbGw6IHsgY29sb3IgfSxcbiAgICAgICAgbGluZTogeyBjb2xvciwgd2lkdGg6IDAgfSxcbiAgICAgICAgZmxpcFY6IGRlbHRhLnRyZW5kID09PSBSZXBvcnRLcGlUcmVuZC5Eb3duLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWJvdXQgaG93IHdpZGUgYSBsaW5lIG9mIHRleHQgcnVucywgaW5jaGVzOiBQb3dlclBvaW50IGxheXMgaXQgb3V0LCBzb1xuICAvLyBvbmx5IGFuIGVzdGltYXRlIGZyb20gaXRzIGF2ZXJhZ2UgY2hhcmFjdGVyIHdpZHRoIGlzIHRvIGhhbmQuXG4gIHByaXZhdGUgX2VzdGltYXRlZFdpZHRoKHRleHQ6IHN0cmluZywgZm9udFNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRleHQubGVuZ3RoICogZm9udFNpemUgKiBQUFRYX0NIQVJfV0lEVEggLyA3MjtcbiAgfVxuXG4gIC8vIFRoZSB0ZXh0IGN1dCB3aXRoIGFuIGVsbGlwc2lzIHRvIGFib3V0IHRoZSB3aWR0aCwgc28gYSBsaW5lIHRoYXQgd291bGRcbiAgLy8gd3JhcCBwYXN0IGl0cyByb3cgc3RheXMgb25lIGxpbmUuXG4gIHByaXZhdGUgX2ZpdEVzdGltYXRlKHRleHQ6IHN0cmluZywgZm9udFNpemU6IG51bWJlciwgd2lkdGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2VzdGltYXRlZFdpZHRoKHRleHQsIGZvbnRTaXplKSA8PSB3aWR0aCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKHdpZHRoICogNzIgLyAoZm9udFNpemUgKiBQUFRYX0NIQVJfV0lEVEgpKSAtIDEpO1xuXG4gICAgcmV0dXJuIGNoYXJzID8gYCR7dGV4dC5zbGljZSgwLCBjaGFycykudHJpbUVuZCgpfeKApmAgOiAnJztcbiAgfVxuXG4gIC8vIFRoZSB0YXJnZXQgbGluZSAoJ0dvYWw6ICQxLDAwMCDCtyA1NiUgb2YgdGFyZ2V0JykgYW5kLCB3aGVuIHRoZSBzZXJ2ZXIgc2VudFxuICAvLyB0aGUgcHJvZ3Jlc3MsIGEgYmFyIGZpbGxlZCB0aGF0IGZhcjogZ3JlZW4gb25jZSB0aGUgdGFyZ2V0IGlzIG1ldC5cbiAgcHJpdmF0ZSBfa3BpVGFyZ2V0KHBwdHg6IGFueSwgc2xpZGU6IGFueSwgdGFyZ2V0OiBLcGlDYXJkVGFyZ2V0LCB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXh0ID0gdGFyZ2V0LnByb2dyZXNzID8gYCR7dGFyZ2V0LnRleHR9IMK3ICR7dGFyZ2V0LnByb2dyZXNzfWAgOiB0YXJnZXQudGV4dDtcblxuICAgIHNsaWRlLmFkZFRleHQodGhpcy5fZml0RXN0aW1hdGUodGV4dCwgS1BJX0xJTkVfRk9OVF9TSVpFLCB3KSwge1xuICAgICAgeCwgeTogdG9wLCB3LCBoOiBLUElfVEFSR0VUX1RFWFRfSCxcbiAgICAgIGZvbnRTaXplOiBLUElfTElORV9GT05UX1NJWkUsIGNvbG9yOiBNVVRFRF9DT0xPUiwgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLCBtYXJnaW46IDAsIGZpdDogJ25vbmUnLFxuICAgIH0pO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFyVyA9IE1hdGgubWluKHcgKiAwLjYsIEtQSV9CQVJfVyk7XG4gICAgY29uc3QgYmFyWCA9IHggKyAodyAtIGJhclcpIC8gMjtcbiAgICBjb25zdCBiYXJZID0gdG9wICsgS1BJX1RBUkdFVF9URVhUX0ggKyBLUElfQkFSX0dBUDtcbiAgICBjb25zdCBiYXIgPSAod2lkdGg6IG51bWJlciwgY29sb3I6IHN0cmluZykgPT4gc2xpZGUuYWRkU2hhcGUocHB0eC5TaGFwZVR5cGUucmVjdCwge1xuICAgICAgeDogYmFyWCwgeTogYmFyWSwgdzogd2lkdGgsIGg6IEtQSV9CQVJfSCwgZmlsbDogeyBjb2xvciB9LCBsaW5lOiB7IGNvbG9yLCB3aWR0aDogMCB9LFxuICAgIH0pO1xuXG4gICAgYmFyKGJhclcsIEtQSV9UUkFDS19DT0xPUik7XG5cbiAgICBpZiAodGFyZ2V0LmZpbGwgPiAwKSB7XG4gICAgICBiYXIoYmFyVyAqIHRhcmdldC5maWxsLCBSRVBPUlRfS1BJX0NIQU5HRV9DT0xPUlNbdGFyZ2V0LnRvbmVdKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgc3BhcmtsaW5lIGFzIGEgbmF0aXZlIGxpbmUgY2hhcnQgd2l0aCBpdHMgYXhlcywgZ3JpZGxpbmVzIGFuZCBsZWdlbmRcbiAgLy8gaGlkZGVuLCBzY2FsZWQgZnJvbSBpdHMgbG93ZXN0IHZhbHVlIHRvIGl0cyBoaWdoZXN0IGFzIG9uIHNjcmVlbiwgaXRzXG4gIC8vIHBlcmlvZHMgYW5kIHZhbHVlcyBpbiB0aGUgY2hhcnQncyBkYXRhIHNoZWV0LiBBIGdhcCBzdGF5cyBhIGdhcC4gTWFya2Vyc1xuICAvLyBzaG93IG9ubHkgd2hlbiBhIHZhbHVlIHN0YW5kcyBhbG9uZSBiZXR3ZWVuIGdhcHMgKHRoZSBsYXN0IG9uZSB0b28pLFxuICAvLyB3aGljaCBhIGxpbmUgY2Fubm90IGRyYXcuXG4gIHByaXZhdGUgX2twaVNwYXJrbGluZShcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIHg6IG51bWJlciwgdG9wOiBudW1iZXIsIHc6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgbnVtYmVycyA9IHZhbHVlcy5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgbnVtYmVyID0+IHZhbHVlICE9PSBudWxsKTtcbiAgICBjb25zdCBsb3cgPSBNYXRoLm1pbiguLi5udW1iZXJzKTtcbiAgICBjb25zdCBoaWdoID0gTWF0aC5tYXgoLi4ubnVtYmVycyk7XG4gICAgY29uc3QgcGFkID0gaGlnaCA9PT0gbG93ID8gTWF0aC5tYXgoMSwgTWF0aC5hYnMoaGlnaCkpIDogMDtcbiAgICBjb25zdCBib3hXID0gTWF0aC5taW4odyAqIDAuNywgS1BJX1NQQVJLTElORV9XKTtcbiAgICBjb25zdCBnZW9tZXRyeSA9IGtwaVNwYXJrbGluZUdlb21ldHJ5KHZhbHVlcywgZmFsc2UpO1xuICAgIC8vIGtwaVNwYXJrbGluZUdlb21ldHJ5IGtlZXBzIHRoZSBsYXN0IHBvaW50IG91dCBvZiB0aGUgZG90cywgYXMgdGhlXG4gICAgLy8gc2NyZWVuIG1hcmtzIGl0IGFwYXJ0OyBhIGxhc3QgdmFsdWUgYWZ0ZXIgYSBnYXAgaXMgYSBsb25lIHBvaW50IHRvby5cbiAgICBjb25zdCBsYXN0U3RhbmRzQWxvbmUgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdICE9PSBudWxsXG4gICAgICAmJiAodmFsdWVzLmxlbmd0aCA9PT0gMSB8fCB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDJdID09PSBudWxsKTtcbiAgICBjb25zdCBwZXJpb2RzID0gaXRlbS5kYXRhPy5rcGk/LnNwYXJrbGluZT8ucG9pbnRzPy5tYXAoKHBvaW50KSA9PiBwb2ludC5wZXJpb2QpID8/IFtdO1xuICAgIGNvbnN0IGNvbG9yID0gUkVQT1JUX0tQSV9TUEFSS0xJTkVfQ09MT1I7XG5cbiAgICB0aGlzLl9hZGRDaGFydChzbGlkZSwgeyBsaW5lOiBwcHR4LkNoYXJ0VHlwZS5saW5lIH0sIFt7XG4gICAgICB0eXBlOiAnbGluZScsXG4gICAgICBpbmRleGVzOiBbMF0sXG4gICAgICBzZWNvbmRhcnk6IGZhbHNlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjaGFydENvbG9yczogW2NvbG9yXSxcbiAgICAgICAgbGluZVNpemU6IDEuNSxcbiAgICAgICAgbGluZURhdGFTeW1ib2w6IGdlb21ldHJ5LmRvdHMubGVuZ3RoIHx8IGxhc3RTdGFuZHNBbG9uZSA/ICdjaXJjbGUnIDogJ25vbmUnLFxuICAgICAgICBsaW5lRGF0YVN5bWJvbFNpemU6IDQsXG4gICAgICB9LFxuICAgIH1dLCBbe1xuICAgICAgbmFtZTogbGFiZWwgfHwgS1BJX1NQQVJLTElORV9OQU1FLFxuICAgICAgbGFiZWxzOiB2YWx1ZXMubWFwKChfLCBpbmRleCkgPT4gcGVyaW9kc1tpbmRleF0gPz8gU3RyaW5nKGluZGV4ICsgMSkpLFxuICAgICAgdmFsdWVzLFxuICAgIH1dLCB7XG4gICAgICB4OiB4ICsgKHcgLSBib3hXKSAvIDIsIHk6IHRvcCwgdzogYm94VywgaDogS1BJX0hFSUdIVFMuc3BhcmtsaW5lLFxuICAgICAgc2hvd0xlZ2VuZDogZmFsc2UsXG4gICAgICBzaG93VGl0bGU6IGZhbHNlLFxuICAgICAgY2F0QXhpc0hpZGRlbjogdHJ1ZSxcbiAgICAgIHZhbEF4aXNIaWRkZW46IHRydWUsXG4gICAgICBjYXRBeGlzTGluZVNob3c6IGZhbHNlLFxuICAgICAgdmFsQXhpc0xpbmVTaG93OiBmYWxzZSxcbiAgICAgIHNob3dDYXRBeGlzVGl0bGU6IGZhbHNlLFxuICAgICAgc2hvd1ZhbEF4aXNUaXRsZTogZmFsc2UsXG4gICAgICB2YWxHcmlkTGluZTogeyBzdHlsZTogJ25vbmUnIH0sXG4gICAgICBjYXRHcmlkTGluZTogeyBzdHlsZTogJ25vbmUnIH0sXG4gICAgICB2YWxBeGlzTWluVmFsOiBsb3cgLSBwYWQsXG4gICAgICB2YWxBeGlzTWF4VmFsOiBoaWdoICsgcGFkLFxuICAgICAgLi4uQkxBTktTX0FTX0dBUFMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJykucmVwbGFjZSgvXi0rfC0rJC9nLCAnJykgfHwgJ3JlcG9ydCc7XG4gIH1cbn1cblxuLy8gR2l2ZXMgYSB0ZXh0IHRhYmxlJ3MgY2VsbCB0aGUgZ3JpZCBzbG90cyBpdCBjb3ZlcnMgZnJvbSBpdHMgdG9wIGxlZnQ6IGFzXG4vLyBtYW55IGNvbHVtbnMgYXMgYXJlIGZyZWUgaW4gaXRzIHRvcCByb3csIGFuZCBhcyBtYW55IHJvd3MgZG93biBhcyBhcmUgZnJlZVxuLy8gYWNyb3NzIHRob3NlIGNvbHVtbnMsIGF0IG1vc3QgaXRzIG93biBzcGFucy4gQSBzbG90IGlzIGZyZWUgdW50aWwgYSBjZWxsXG4vLyBwbGFjZWQgYmVmb3JlIGl0IGhvbGRzIGl0LCBhbmQgdGhlIGdyaWQgaG9sZHMgb25seSB0aGUga2VwdCByb3dzLiBTbyBhIHNwYW5cbi8vIHRoZSBib3ggY3V0cyBlbmRzIGF0IHRoZSBsYXN0IGtlcHQgcm93LCBhbmQgb25lIHRoZSBodG1sIG1ha2VzIG92ZXJsYXBcbi8vIGFub3RoZXIgY2VsbCAod2hpY2ggYSBicm93c2VyIGRyYXdzIG9uIHRvcCBvZiBpdCkgZW5kcyB3aGVyZSB0aGV5IG1lZXQuXG5mdW5jdGlvbiBjbGFpbVNsb3RzKHNsb3RzOiAoVGV4dFRhYmxlQ2VsbCB8IG51bGwpW11bXSwgY2VsbDogVGV4dFRhYmxlQ2VsbCk6IHZvaWQge1xuICBjb25zdCBmcmVlID0gKHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcikgPT4gcm93IDwgc2xvdHMubGVuZ3RoICYmIGNvbHVtbiA8IHNsb3RzW3Jvd10ubGVuZ3RoICYmICFzbG90c1tyb3ddW2NvbHVtbl07XG4gIGNvbnN0IGNvbHVtbnMgPSAoY291bnQ6IG51bWJlcikgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIG9mZnNldCkgPT4gY2VsbC5jb2x1bW4gKyBvZmZzZXQpO1xuICBsZXQgY29sU3BhbiA9IDA7XG4gIGxldCByb3dTcGFuID0gMDtcblxuICB3aGlsZSAoY29sU3BhbiA8IGNlbGwuY29sU3BhbiAmJiBmcmVlKGNlbGwucm93LCBjZWxsLmNvbHVtbiArIGNvbFNwYW4pKSB7XG4gICAgY29sU3BhbisrO1xuICB9XG4gIHdoaWxlIChjb2xTcGFuICYmIHJvd1NwYW4gPCBjZWxsLnJvd1NwYW4gJiYgY29sdW1ucyhjb2xTcGFuKS5ldmVyeSgoY29sdW1uKSA9PiBmcmVlKGNlbGwucm93ICsgcm93U3BhbiwgY29sdW1uKSkpIHtcbiAgICByb3dTcGFuKys7XG4gIH1cblxuICBjb25zdCBjbGFpbWVkID0geyAuLi5jZWxsLCBjb2xTcGFuLCByb3dTcGFuIH07XG4gIGZvciAobGV0IHJvdyA9IGNlbGwucm93OyByb3cgPCBjZWxsLnJvdyArIHJvd1NwYW47IHJvdysrKSB7XG4gICAgc2xvdHNbcm93XS5maWxsKGNsYWltZWQsIGNlbGwuY29sdW1uLCBjZWxsLmNvbHVtbiArIGNvbFNwYW4pO1xuICB9XG59XG4iXX0=
1361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXBwdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9leHBvcnQvcmVwb3J0LXBwdHguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUN0QixNQUFNLFdBQVcsQ0FBQztBQWdCbkIsT0FBTyxFQUErQixXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSx1QkFBdUIsRUFDakMsZUFBZSxFQUFFLFVBQVUsR0FDM0csTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUViLGNBQWMsRUFFZCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFFZCxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixhQUFhLEVBQ2IsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLFVBQVUsRUFFVixjQUFjLEdBRWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4QiwwQkFBMEIsRUFDMUIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUM2QyxrQkFBa0IsRUFBa0MsVUFBVSxFQUNoSCxVQUFVLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUN0RyxlQUFlLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFDM0csWUFBWSxHQUNiLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFrQixlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RSxPQUFPLEVBQ0wsY0FBYyxFQUFFLHVCQUF1QixHQUN4QyxNQUFNLDhCQUE4QixDQUFDOztBQUd0QyxxREFBcUQ7QUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBRXJCLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLHFEQUFxRDtBQUNyRCxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUM7QUFFNUMsc0VBQXNFO0FBQ3RFLCtEQUErRDtBQUMvRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLE1BQU0sV0FBVyxHQUFxQjtJQUNwQyxLQUFLLEVBQUUsSUFBSTtJQUNYLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxNQUFNLEVBQUUsSUFBSTtJQUNaLE1BQU0sRUFBRSxpQkFBaUIsR0FBRyxXQUFXLEdBQUcsU0FBUyxHQUFHLElBQUk7SUFDMUQsU0FBUyxFQUFFLElBQUk7SUFDZixJQUFJLEVBQUUsV0FBVztDQUNsQixDQUFDO0FBQ0Ysa0RBQWtEO0FBQ2xELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzNCLDJFQUEyRTtBQUMzRSw0Q0FBNEM7QUFDNUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQzdCLHFEQUFxRDtBQUNyRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUM7QUFDL0MsNkVBQTZFO0FBQzdFLHdCQUF3QjtBQUN4QixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUM7QUFFbkMsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSxrQ0FBa0M7QUFDbEMsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLENBQUM7QUFDNUMsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUM7QUFDckMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7QUFDbEMsdUVBQXVFO0FBQ3ZFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUV6QiwyRUFBMkU7QUFDM0UsdUNBQXVDO0FBQ3ZDLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXpDLDRFQUE0RTtBQUM1RSx3RUFBd0U7QUFDeEUsdUNBQXVDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFFbEMsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxVQUFVO0FBQ1YsTUFBTSxlQUFlLEdBQWtEO0lBQ3JFLEdBQUcsRUFBRSxHQUFHO0lBQ1IsTUFBTSxFQUFFLEdBQUc7SUFDWCxJQUFJLEVBQUUsR0FBRztJQUNULEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7Q0FDWixDQUFDO0FBRUYsZ0ZBQWdGO0FBQ2hGLHFFQUFxRTtBQUNyRSw0REFBNEQ7QUFDNUQsTUFBTSxzQkFBc0IsR0FBc0M7SUFDaEUsSUFBSSxFQUFFLFVBQVU7SUFDaEIsSUFBSSxFQUFFLFVBQVU7SUFDaEIsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUYsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSw4RUFBOEU7QUFDOUUsTUFBTSxjQUFjLEdBQUcsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFXLENBQUM7QUFFM0QsOEVBQThFO0FBQzlFLGdCQUFnQjtBQUNoQixNQUFNLGVBQWUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFXLENBQUM7QUFFaEgsNkVBQTZFO0FBQzdFLG1EQUFtRDtBQUNuRCxNQUFNLGNBQWMsR0FBeUM7SUFDM0QsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0lBQ3JDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTTtJQUNyQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVE7Q0FDeEMsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUVoQyx1RUFBdUU7QUFDdkUsZ0VBQWdFO0FBQ2hFLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLHlFQUF5RTtBQUN6RSxVQUFVO0FBQ1YsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFFcEMseUVBQXlFO0FBQ3pFLDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFFN0MseUVBQXlFO0FBQ3pFLHdCQUF3QjtBQUN4QixNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUVsQyw4RUFBOEU7QUFDOUUsd0RBQXdEO0FBQ3hELE1BQU0sc0JBQXNCLEdBQUcsVUFBVSxDQUFDO0FBRTFDLDRFQUE0RTtBQUM1RSx3QkFBd0I7QUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxtRkFBbUY7TUFDMUcsV0FBVyxDQUFDO0FBRWhCLDZFQUE2RTtBQUM3RSxzREFBc0Q7QUFDdEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFFaEMsMkVBQTJFO0FBQzNFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsYUFBYTtBQUNiLE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsdUJBQXVCLENBQUMsUUFBUTtJQUNoQyx1QkFBdUIsQ0FBQyxVQUFVO0lBQ2xDLHVCQUF1QixDQUFDLFFBQVE7SUFDaEMsdUJBQXVCLENBQUMsVUFBVTtDQUNuQyxDQUFDO0FBRUYsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSxNQUFNLG9CQUFvQixHQUFtQixLQUFLLENBQUM7QUErQm5ELGdGQUFnRjtBQUNoRiw4RUFBOEU7QUFDOUUsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLCtEQUErRDtBQUMvRCxNQUFNLFVBQVUsY0FBYyxDQUM1QixPQUFnQyxFQUNoQyxXQUE2QjtJQUU3QixPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNuRSxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLDJFQUEyRTtBQUMzRSw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSxtRUFBbUU7QUFDbkUsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSx3QkFBd0I7QUFFeEIsTUFBTSxPQUFPLGlCQUFpQjtJQUVYLFdBQVcsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUV4RCxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQTBCO1FBQzNDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFFdEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFFaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUV6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhELDBFQUEwRTtRQUMxRSxzREFBc0Q7UUFDdEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFFbEQsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsWUFBWSxFQUFFLGtCQUFrQjtZQUNoQyxxRUFBcUU7WUFDckUsd0NBQXdDO1lBQ3hDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsdUVBQXVFO0lBQ3ZFLFVBQVU7SUFDRixLQUFLLENBQUMsV0FBVyxDQUN2QixJQUFTLEVBQ1QsU0FBMEIsRUFDMUIsS0FBYSxFQUNiLFNBQW9DO1FBRXBDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDaEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRSxNQUFNLFVBQVUsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEYsQ0FBQztpQkFBTSxJQUFJLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDL0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLHdFQUF3RTtJQUNoRSxLQUFLLENBQUMsYUFBYSxDQUN6QixLQUFVLEVBQ1YsU0FBMEIsRUFDMUIsTUFBd0IsRUFDeEIsU0FBb0M7UUFFcEMsTUFBTSxZQUFZLEdBQUc7WUFDbkIsR0FBRyxNQUFNO1lBQ1QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxZQUFZO1lBQzlCLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUM7U0FDOUYsQ0FBQztRQUVGLEtBQUssTUFBTSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDcEYsSUFBSSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDL0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSw0QkFBNEI7SUFDcEIsZUFBZSxDQUNyQixTQUFvQyxFQUNwQyxTQUEwQixFQUMxQixJQUFZLEVBQ1osTUFBd0I7UUFFeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsSUFBUyxFQUFFLFNBQTBCLEVBQUUsS0FBYSxFQUFFLEtBQWE7UUFDckYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTlCLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDbkMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRztZQUM1QyxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVE7U0FDMUMsQ0FBQyxDQUFDO1FBRUgsdUVBQXVFO1FBQ3ZFLG9FQUFvRTtRQUNwRSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsY0FBYyxDQUNyQixFQUFFLFNBQVMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFDdkMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDekQ7U0FDRixDQUFDLENBQUMsQ0FBQztRQUVKLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2xCLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNqRixRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsd0VBQXdFO0lBQ3hFLDJFQUEyRTtJQUMzRSx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQzVFLDhCQUE4QjtJQUN0QixLQUFLLENBQUMsV0FBVyxDQUFDLEtBQVUsRUFBRSxTQUEwQixFQUFFLE1BQXdCO1FBQ3hGLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3pFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBRTdDLDRFQUE0RTtRQUM1RSx1RUFBdUU7UUFDdkUseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9GLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUU1RCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDcEYsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSx1REFBdUQ7SUFDL0MsV0FBVyxDQUFDLEtBQVUsRUFBRSxTQUEwQixFQUFFLFVBQTJCO1FBQ3JGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUkseUJBQXlCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdkYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDbEIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlELE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLE9BQU87WUFDakIsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRyxHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLHdFQUF3RTtJQUN4RSx5RUFBeUU7SUFDekUseUVBQXlFO0lBQ3pFLFlBQVk7SUFDSixnQkFBZ0IsQ0FDdEIsS0FBVSxFQUNWLFNBQTBCLEVBQzFCLE1BQW1CLEVBQ25CLE1BQXVCO1FBRXZCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLHlCQUF5QixDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUkseUJBQXlCLENBQUMsQ0FBQztRQUNwRSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUVwQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUV0RixPQUFPLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLHlFQUF5RTtJQUNqRSxlQUFlLENBQ3JCLEtBQVUsRUFDVixVQUEyQixFQUMzQixPQUFpQyxFQUNqQyxNQUF1QixFQUN2QixDQUFTLEVBQUUsQ0FBUztRQUVwQixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzdDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzVHLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxFQUFFLEtBQUs7WUFDYixRQUFRLEVBQUUsT0FBTztZQUNqQixHQUFHLEVBQUUsTUFBTTtTQUNaLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSx1RUFBdUU7SUFDdkUsNkVBQTZFO0lBQzdFLDhDQUE4QztJQUN0QyxhQUFhLENBQ25CLEtBQVUsRUFDVixLQUFnQixFQUNoQixXQUE0QixFQUM1QixNQUF1QixFQUN2QixDQUFTLEVBQUUsQ0FBUztRQUVwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFL0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQzNDLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUk7Z0JBQ3ZCLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUc7Z0JBQ3RCLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSztnQkFDcEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxZQUFZO2dCQUM5QixJQUFJLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztnQkFDM0MsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ3ZHLE1BQU0sRUFBRSxzQkFBc0I7YUFDL0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnRUFBZ0U7SUFDeEQsU0FBUyxDQUFDLFdBQTRCLEVBQUUsYUFBcUI7UUFDbkUsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUM3QixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFFYixLQUFLLE1BQU0sU0FBUyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksU0FBUyxDQUFDO1lBQ3BCLElBQUksTUFBTSxHQUFHLGFBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztnQkFDNUMsTUFBTTtZQUNSLENBQUM7WUFFRCxJQUFJLEVBQUUsQ0FBQztRQUNULENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLG1FQUFtRTtJQUNuRSxnQkFBZ0I7SUFDUixVQUFVLENBQUMsS0FBZ0IsRUFBRSxJQUFZO1FBQy9DLE1BQU0sS0FBSyxHQUErQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDL0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hGLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDJFQUEyRTtJQUMzRSxxQ0FBcUM7SUFDN0IsVUFBVSxDQUFDLElBQW1CO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxELE9BQU87WUFDTCxxREFBcUQ7WUFDckQsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixPQUFPLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDbkUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRO2dCQUMvQixNQUFNLEVBQUUsc0JBQXNCO2FBQy9CO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsNEVBQTRFO0lBQzVFLGtFQUFrRTtJQUMxRCxjQUFjLENBQUMsVUFBMkI7UUFDaEQsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzdDLE1BQU0sTUFBTSxHQUFHLEtBQUssS0FBSyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQyxNQUFNLGdCQUFnQixHQUFHO2dCQUN2QixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7Z0JBQ3RCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxLQUFLLFFBQVE7b0JBQ25DLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQ3BCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUN2RCxDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQWMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVoRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ2QsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUMxRixDQUFDLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSwwRUFBMEU7SUFDbEUsV0FBVyxDQUNqQixHQUFZLEVBQ1osZ0JBQXlDLEVBQ3pDLFNBQWtCO1FBRWxCLE9BQU87WUFDTCxHQUFHLGdCQUFnQjtZQUNuQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDZCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07WUFDbEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3ZELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDNUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3pELFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzFDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLGlCQUFpQjtZQUMzQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNuRCxTQUFTO1NBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLHdFQUF3RTtJQUN4RSwrQkFBK0I7SUFDdkIsT0FBTyxDQUFDLFNBQTBCLEVBQUUsSUFBZ0IsRUFBRSxLQUFhO1FBQ3pFLE9BQU87WUFDTCxVQUFVLEVBQUUsS0FBSyxHQUFHLENBQUM7WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQzFDLFVBQVUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDakMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDakcsQ0FBQztJQUNKLENBQUM7SUFFRCx3RUFBd0U7SUFDaEUsZ0JBQWdCLENBQ3RCLElBQVMsRUFDVCxLQUFVLEVBQ1YsSUFBd0IsRUFDeEIsTUFBd0IsRUFDeEIsUUFBZ0IsRUFDaEIsT0FBNEI7UUFFNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxvREFBb0Q7UUFDcEQsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUVqQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RGLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDbkIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU87Z0JBQ25CLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLO2FBQ3pELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhGLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDN0QsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVTtnQkFDbkMsUUFBUSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTTthQUNyRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBRTlELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWxGLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtnQkFDekQsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXO2dCQUNwRCxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNO2FBQ3JGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLO2dCQUN4QixRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRO2FBQ2xGLENBQUMsQ0FBQztZQUVILE9BQU87UUFDVCxDQUFDO1FBRUQsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xGLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMxRyxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEUsTUFBTTtZQUNSLEtBQUssS0FBSztnQkFDUixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzFFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELGlEQUFpRDtJQUN6QyxTQUFTLENBQUMsS0FBd0IsRUFBRSxVQUFtQyxFQUFFO1FBQy9FLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRU8sWUFBWSxDQUNsQixJQUFTLEVBQ1QsS0FBVSxFQUNWLFNBQTBCLEVBQzFCLElBQW1CLEVBQ25CLE9BQTRCLEVBQzVCLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFFMUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQXFCLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7UUFFNUMsSUFBSSxTQUFTLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFekUsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEQsTUFBTSxPQUFPLEdBQXdCO1lBQ25DLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQ3pCLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtTQUMvQixDQUFDO1FBRUYsTUFBTSxHQUFHLEdBQUcsU0FBUyxLQUFLLEtBQUssSUFBSSxTQUFTLEtBQUssT0FBTyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUNqQyxTQUFTLENBQUMsVUFBVSxFQUNwQixJQUFJLENBQUMsV0FBVyxFQUNoQixPQUFPLENBQUMsTUFBTSxFQUNkLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FDdkIsQ0FBQztRQUNGLDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFdkQseUVBQXlFO1FBQ3pFLDhFQUE4RTtRQUM5RSw4RUFBOEU7UUFDOUUsNkVBQTZFO1FBQzdFLDREQUE0RDtRQUM1RCxNQUFNLFdBQVcsR0FBRyxPQUFPO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO29CQUNELElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ2hFLE1BQU07b0JBQ04sTUFBTSxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUM7aUJBQ2pDLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztpQkFDdEQsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixNQUFNO2dCQUNOLG1FQUFtRTtnQkFDbkUsOEJBQThCO2dCQUM5QixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUMvRixDQUFDLENBQUMsQ0FBQztRQUVSLDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsTUFBTSxlQUFlLEdBQWEsR0FBRztZQUNuQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDYixDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RSxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekUseUVBQXlFO1FBQ3pFLDhCQUE4QjtRQUM5QixNQUFNLFdBQVcsR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckgsMEVBQTBFO1FBQzFFLHlFQUF5RTtRQUN6RSxNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sU0FBUyxHQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUNuRSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFDdEcsS0FBSyxDQUNOLENBQUMsQ0FBQztRQUVILHdFQUF3RTtRQUN4RSxxQ0FBcUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsR0FBRztZQUNuQixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQztnQkFDQSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO2dCQUNuQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQzthQUNoRyxDQUFDO1FBQ0osTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RyxNQUFNLFNBQVMsR0FBRztZQUNoQixHQUFHLFdBQVc7WUFDZCxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNoRyxDQUFDO1FBRUYsdUVBQXVFO1FBQ3ZFLHFEQUFxRDtRQUNyRCxNQUFNLE9BQU8sR0FBRztZQUNkLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDVixVQUFVLEVBQUUsY0FBYyxLQUFLLFFBQVE7WUFDdkMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxjQUFjLENBQUM7WUFDMUMsY0FBYyxFQUFFLENBQUM7WUFDakIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDM0QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDL0QsUUFBUSxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNoRCxHQUFHLENBQUMsT0FBTztnQkFDVCxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQztnQkFDOUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLEdBQUcsY0FBYztZQUNqQix5RUFBeUU7WUFDekUscUVBQXFFO1lBQ3JFLG9EQUFvRDtZQUNwRCxHQUFHLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckUsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQzthQUN2QyxDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDN0QsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELGVBQWUsRUFBRSw0QkFBNEI7YUFDOUMsQ0FBQztZQUNGLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtTQUN2QyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUUsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztpQkFDakcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUYsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNHLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSx1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsMkNBQTJDO0lBQ25DLGVBQWUsQ0FDckIsTUFBbUIsRUFDbkIsT0FBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsYUFBcUI7UUFFckIsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksb0JBQW9CLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0Usa0NBQWtDO0lBQzFCLGVBQWUsQ0FBQyxVQUE0QjtRQUNsRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUVsSSxPQUFPLFNBQVMsQ0FBQyxJQUFJO2dCQUNuQixDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLHNCQUFzQixFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsd0VBQXdFO0lBQ3hFLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQ2xFLFVBQVUsQ0FDaEIsTUFBbUIsRUFDbkIsU0FBK0IsRUFDL0IsV0FBNkIsRUFDN0IsTUFBNEIsRUFDNUIsT0FBZ0IsRUFDaEIsV0FBbUI7UUFFbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLENBQ1gsSUFBWSxFQUNaLE1BQXlCLEVBQ3pCLElBQXlCLEVBQ3pCLEtBQWEsRUFDYixTQUFrQixFQUNFLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEMsT0FBTyxLQUFLLEtBQUssSUFBSTtnQkFDbkIsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDLENBQUM7UUFFRixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFM0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RHLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsT0FBTyxJQUFJO2dCQUNULENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEgsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxzRUFBc0U7SUFDdEUsMEVBQTBFO0lBQ2xFLGNBQWMsQ0FBQyxJQUFzQixFQUFFLEtBQWEsRUFBRSxTQUFpQjtRQUM3RSxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU07WUFDWixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLE9BQU8sRUFBRTtnQkFDUCxXQUFXLEVBQUUsS0FBSyxDQUFTLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN0RCxRQUFRLEVBQUUsY0FBYyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztnQkFDckQsY0FBYyxFQUFFLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM5RTtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSx1RkFBdUY7SUFDdkYseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSw0REFBNEQ7SUFDNUQsb0VBQW9FO0lBQzVELG1CQUFtQixDQUN6QixNQUFtQixFQUNuQixTQUErQixFQUMvQixXQUE2QixFQUM3QixPQUE0QixFQUM1QixNQUE0QixFQUM1QixVQUE0QjtRQUU1QixNQUFNLEtBQUssR0FBRyxDQUFDLFNBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXBILElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFaEYsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBRUQsT0FBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN6QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUV2RixPQUFPLElBQUksQ0FBQyxjQUFjLENBQ3hCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUN4RCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUMzQixPQUFPLEVBQ1AsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUNqQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLDJFQUEyRTtJQUMzRSxxRUFBcUU7SUFDckUsRUFBRTtJQUNGLDBFQUEwRTtJQUMxRSx3RUFBd0U7SUFDeEUsdUVBQXVFO0lBQ3ZFLHlFQUF5RTtJQUN6RSx3RUFBd0U7SUFDeEUsa0RBQWtEO0lBQ2xELEVBQUU7SUFDRixxRUFBcUU7SUFDckUseUVBQXlFO0lBQ3pFLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUseUVBQXlFO0lBQ2pFLGVBQWUsQ0FDckIsS0FBZ0IsRUFDaEIsTUFBbUIsRUFDbkIsV0FBcUIsRUFDckIsTUFBNEIsRUFDNUIsYUFBcUI7UUFFckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLEtBQUsscUJBQXFCLENBQUMsR0FBRztlQUMxQyxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLElBQUksYUFBYSxJQUFJLDBCQUEwQixDQUFDO2VBQ3BGLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUU1QyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsS0FBSyxLQUFLLElBQUksU0FBUyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzFELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTlELE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPLEVBQUU7Z0JBQ1AsR0FBRyxLQUFLLENBQUMsT0FBTztnQkFDaEIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixpQkFBaUIsRUFBRSx5QkFBeUI7Z0JBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNyRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUNsRSxtQkFBbUIsQ0FBQyxNQUFxQjtRQUMvQyxPQUFPO1lBQ0wsYUFBYSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDckMsYUFBYSxFQUFFLGdCQUFnQjtZQUMvQixnQkFBZ0IsRUFBRSxxQkFBcUI7WUFDdkMsc0JBQXNCLEVBQUUsd0JBQXdCO1NBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLG9FQUFvRTtJQUNwRSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSwwQkFBMEI7SUFDbEIsZUFBZSxDQUNyQixNQUFtQixFQUNuQixJQUFtQixFQUNuQixXQUFxQixFQUNyQixNQUE0QixFQUM1QixRQUFtQixFQUNuQixTQUFtQjtRQUVuQixNQUFNLFNBQVMsR0FBRyxDQUFDLFNBQXlCLEVBQUUsRUFBRTtZQUM5QyxNQUFNLElBQUksR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRTFGLElBQUksTUFBTSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0QsQ0FBQztZQUVELE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUMvRSxDQUFDLENBQUM7UUFDRix5RUFBeUU7UUFDekUsOEJBQThCO1FBQzlCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLGVBQWUsRUFBRSw0QkFBNEIsRUFBRTtZQUNoRyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxPQUFPO1lBQ0wsR0FBRyxlQUFlO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQzVFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUM3QyxDQUFDO0lBQ0osQ0FBQztJQUVELDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUscUVBQXFFO0lBQ3JFLGdEQUFnRDtJQUN4QyxnQkFBZ0IsQ0FBQyxJQUFnQyxFQUFFLElBQVk7UUFDckUsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSSx5QkFBeUIsQ0FBQztRQUVyRixPQUFPO1lBQ0wsa0JBQWtCLEVBQUUsUUFBUTtZQUM1QixhQUFhLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxhQUFhO1lBQ3pDLHNCQUFzQixFQUFFLHFCQUFxQjtZQUM3QyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUsd0VBQXdFO0lBQ3hFLHlFQUF5RTtJQUN6RSx5REFBeUQ7SUFDakQscUJBQXFCLENBQUMsTUFBbUIsRUFBRSxLQUFlO1FBQ2hFLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEYsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzlGLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3pFLHlFQUF5RTtJQUN6RSx3RUFBd0U7SUFDeEUsMEVBQTBFO0lBQzFFLDBDQUEwQztJQUNsQyxjQUFjLENBQ3BCLElBQTZCLEVBQzdCLE1BQTJCLEVBQzNCLE9BQWdCLEVBQ2hCLE9BQTRCLEVBQzVCLEtBQWE7UUFFYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFNUQsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UseUNBQXlDO0lBQ2pDLFNBQVMsQ0FDZixLQUFVLEVBQ1YsT0FBNEIsRUFDNUIsT0FBb0IsRUFDcEIsU0FBb0IsRUFDcEIsT0FBZ0M7UUFFaEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QixLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUV0SCxPQUFPO1FBQ1QsQ0FBQztRQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDekIsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1NBQ3ZCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsK0NBQStDO0lBQy9DLEVBQUU7SUFDRiw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSxrRUFBa0U7SUFDbEUsRUFBRTtJQUNGLDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLG9FQUFvRTtJQUNwRSwwQ0FBMEM7SUFDMUMsRUFBRTtJQUNGLDBFQUEwRTtJQUMxRSxrQ0FBa0M7SUFDbEMsRUFBRTtJQUNGLHVFQUF1RTtJQUN2RSwwRUFBMEU7SUFDMUUsc0VBQXNFO0lBQ3RFLFVBQVU7SUFDVixFQUFFO0lBQ0YsaUVBQWlFO0lBQ2pFLDRFQUE0RTtJQUM1RSxnREFBZ0Q7SUFDeEMsVUFBVSxDQUNoQixTQUFtQixFQUNuQixTQUErQixFQUMvQixNQUFtQixFQUNuQixXQUE2QixFQUM3QixNQUE0QixFQUM1QixTQUFpQixFQUNqQixXQUEyRDtRQUUzRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUM1QyxJQUFJLFNBQVMsS0FBSyxLQUFLLElBQUksU0FBUyxLQUFLLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN0RSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBZ0IsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO1FBQzdDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFM0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFCLENBQUM7WUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUVELE9BQU8sV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0IsR0FBRyxLQUFLO1lBQ1IsT0FBTyxFQUFFO2dCQUNQLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU07b0JBQ2hDLENBQUMsQ0FBQyxLQUFLLENBQVMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RELENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU07b0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtvQkFDbkUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDUCxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMvRTtTQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxxQ0FBcUM7SUFDN0Isa0JBQWtCLENBQUMsSUFBWSxFQUFFLFVBQW1CO1FBQzFELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLDJFQUEyRTtJQUNuRSxZQUFZLENBQUMsT0FBaUMsRUFBRSxLQUFLLEdBQUcsS0FBSztRQUNuRSxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3RixPQUFPO1lBQ0wsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ3BGLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRO1lBQzlELGtCQUFrQixFQUFFLHFCQUFxQjtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsZ0RBQWdEO0lBQ3hDLGdCQUFnQixDQUN0QixJQUFTLEVBQ1QsS0FBVSxFQUNWLFNBQTBCLEVBQzFCLElBQW1CLEVBQ25CLE9BQTRCLEVBQzVCLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFFMUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQXFCLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUNqQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUM1QyxJQUFJLENBQUMsV0FBVyxFQUNoQixPQUFPLENBQUMsTUFBTSxFQUNkLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FDdkIsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsd0VBQXdFO1FBQ3hFLDBFQUEwRTtRQUMxRSxxRUFBcUU7UUFDckUsc0NBQXNDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxNQUFNLGNBQWMsR0FBbUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzNHLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDOUUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEcsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFnQjtZQUMzQjtnQkFDRSxJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztnQkFDeEMsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRTthQUNyRjtZQUNELEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RyxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRTtZQUNoRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ1YsVUFBVSxFQUFFLGNBQWMsS0FBSyxRQUFRO1lBQ3ZDLFNBQVMsRUFBRSxlQUFlLENBQUMsY0FBYyxDQUFDO1lBQzFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQzNELEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1lBQzdDLEdBQUcsY0FBYztZQUNqQix1RUFBdUU7WUFDdkUsd0VBQXdFO1lBQ3hFLG1FQUFtRTtZQUNuRSxVQUFVO1lBQ1Ysc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FDekMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ3BELENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDaEUsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUM3QjtZQUNELEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLHNFQUFzRTtZQUN0RSxpRUFBaUU7WUFDakUsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSwwRUFBMEU7SUFDMUUsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsOEVBQThFO0lBQzlFLHNFQUFzRTtJQUM5RCxnQkFBZ0IsQ0FBQyxLQUFzQjtRQUM3QyxNQUFNLElBQUksR0FBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQzdFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQXdCLENBQUM7UUFDekUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksRUFBRSxJQUFJLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUF1QjtTQUNoSCxDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsRSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDeEMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRixDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDeEMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLHVFQUF1RTtJQUN2RSxVQUFVO0lBQ0YsZUFBZSxDQUNyQixVQUFvQixFQUNwQixXQUFnRCxFQUNoRCxNQUF1QixFQUN2QixTQUErQjtRQUUvQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWpELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSx3RUFBd0U7SUFDeEUsNEVBQTRFO0lBQzVFLHNFQUFzRTtJQUN0RSwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQ25FLGdCQUFnQixDQUFDLE1BQW1CLEVBQUUsSUFBbUIsRUFBRSxHQUFZO1FBQzdFLE9BQU87WUFDTCxHQUFHLGVBQWU7WUFDbEIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUMzQyxHQUFHLENBQUMsR0FBRztnQkFDTCxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUU7Z0JBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQzNCLE1BQU0sQ0FBQyxTQUFTLEVBQ2hCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUN0RyxDQUFDO1NBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCwrREFBK0Q7SUFDL0QsMEVBQTBFO0lBQzFFLCtCQUErQjtJQUN2QixxQkFBcUIsQ0FBQyxNQUFtQixFQUFFLElBQW1CO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU5QyxPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEtBQUs7WUFDekIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsb0JBQW9CLEVBQUUsRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVELDJFQUEyRTtJQUMzRSx3RUFBd0U7SUFDeEUsaURBQWlEO0lBQ3pDLHNCQUFzQixDQUFDLElBQWdDLEVBQUUsS0FBeUI7UUFDeEYsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLE9BQU87WUFDTCxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsS0FBSztZQUN6QixZQUFZLEVBQUUsS0FBSyxJQUFJLFNBQVM7WUFDaEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ3hCLGFBQWEsRUFBRSxLQUFLLENBQUMsR0FBRztZQUN4QixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsUUFBUTtTQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUVELDBFQUEwRTtJQUMxRSwwREFBMEQ7SUFDbEQsWUFBWSxDQUNsQixLQUFVLEVBQ1YsU0FBMEIsRUFDMUIsSUFBbUIsRUFDbkIsYUFBZ0MsRUFDaEMsUUFBZ0IsRUFDaEIsT0FBNEIsRUFDNUIsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztRQUUxQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUUvRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFekUseUVBQXlFO1FBQ3pFLFVBQVU7UUFDVixNQUFNLEtBQUssR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFckYsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25HLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtTQUNyRixDQUFDLENBQUMsQ0FBQztRQUVKLHFFQUFxRTtRQUNyRSwrREFBK0Q7UUFDL0QsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUIsT0FBTyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdEcsQ0FBQyxDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0QsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQztZQUNwRSxPQUFPLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUQsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDVCxJQUFJLEVBQUUsY0FBYyxDQUFDLFNBQVMsQ0FBQztvQkFDL0IsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFTO2lCQUM5RSxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDckMsSUFBSTtnQkFDSixPQUFPLEVBQUUsY0FBYyxDQUNyQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQzFELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FDdkU7YUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRTtZQUNoQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDUCxRQUFRLEVBQUUsQ0FBQztZQUNYLEtBQUssRUFBRSxRQUFRO1lBQ2YsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDbkQsUUFBUSxFQUFFLEtBQUs7WUFDZixJQUFJLEVBQUUsV0FBVztZQUNqQixNQUFNLEVBQUUsUUFBUTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLHlFQUF5RTtJQUN6RSxpRUFBaUU7SUFDakUseUVBQXlFO0lBQ3pFLDBCQUEwQjtJQUNsQixnQkFBZ0IsQ0FDdEIsS0FBVSxFQUNWLElBQXdCLEVBQ3hCLE9BQTRCLEVBQzVCLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVM7UUFFMUMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLElBQUksR0FBRyxDQUFDLFFBQXdCLEVBQUUsVUFBbUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDOUQsT0FBTyxFQUFFLGNBQWMsQ0FBQztnQkFDdEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUs7b0JBQ2hCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7b0JBQ3BILENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsR0FBRyxPQUFPO2FBQ1gsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEcsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUVwRSxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9HLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEQsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUMzRyxFQUFFO1lBQ0QsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLENBQUM7WUFDWCxLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1lBQ25ELFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLFdBQVc7WUFDakIsTUFBTSxFQUFFLFFBQVE7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLE9BQU87SUFDQyxVQUFVLENBQ2hCLElBQVMsRUFDVCxLQUFVLEVBQ1YsSUFBd0IsRUFDeEIsUUFBZ0IsRUFDaEIsT0FBNEIsRUFDNUIsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUztRQUUxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQW1CLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDWjtvQkFDRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2hCLE9BQU8sRUFBRSxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztpQkFDeEc7Z0JBQ0QsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTthQUNwRSxFQUFFO2dCQUNELENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakIsQ0FBQyxDQUFDO1lBRUgsT0FBTztRQUNULENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0RCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxDQUFDLElBQW9CLEVBQUUsSUFBWSxFQUFFLE9BQWdDLEVBQUUsRUFBRTtZQUNwRixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDbEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJO2dCQUNyQixLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTzthQUN0RSxDQUFDLENBQUM7WUFDSCxHQUFHLElBQUksSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUNGLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFDaEcsT0FBTyxDQUFDLEtBQUssRUFDYixFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUMvQixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFN0QsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDbEYsUUFBUSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsV0FBVzthQUMzQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JELEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRGLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hGLFFBQVEsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFdBQVc7YUFDOUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCx5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSx5RUFBeUU7SUFDekUsNkNBQTZDO0lBQ3JDLFNBQVMsQ0FDZixJQUFTLEVBQ1QsS0FBVSxFQUNWLEtBQW1CLEVBQ25CLE9BQTRCLEVBQzVCLENBQVMsRUFBRSxHQUFXLEVBQUUsQ0FBUyxFQUNqQyxLQUFLLEdBQUcsQ0FBQztRQUVULE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdkMsTUFBTSxJQUFJLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUMvQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDckYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRO1lBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUN4RSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sSUFBSSxHQUFHO1lBQ1gsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzNFLENBQUM7UUFFRixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNsQixDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUk7WUFDMUQsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNO1NBQ3BFLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUN0QyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsQ0FBQyxFQUFFLElBQUk7Z0JBQ1AsQ0FBQyxFQUFFLElBQUk7Z0JBQ1AsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFO2dCQUNmLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2dCQUN6QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsSUFBSTthQUMzQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxnRUFBZ0U7SUFDeEQsZUFBZSxDQUFDLElBQVksRUFBRSxRQUFnQjtRQUNwRCxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELHlFQUF5RTtJQUN6RSxvQ0FBb0M7SUFDNUIsWUFBWSxDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLEtBQWE7UUFDaEUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNsRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVyRixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDN0QsVUFBVSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsTUFBcUIsRUFBRSxDQUFTLEVBQUUsR0FBVyxFQUFFLENBQVM7UUFDaEcsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxNQUFNLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUVuRixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQzVELENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsaUJBQWlCO1lBQ2xDLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNO1NBQzVHLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxpQkFBaUIsR0FBRyxXQUFXLENBQUM7UUFDbkQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ2hGLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7U0FDckYsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUUzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLHdFQUF3RTtJQUN4RSwyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLDRCQUE0QjtJQUNwQixhQUFhLENBQ25CLElBQVMsRUFDVCxLQUFVLEVBQ1YsSUFBd0IsRUFDeEIsTUFBeUIsRUFDekIsS0FBYSxFQUNiLENBQVMsRUFBRSxHQUFXLEVBQUUsQ0FBUztRQUVqQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQzFFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCxvRUFBb0U7UUFDcEUsdUVBQXVFO1FBQ3ZFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUk7ZUFDckQsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RixNQUFNLEtBQUssR0FBRywwQkFBMEIsQ0FBQztRQUV6QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3BELElBQUksRUFBRSxNQUFNO2dCQUNaLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDWixTQUFTLEVBQUUsS0FBSztnQkFDaEIsT0FBTyxFQUFFO29CQUNQLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDcEIsUUFBUSxFQUFFLEdBQUc7b0JBQ2IsY0FBYyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNO29CQUMzRSxrQkFBa0IsRUFBRSxDQUFDO2lCQUN0QjthQUNGLENBQUMsRUFBRSxDQUFDO2dCQUNILElBQUksRUFBRSxLQUFLLElBQUksa0JBQWtCO2dCQUNqQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNO2FBQ1AsQ0FBQyxFQUFFO1lBQ0YsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsU0FBUztZQUNoRSxVQUFVLEVBQUUsS0FBSztZQUNqQixTQUFTLEVBQUUsS0FBSztZQUNoQixhQUFhLEVBQUUsSUFBSTtZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixlQUFlLEVBQUUsS0FBSztZQUN0QixlQUFlLEVBQUUsS0FBSztZQUN0QixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUM5QixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQzlCLGFBQWEsRUFBRSxHQUFHLEdBQUcsR0FBRztZQUN4QixhQUFhLEVBQUUsSUFBSSxHQUFHLEdBQUc7WUFDekIsR0FBRyxjQUFjO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsSUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDO0lBQzVGLENBQUM7d0dBbGdEVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7QUFzZ0RYLDJFQUEyRTtBQUMzRSw2RUFBNkU7QUFDN0UsMkVBQTJFO0FBQzNFLDhFQUE4RTtBQUM5RSx5RUFBeUU7QUFDekUsMEVBQTBFO0FBQzFFLFNBQVMsVUFBVSxDQUFDLEtBQWlDLEVBQUUsSUFBbUI7SUFDeEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0SCxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDdEcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUVoQixPQUFPLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2RSxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLE9BQU8sSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pILE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzlDLEtBQUssSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUN6RCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRhTGFiZWxzIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWRhdGEtbGFiZWxzLmVudW0nO1xuaW1wb3J0IHsgUmVwb3J0Q2hhcnREYXRlTGFiZWwgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtY2hhcnQtZGF0ZS1sYWJlbC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydENoYXJ0TGluZVN0eWxlIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LWxpbmUtc3R5bGUuZW51bSc7XG5pbXBvcnQgeyBSZXBvcnRDaGFydE1hcmtTdGF0IH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWNoYXJ0LW1hcmstc3RhdC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydEtwaVRyZW5kIH0gZnJvbSAnLi4vZW51bXMvcmVwb3J0LWtwaS10cmVuZC5lbnVtJztcbmltcG9ydCB7IFJlcG9ydExpc3RDb2x1bW5Gb3JtYXQgfSBmcm9tICcuLi9lbnVtcy9yZXBvcnQtbGlzdC1jb2x1bW4tZm9ybWF0LmVudW0nO1xuaW1wb3J0IHsgbGF5ZXJGaWx0ZXJGaWVsZHMgfSBmcm9tICcuLi9maWx0ZXItdGV4dCc7XG5pbXBvcnQge1xuICBheGlzTnVtYmVyRm9ybWF0LFxuICBjaGFydEF4aXNGb3JtYXRDb2RlLFxuICBjaGFydFZhbHVlUGVhayxcbiAgaGFzTnVtYmVyRm9ybWF0LFxuICBudW1iZXJGb3JtYXRDb2RlLFxuICByZXNvbHZlQ2hhcnROdW1iZXJGb3JtYXQsXG4gIHJlc29sdmVSZXBvcnRUaW1lem9uZSxcbn0gZnJvbSAnLi4vZm9ybWF0JztcbmltcG9ydCB7XG4gIENoYXJ0Q29uZmlnLFxuICBDaGFydEdyYW51bGFyaXR5LFxuICBDaGFydE1lYXN1cmUsXG4gIENoYXJ0VmFsdWVBeGlzLFxuICBDb21wb25lbnREYXRhLFxuICBMZWdlbmRQb3NpdGlvbixcbiAgS3BpQ29uZmlnLFxuICBOdW1iZXJGb3JtYXRTcGVjLFxuICBSZXBvcnRDb21wb25lbnQsXG4gIFJlcG9ydEZvcm1hdENvbnRleHQsXG4gIFJlcG9ydExvY2FsZVRhZyxcbiAgUmVwb3J0UGFnZSxcbiAgV2F0ZXJmYWxsU3RlcEtpbmQsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBLcGlDYXJkRGVsdGEsIEtwaUNhcmRUYXJnZXQsIGtwaUNhcmRWaWV3LCBrcGlTcGFya2xpbmVHZW9tZXRyeSB9IGZyb20gJy4uL2twaS1jYXJkJztcbmltcG9ydCB7IERFRkFVTFRfQ09NUE9ORU5UX1BBRERJTkcgfSBmcm9tICcuLi9sYXlvdXQnO1xuaW1wb3J0IHsgbGlzdFRvdGFsc0xhYmVsQ29sdW1uIH0gZnJvbSAnLi4vbGlzdC1jb25maWcnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9URVhUX0NPTE9SLCBERUZBVUxUX1RFWFRfU0laRSwgVEVYVF9UQUJMRV9CT1JERVJfQ09MT1IsIFRFWFRfVEFCTEVfQk9SREVSX1dJRFRILCBURVhUX1RBQkxFX0NFTExfUEFERElORyxcbiAgVGV4dEJsb2NrLCBUZXh0UGFyYWdyYXBoLCBUZXh0UnVuLCBUZXh0VGFibGUsIFRleHRUYWJsZUNlbGwsIFRleHRUb2tlbkNvbnRleHQsIGJsb2NrUGFyYWdyYXBocywgdGV4dEJsb2Nrcyxcbn0gZnJvbSAnLi4vdGV4dCc7XG5pbXBvcnQgeyBpc0RyYXduIH0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB7XG4gIGNhdGVnb3J5QXhpc1RpdGxlLFxuICBjaGFydERhdGVMYWJlbCxcbiAgY2hhcnRSZWZlcmVuY2VzLFxuICBjb2xvckJ5VmFsdWVzLFxuICBEcmF3blJlZmVyZW5jZSxcbiAgZHJhd3NTdGF0TGluZXMsXG4gIEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICBleHRyYWN0Q2hhcnRTZXJpZXMsXG4gIGV4dHJhY3RXYXRlcmZhbGwsXG4gIGZvcm1hdFBlcmlvZExhYmVsLFxuICBpc0NvbG9yQnksXG4gIG1lYXN1cmVMaW5lU3R5bGUsXG4gIG1lYXN1cmVNYXJrU3RhdCxcbiAgUEVSQ0VOVF9BWElTX0lOVEVSVkFMLFxuICBQRVJDRU5UX0FYSVNfTUFYLFxuICBwZXJjZW50QXhpc01pbixcbiAgUGVyY2VudFNoYXJlcyxcbiAgcGVyY2VudFN0YWNrZWRTaGFyZXMsXG4gIHByaW9yU2VyaWVzU3R5bGVzLFxuICBSQU5LX0FYSVNfTUlOLFxuICByYW5rVmFsdWVBeGVzLFxuICByZWZlcmVuY2VQZWFrLFxuICByZXNvbHZlTGVnZW5kUG9zaXRpb24sXG4gIHNlcmllc0F4aXNJbmRleGVzLFxuICBzZXJpZXNIZXgsXG4gIHNlcmllc1N0YXQsXG4gIHNlcmllc1R5cGVzLFxuICBzcGFuc011bHRpcGxlWWVhcnMsXG4gIFNUQVRfTEFCRUwsXG4gIFZhbHVlQXhpc0luZGV4LFxuICB2YWx1ZUF4aXNSYW5nZSxcbiAgV2F0ZXJmYWxsU3RlcCxcbn0gZnJvbSAnLi4vb3B0aW9uLWJ1aWxkZXInO1xuaW1wb3J0IHtcbiAgUkVQT1JUX0NIQVJUX0NPTE9SUyxcbiAgUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTLFxuICBSRVBPUlRfS1BJX1NQQVJLTElORV9DT0xPUixcbiAgUkVQT1JUX0tQSV9UUkFDS19DT0xPUixcbiAgUkVQT1JUX01VVEVEX1RFWFRfQ09MT1IsXG4gIFJFUE9SVF9SRUZFUkVOQ0VfQ09MT1IsXG4gIFJFUE9SVF9XQVRFUkZBTExfQ09MT1JTLFxufSBmcm9tICcuLi90aGVtZS9wYWxldHRlJztcbmltcG9ydCB7XG4gIEJ1aWx0RXhwb3J0LCBDb2xsZWN0ZWRDb21wb25lbnQsIENvbGxlY3RlZFJlcG9ydCwgSEVBREVSX0ZPT1RFUl9OQU1FLCBLcGlFeHBvcnRIZWlnaHRzLCBUZXh0T3ZlcmZsb3csIGNvdmVyTGluZXMsXG4gIGVtcHR5TGFiZWwsIGV4cG9ydENlbGwsIGV4cG9ydE5vdGVMaW5lcywgZXhwb3J0VGl0bGUsIGV4cG9ydFdpbmRvd3NMaW5lLCBpc0VtcHR5VGlsZSwga3BpQ2FyZEhhc0V4dHJhcyxcbiAga3BpRXhwb3J0SGVpZ2h0LCBrcGlFeHBvcnRQYXJ0cywgbGlzdENvbHVtbnMsIGxpc3RIZWFkaW5ncywgbGlzdFRvdGFsc1JvdywgbW9yZVJvd3NOb3RpY2UsIHNjYWxlZEtwaUhlaWdodHMsXG4gIHRleHRPdmVyZmxvdyxcbn0gZnJvbSAnLi9yZXBvcnQtZXhwb3J0LWNvbGxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRFeHBvcnRDZWxsLCBncmlkRXhwb3J0VGFibGUgfSBmcm9tICcuL3JlcG9ydC1ncmlkLWV4cG9ydCc7XG5pbXBvcnQge1xuICBPVkVSRkxPV19TTEFDSywgUmVwb3J0VGV4dExheW91dFNlcnZpY2UsIFRleHRCbG9ja0xheW91dCwgVGV4dFNlZ21lbnRMYXlvdXQsIFRleHRUYWJsZUxheW91dCxcbn0gZnJvbSAnLi9yZXBvcnQtdGV4dC1sYXlvdXQuc2VydmljZSc7XG5cblxuLy8gQ29tcG9uZW50IHRpdGxlIHN0cmlwIGhlaWdodCBvbiB0aGUgc2xpZGUsIGluY2hlcy5cbmNvbnN0IFRJVExFX0ggPSAwLjI4O1xuXG4vLyBUaGUgc21hbGwgcHJpbnQgYSBjb21wb25lbnQgbWF5IGNhcnJ5LCBpbmNoZXM6IHRoZSBkYXlzIGl0IHJlYWRzIHVuZGVyIGl0c1xuLy8gdGl0bGUgKGEgc3VidGl0bGUgbGluZSksIGl0cyBub3RlcyBhdCB0aGUgZm9vdCBvZiBpdHMgYm94IChhIGxpbmUgZWFjaCksIGFuZFxuLy8gdGhlIGxpbmVzIG9mIGEgS1BJIGNhcmQgdW5kZXIgaXRzIHZhbHVlLiBBIGNoYXJ0J3Mgb3IgYSBsaXN0J3Mgbm90ZXMgZ2l2ZVxuLy8gd2F5IGJlZm9yZSBpdHMgYm9keSB3b3VsZCBzaHJpbmsgdW5kZXIgTUlOX0JPRFlfSC5cbmNvbnN0IFNNQUxMX0ZPTlRfU0laRSA9IDg7XG5jb25zdCBTVUJUSVRMRV9IID0gMC4xODtcbmNvbnN0IE5PVEVfTElORV9IID0gMC4xNjtcbmNvbnN0IE1JTl9CT0RZX0ggPSAwLjY7XG5jb25zdCBNVVRFRF9DT0xPUiA9IFJFUE9SVF9NVVRFRF9URVhUX0NPTE9SO1xuXG4vLyBBIEtQSSBjYXJkJ3MgcGFydHMsIHRvcCB0byBib3R0b20sIGluY2hlcyAoa3BpRXhwb3J0UGFydHMgc2hlZHMgdGhlXG4vLyBzcGFya2xpbmUsIHRoZW4gdGhlIHRhcmdldCwgdGhlbiB0aGUgbm90ZXMgb24gYSBzaG9ydCB0aWxlKS5cbmNvbnN0IEtQSV9UQVJHRVRfVEVYVF9IID0gMC4xODtcbmNvbnN0IEtQSV9CQVJfR0FQID0gMC4wMjtcbmNvbnN0IEtQSV9CQVJfSCA9IDAuMDU7XG5jb25zdCBLUElfSEVJR0hUUzogS3BpRXhwb3J0SGVpZ2h0cyA9IHtcbiAgdmFsdWU6IDAuNDgsXG4gIGxhYmVsOiAwLjIyLFxuICBkZWx0YTogMC4yMixcbiAgd2luZG93OiAwLjE4LFxuICB0YXJnZXQ6IEtQSV9UQVJHRVRfVEVYVF9IICsgS1BJX0JBUl9HQVAgKyBLUElfQkFSX0ggKyAwLjAzLFxuICBzcGFya2xpbmU6IDAuNDIsXG4gIG5vdGU6IE5PVEVfTElORV9ILFxufTtcbi8vIFRoZSBzaXplIG9mIHRoZSBkZWx0YSwgd2luZG93IGFuZCB0YXJnZXQgbGluZXMuXG5jb25zdCBLUElfTElORV9GT05UX1NJWkUgPSA5O1xuLy8gVGhlIGRlbHRhJ3MgdHJpYW5nbGU6IGl0cyBzaWRlLCBhbmQgdGhlIGdhcCBiZWZvcmUgdGhlIGNoYW5nZS5cbmNvbnN0IEtQSV9BUlJPVyA9IDAuMDk7XG5jb25zdCBLUElfQVJST1dfR0FQID0gMC4wNDtcbi8vIEEgY2hhcmFjdGVyJ3MgYXZlcmFnZSB3aWR0aCBhcyBhIHNoYXJlIG9mIGl0cyBmb250IHNpemUsIGZvciBwbGFjaW5nIHRoZVxuLy8gdHJpYW5nbGUgYmVzaWRlIHRleHQgUG93ZXJQb2ludCBsYXlzIG91dC5cbmNvbnN0IFBQVFhfQ0hBUl9XSURUSCA9IDAuNDI7XG4vLyBUaGUgdGFyZ2V0J3MgcHJvZ3Jlc3MgYmFyLCBhbmQgdGhlIHRyYWNrIGl0IGZpbGxzLlxuY29uc3QgS1BJX0JBUl9XID0gMS43O1xuY29uc3QgS1BJX1RSQUNLX0NPTE9SID0gUkVQT1JUX0tQSV9UUkFDS19DT0xPUjtcbi8vIFRoZSBzcGFya2xpbmUncyB3aWRlc3QgYm94LCBhbmQgaXRzIHNlcmllcyBuYW1lIGluIHRoZSBkYXRhIHNoZWV0IHdoZW4gdGhlXG4vLyBtZWFzdXJlIGhhcyBubyBsYWJlbC5cbmNvbnN0IEtQSV9TUEFSS0xJTkVfVyA9IDI7XG5jb25zdCBLUElfU1BBUktMSU5FX05BTUUgPSAnVHJlbmQnO1xuXG4vLyBBIHJhbmsgYXhpcyBkcmF3biB0b3AtZG93biBrZWVwcyBpdHMgY2F0ZWdvcnkgbGFiZWxzIHVuZGVyIHRoZSBwbG90OiBhdCB0aGVcbi8vIGF4aXMncyBoaWdoIGVuZCwgd2hpY2ggYSByZXZlcnNlZCBheGlzIHB1dHMgYXQgdGhlIGJvdHRvbS4gUmFua3MgdXAgdG8gdGhpc1xuLy8gbWFueSBhcmUgc3RlcHBlZCBvbmUgYXQgYSB0aW1lLlxuY29uc3QgUFBUWF9SQU5LX0NBVEVHT1JZX0xBQkVMX1BPUyA9ICdoaWdoJztcbmNvbnN0IFBQVFhfUkFOS19XSE9MRV9TVEVQX1BFQUsgPSAxMDtcbmNvbnN0IFBQVFhfUkFOS19GT1JNQVRfQ09ERSA9ICcwJztcbi8vIEFwcHJveGltYXRlIHRhYmxlIHJvdyBoZWlnaHQsIGluY2hlcyDigJQgZHJpdmVzIHRoZSByb3dzLXRoYXQtZml0IGNhcC5cbmNvbnN0IFNMSURFX1JPV19IID0gMC4yNjtcblxuLy8gVGhlIHNwYWNlcyBhIHRhYmxlJ3MgZ3JvdXAgbGFiZWwgc3RlcHMgaW4gYnkgcGVyIGxldmVsOiBhIGNlbGwncyB0ZXh0IGlzXG4vLyB0aGUgb25lIHBsYWNlIGEgc2xpZGUgdGFibGUgaW5kZW50cy5cbmNvbnN0IEdSSURfSU5ERU5UID0gJ1xcdTAwQTBcXHUwMEEwXFx1MDBBMCc7XG5cbi8vIFJvd3MgZmV0Y2hlZCBmb3IgYSBsaXN0J3Mgc2xpZGUgdGFibGUuIEEgc2xpZGUgdGFibGUgbmV2ZXIgY29udGludWVzIG9udG9cbi8vIGFub3RoZXIgc2xpZGUsIHNvIHRoaXMgb25seSBoYXMgdG8gY292ZXIgdGhlIHJvd3MgYSBib3ggY2FuIHNob3c7IHRoZVxuLy8gbW9yZVJvd3NOb3RpY2UoKSByb3cgbmFtZXMgdGhlIHJlc3QuXG5leHBvcnQgY29uc3QgUFBUWF9MSVNUX1JPV1MgPSAxMDA7XG5cbi8vIE91ciBsZWdlbmQgcG9zaXRpb25zIG1hcHBlZCB0byBwcHR4Z2VuanMncyBzaW5nbGUtbGV0dGVyIGxlZ2VuZFBvcyBjb2Rlcy5cbi8vICdoaWRkZW4nIGhhcyBubyBzbG90IOKAlCBzaG93TGVnZW5kIGlzIHR1cm5lZCBvZmYgaW5zdGVhZCDigJQgc28gaXQgZmFsbHMgYmFja1xuLy8gdG8gdG9wLlxuY29uc3QgUFBUWF9MRUdFTkRfUE9TOiBSZWNvcmQ8TGVnZW5kUG9zaXRpb24sICd0JyB8ICdiJyB8ICdsJyB8ICdyJz4gPSB7XG4gIHRvcDogJ3QnLFxuICBib3R0b206ICdiJyxcbiAgbGVmdDogJ2wnLFxuICByaWdodDogJ3InLFxuICBoaWRkZW46ICd0Jyxcbn07XG5cbi8vIFdoYXQgYSB3YXRlcmZhbGwncyBzZXJpZXMgYXJlIGNhbGxlZCBpbiBQb3dlclBvaW50J3MgZGF0YSBzaGVldCBhbmQgb24gaG92ZXIuXG4vLyBUaGUgbGVnZW5kIHN0YXlzIG9mZiwgYXMgaXQgZG9lcyBvbiBzY3JlZW4sIHVubGVzcyB0aGUgY2hhcnQgZHJhd3Ncbi8vIHJlZmVyZW5jZXMsIHdoaWNoIG9ubHkgdGhlIGxlZ2VuZCBjYW4gbmFtZSBpbiBQb3dlclBvaW50LlxuY29uc3QgV0FURVJGQUxMX1NFUklFU19OQU1FUzogUmVjb3JkPFdhdGVyZmFsbFN0ZXBLaW5kLCBzdHJpbmc+ID0ge1xuICByaXNlOiAnSW5jcmVhc2UnLFxuICBmYWxsOiAnRGVjcmVhc2UnLFxuICB0b3RhbDogJ1RvdGFsJyxcbn07XG5cbi8vIEEgbnVsbCBpcyBhIHBlcmlvZCB3aXRoIG5vIHZhbHVlLiBUaGUgc2NyZWVuIGJyZWFrcyB0aGUgbGluZSB0aGVyZSwgYW5kXG4vLyBwcHR4Z2VuanMncyBkZWZhdWx0ICgnc3BhbicpIHdvdWxkIGRyYXcgc3RyYWlnaHQgYWNyb3NzIGl0LiBUaGUgc2V0dGluZyBpc1xuLy8gY2hhcnQtbGV2ZWwsIHNvIGEgY29tYm8ncyBldmVyeSB0eXBlIGluaGVyaXRzIGl0IHRocm91Z2ggdGhlIGNoYXJ0IG9wdGlvbnMuXG5jb25zdCBCTEFOS1NfQVNfR0FQUyA9IHsgZGlzcGxheUJsYW5rc0FzOiAnZ2FwJyB9IGFzIGNvbnN0O1xuXG4vLyBUaGUgYXhpcyBsYWJlbCBhbmQgdGl0bGUgc2l6ZXMgZXZlcnkgY2hhcnQgd2l0aCBheGVzIHNoYXJlcywgd2hpY2hldmVyIGF4aXNcbi8vIHRoZXkgbGFuZCBvbi5cbmNvbnN0IEFYSVNfRk9OVF9TSVpFUyA9IHsgY2F0QXhpc0xhYmVsRm9udFNpemU6IDksIHZhbEF4aXNMYWJlbEZvbnRTaXplOiA5LCB2YWxBeGlzVGl0bGVGb250U2l6ZTogMTAgfSBhcyBjb25zdDtcblxuLy8gQSBsaW5lIHN0eWxlIGFzIFBvd2VyUG9pbnQncyBwcmVzZXQgZGFzaCAoYTpwcnN0RGFzaCkuIHBwdHhnZW5qcyB3cml0ZXMgaXRcbi8vIG9uIGxpbmUgc2VyaWVzIG9ubHksIHNvIGFuIGFyZWEgaXMgbmV2ZXIgZGFzaGVkLlxuY29uc3QgUFBUWF9MSU5FX0RBU0g6IFJlY29yZDxSZXBvcnRDaGFydExpbmVTdHlsZSwgc3RyaW5nPiA9IHtcbiAgW1JlcG9ydENoYXJ0TGluZVN0eWxlLlNvbGlkXTogJ3NvbGlkJyxcbiAgW1JlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZF06ICdkYXNoJyxcbiAgW1JlcG9ydENoYXJ0TGluZVN0eWxlLkRvdHRlZF06ICdzeXNEb3QnLFxufTtcblxuLy8gQSBsaW5lJ3MgbWFya2VycywgYXMgb24gc2NyZWVuOiBhIGRvdCB0aGUgc2NyZWVuJ3Mgc2l6ZSBvbiBlYWNoIHBvaW50LlxuY29uc3QgUFBUWF9MSU5FX1NZTUJPTF9TSVpFID0gNjtcblxuLy8gQSAxMDAlIHN0YWNrZWQgY2hhcnQncyBzaGFyZSBheGlzOiB3aG9sZSBwZXJjZW50YWdlcy4gVGhlIHNoYXJlcyBhcmVcbi8vIHJhdGlvcywgc28gJzAlJyBpcyByaWdodCB3aGF0ZXZlciB0aGUgcmVwb3J0J3MgcGVyY2VudEZvcm1hdC5cbmNvbnN0IFBQVFhfUEVSQ0VOVF9GT1JNQVRfQ09ERSA9ICcwJSc7XG5cbi8vIFRoZSBzaXplIG9mIGEgY2hhcnQncyBkYXRhIGxhYmVscywgYSBzdGVwIHVuZGVyIHRoZSBheGlzIGxhYmVscywgYXMgb25cbi8vIHNjcmVlbi5cbmNvbnN0IFBQVFhfREFUQV9MQUJFTF9GT05UX1NJWkUgPSA4O1xuXG4vLyBUaGUgbW9zdCBjYXRlZ29yaWVzIGFuICdhdXRvJyBkYXRhLWxhYmVsZWQgY2hhcnQgbGFiZWxzIGluIFBvd2VyUG9pbnQsXG4vLyB3aGljaCBjYW5ub3QgaGlkZSB0aGUgbGFiZWxzIHRoYXQgb3ZlcmxhcDogcGFzdCB0aGlzIG1hbnksIGl0IGxhYmVscyBub25lLlxuZXhwb3J0IGNvbnN0IFBQVFhfQVVUT19MQUJFTF9NQVhfUE9JTlRTID0gMjQ7XG5cbi8vIEEgcmVmZXJlbmNlIG9yIHN0YXRpc3RpYyBsaW5lJ3Mgd2lkdGggaW4gcG9pbnRzOiBhIGhhaXJsaW5lIGJlc2lkZSB0aGVcbi8vIHNlcmllcywgYXMgb24gc2NyZWVuLlxuY29uc3QgUFBUWF9DT05TVEFOVF9MSU5FX1NJWkUgPSAxO1xuXG4vLyBXaGF0IHRoZSB1cHBlciBlZGdlIG9mIGEgcmVmZXJlbmNlIGJhbmQgaXMgY2FsbGVkIGluIHRoZSBkYXRhIHNoZWV0IGFuZCB0aGVcbi8vIGxlZ2VuZCwgYWZ0ZXIgdGhlIGJhbmQncyBvd24gbGFiZWwgb24gaXRzIGxvd2VyIGVkZ2UuXG5jb25zdCBQUFRYX0JBTkRfVVBQRVJfU1VGRklYID0gJyAodXBwZXIpJztcblxuLy8gV2hhdCB0aGUgZXhwb3J0J3Mgb3ZlcmZsb3cgZ2F0ZSBzYXlzIHRoZSBkZWNrIGRvZXMgd2l0aCBhIHRleHQgYmxvY2sgdGhhdFxuLy8gZG9lcyBub3QgZml0IGl0cyBib3guXG5jb25zdCBQUFRYX09WRVJGTE9XX05PVEUgPSAnSW4gdGhlIFBvd2VyUG9pbnQgaXQgcnVucyBwYXN0IHRoZSBib3R0b20gb2YgaXRzIGJveCwgYW5kIHRhYmxlIHJvd3MgcGFzdCBpdCBhcmUgJ1xuICArICdsZWZ0IG91dC4nO1xuXG4vLyBUaGUgc2hvcnRlc3QgdGV4dCBib3ggYSB0ZXh0IGJsb2NrJ3Mgd29yZHMgZ2V0IGJldHdlZW4gaXRzIHRhYmxlcywgaW5jaGVzLFxuLy8gaG93ZXZlciBjbG9zZSB0aGUgY2FudmFzIHNldHMgdGhlaXIgdG9wIGFuZCBib3R0b20uXG5jb25zdCBURVhUX1NFR01FTlRfTUlOX0ggPSAwLjA1O1xuXG4vLyBBIHRleHQgdGFibGUncyBjZWxsIG1hcmdpbnMsIHRvcCwgcmlnaHQsIGJvdHRvbSBhbmQgbGVmdCwgaW4gcG9pbnRzOiB0aGVcbi8vIHBhZGRpbmcgZXZlcnkgcmVuZGVyZXIgZHJhd3MgKFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HKS4gcHB0eGdlbmpzIDMuMTIgcmVhZHNcbi8vIGEgbWFyZ2luIGxpc3QgYXMgcG9pbnRzIHdoZW4gaXRzIGZpcnN0IHZhbHVlIGlzIGF0IGxlYXN0IDEsIGFuZCBhcyBpbmNoZXNcbi8vIG90aGVyd2lzZS5cbmNvbnN0IFRFWFRfVEFCTEVfQ0VMTF9NQVJHSU4gPSBbXG4gIFRFWFRfVEFCTEVfQ0VMTF9QQURESU5HLnZlcnRpY2FsLFxuICBURVhUX1RBQkxFX0NFTExfUEFERElORy5ob3Jpem9udGFsLFxuICBURVhUX1RBQkxFX0NFTExfUEFERElORy52ZXJ0aWNhbCxcbiAgVEVYVF9UQUJMRV9DRUxMX1BBRERJTkcuaG9yaXpvbnRhbCxcbl07XG5cbi8vIFdoZXJlIHRoZSBsZWdlbmQgb2YgYSBjaGFydCB3aXRoIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZXMgc2l0cyB3aGVuXG4vLyB0aGUgY29uZmlnIGRvZXMgbm90IHBpbiBpdDogdGhlIG9uZSBwbGFjZSBQb3dlclBvaW50IG5hbWVzIHRob3NlIGxpbmVzLlxuY29uc3QgUFBUWF9DT05TVEFOVF9MRUdFTkQ6IExlZ2VuZFBvc2l0aW9uID0gJ3RvcCc7XG5cbi8vIE9uZSBuYXRpdmUgY2hhcnQgc2VyaWVzOiBpdHMgbmFtZSwgaXRzIGZpbGwgYW5kIGl0cyB2YWx1ZSBwZXIgY2F0ZWdvcnkuIEFcbi8vIG51bGwgaXMgYSBibGFuayBwb2ludDogYSBnYXAgaW4gZXZlcnkgYXhpcyBjaGFydCwgbm90IG9ubHkgdGhlIHdhdGVyZmFsbCxcbi8vIGFuZCBhIHplcm8gd2hlcmUgYmFycyBzdGFjay5cbmludGVyZmFjZSBQcHR4Q2hhcnRTZXJpZXMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIHZhbHVlczogKG51bWJlciB8IG51bGwpW107XG59XG5cbi8vIE9uZSBuYXRpdmUgY2hhcnQgb2YgYSBQb3dlclBvaW50IGNoYXJ0OiB0aGUgdHlwZSBpdCBkcmF3cywgd2hpY2ggb2YgdGhlXG4vLyBjaGFydCBkYXRhJ3Mgc2VyaWVzIGl0IGhvbGRzIChieSBpbmRleCksIHdoZXRoZXIgdGhleSBwbG90IGFnYWluc3QgdGhlXG4vLyBzZWNvbmRhcnkgdmFsdWUgYXhpcywgYW5kIHRoZSBvcHRpb25zIGxhaWQgb3ZlciB0aGUgY2hhcnQncyBmb3IgaXQgYWxvbmUuXG5pbnRlcmZhY2UgUHB0eEVudHJ5IHtcbiAgdHlwZTogc3RyaW5nO1xuICBpbmRleGVzOiBudW1iZXJbXTtcbiAgc2Vjb25kYXJ5OiBib29sZWFuO1xuICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLy8gQSBsaW5lIFBvd2VyUG9pbnQgZHJhd3MgYXQgb25lIHZhbHVlIHRoZSB3aG9sZSB3aWR0aCBvZiB0aGUgcGxvdCwgYXMgYVxuLy8gc2VyaWVzIG9mIGl0cyBvd246IGEgcmVmZXJlbmNlIGxpbmUsIG9uZSBlZGdlIG9mIGEgcmVmZXJlbmNlIGJhbmQsIG9yIGFcbi8vIG1lYXN1cmUncyBzdGF0aXN0aWMgbGluZS4gcHB0eGdlbmpzIGhhcyBubyBtYXJrTGluZSBvciBtYXJrQXJlYS5cbmludGVyZmFjZSBQcHR4Q29uc3RhbnRMaW5lIHtcbiAgbmFtZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xuICBjb2xvcjogc3RyaW5nO1xuICBzZWNvbmRhcnk6IGJvb2xlYW47XG59XG5cbi8vIFRoZSBvcHRpb25zIG9mIG9uZSBydW4gb2YgUG93ZXJQb2ludCB0ZXh0LiBQb3dlclBvaW50IHByb29mcyBldmVyeSBydW4gaW4gaXRzXG4vLyBsYW5ndWFnZSwgYW5kIHBwdHhnZW5qcyB3cml0ZXMgZW4tVVMgZm9yIGEgcnVuIHRoYXQgbmFtZXMgbm9uZS4gQSBydW4gd2hvc2Vcbi8vIHdob2xlIHRleHQgaXMgYSB2YWx1ZSB3cml0dGVuIGluIHRoZSByZXBvcnQncyBsb2NhbGUgKGEgS1BJIHZhbHVlLCBhIGRhdGVcbi8vIGNlbGwsIHRoZSBjb3ZlcidzIGRhdGUpIHBhc3NlcyB0aGF0IGxvY2FsZSwgc28gYSBGcmVuY2ggZGF0ZSBpcyBub3QgbWFya2VkXG4vLyBhcyBtaXNzcGVsbGVkIEVuZ2xpc2guIEF1dGhvcmVkIGFuZCBpbnRlcmZhY2UgdGV4dCAodGl0bGVzLCBsYWJlbHMsXG4vLyBoZWFkaW5ncywgZmlsdGVyIGxpbmVzLCBub3RpY2VzKSBwYXNzZXMgbm9uZSBhbmQga2VlcHMgdGhlIGRlZmF1bHQsIHNvIGFuXG4vLyBFbmdsaXNoIHRpdGxlIGluIGEgRnJlbmNoIHJlcG9ydCBpcyBuZXZlciBwcm9vZmVkIGFzIEZyZW5jaC5cbmV4cG9ydCBmdW5jdGlvbiBwcHR4UnVuT3B0aW9ucyhcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHZhbHVlTG9jYWxlPzogUmVwb3J0TG9jYWxlVGFnLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdmFsdWVMb2NhbGUgPyB7IC4uLm9wdGlvbnMsIGxhbmc6IHZhbHVlTG9jYWxlIH0gOiBvcHRpb25zO1xufVxuXG4vLyBCdWlsZHMgdGhlIFBvd2VyUG9pbnQgZGVjayBjbGllbnQtc2lkZSB3aXRoIHBwdHhnZW5qcy4gQ2hhcnRzIGFyZSBOQVRJVkVcbi8vIGVkaXRhYmxlIFBvd2VyUG9pbnQgY2hhcnRzIChzbGlkZS5hZGRDaGFydCB3cml0ZXMgcmVhbCBjaGFydCBYTUwgd2l0aCBhblxuLy8gZW1iZWRkZWQgZGF0YSB3b3JrYm9vayDigJQgXCJFZGl0IERhdGFcIiB3b3JrcyksIG5ldmVyIGltYWdlcy4gVGhlIHBhZ2UgSVMgdGhlXG4vLyBzbGlkZTogdGhlIHJlcG9ydCdzIHVuaXQgaXMgaW5jaGVzIOKAlCBleGFjdGx5IFBvd2VyUG9pbnQncyB1bml0IOKAlCBzbyB0aGVcbi8vIGxheW91dCBhbmQgZXZlcnkgY29tcG9uZW50IHBvc2l0aW9uIHRyYW5zZmVyIHdpdGggbm8gY29udmVyc2lvbiBhdCBhbGwuXG4vLyBwcHR4Z2VuanMgaXMgbG9hZGVkIGxhemlseSBzbyBpdCBsaXZlcyBpbiBpdHMgb3duIHdlYnBhY2sgY2h1bmsuXG4vL1xuLy8gQSB0ZXh0IGJsb2NrJ3Mgd29yZHMgYW5kIHRhYmxlcyBhcmUgcGxhY2VkIHdoZXJlIHRoZSBjYW52YXMgbGF5cyB0aGVtIG91dFxuLy8gKFJlcG9ydFRleHRMYXlvdXRTZXJ2aWNlKS4gV29yZHMgdGhhdCBkbyBub3QgZml0IGEgYmxvY2sncyBib3ggcnVuIG9uIHBhc3Rcbi8vIGl0cyBib3R0b20sIGFuZCB0YWJsZSByb3dzIHBhc3QgaXQgYXJlIGxlZnQgb3V0LCBzbyBidWlsZCgpIGhhbmRzIHRoZSBkZWNrXG4vLyBiYWNrIHVuc2F2ZWQgd2l0aCB0aGUgYmxvY2tzIHRoYXQgZG8gbm90IGZpdCwgYW5kIHRoZSBleHBvcnQgY2FuIGFzayBhYm91dFxuLy8gdGhlbSBiZWZvcmUgaXQgc2F2ZXMuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVwb3J0UHB0eFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RleHRMYXlvdXQgPSBpbmplY3QoUmVwb3J0VGV4dExheW91dFNlcnZpY2UpO1xuXG4gIHB1YmxpYyBhc3luYyBidWlsZChjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCk6IFByb21pc2U8QnVpbHRFeHBvcnQ+IHtcbiAgICBjb25zdCBQcHR4R2VuSlMgPSAoYXdhaXQgaW1wb3J0KCdwcHR4Z2VuanMnKSkuZGVmYXVsdDtcblxuICAgIGNvbnN0IHJlcG9ydCA9IGNvbGxlY3RlZC5yZXBvcnQ7XG4gICAgY29uc3QgcGFnZVcgPSByZXBvcnQucGFnZVdpZHRoO1xuICAgIGNvbnN0IHBhZ2VIID0gcmVwb3J0LnBhZ2VIZWlnaHQ7XG5cbiAgICBjb25zdCBwcHR4ID0gbmV3IFBwdHhHZW5KUygpO1xuICAgIHBwdHguZGVmaW5lTGF5b3V0KHsgbmFtZTogJ1JFUE9SVCcsIHdpZHRoOiBwYWdlVywgaGVpZ2h0OiBwYWdlSCB9KTtcbiAgICBwcHR4LmxheW91dCA9ICdSRVBPUlQnO1xuICAgIHBwdHgudGl0bGUgPSByZXBvcnQubmFtZTtcblxuICAgIHRoaXMuX3RpdGxlU2xpZGUocHB0eCwgY29sbGVjdGVkLCBwYWdlVywgcGFnZUgpO1xuXG4gICAgLy8gVGhlIHRleHQgYmxvY2tzIHRoYXQgZG8gbm90IGZpdCB0aGVpciBib3gsIGJ5IGNvbXBvbmVudCBpZCwgc28gYSBoZWFkZXJcbiAgICAvLyBvciBmb290ZXIgYmxvY2sgaXMgbGlzdGVkIG9uY2UsIG5vdCBvbmNlIHBlciBzbGlkZS5cbiAgICBjb25zdCBvdmVyZmxvd3MgPSBuZXcgTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PigpO1xuXG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBjb2xsZWN0ZWQucGFnZXMua2V5cygpKSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZW5kZXJQYWdlKHBwdHgsIGNvbGxlY3RlZCwgaW5kZXgsIG92ZXJmbG93cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG92ZXJmbG93czogWy4uLm92ZXJmbG93cy52YWx1ZXMoKV0sXG4gICAgICBvdmVyZmxvd05vdGU6IFBQVFhfT1ZFUkZMT1dfTk9URSxcbiAgICAgIC8vIEEgc2xpZGUncyBzaGFwZXMgYXJlIGxhaWQgb3V0IGJ5IFBvd2VyUG9pbnQsIHNvIGEgY29tcG9uZW50IGNhbm5vdFxuICAgICAgLy8gZmFpbCB0byBkcmF3IGhlcmUgYXMgYSBQREYgdGFibGUgY2FuLlxuICAgICAgdW5kcmF3bjogW10sXG4gICAgICBzYXZlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHBwdHgud3JpdGVGaWxlKHsgZmlsZU5hbWU6IGAke3RoaXMuX3NsdWcocmVwb3J0Lm5hbWUpfS5wcHR4YCB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIE9uZSByZXBvcnQgcGFnZSdzIHNsaWRlLiBUaGUgaGVhZGVyIGFuZCBmb290ZXIgZmlyc3QsIHNvIHRoZSBwYWdlJ3Mgb3duXG4gIC8vIGNvbXBvbmVudHMgc2l0IG9uIHRvcCBvZiB0aGVtIGV4YWN0bHkgYXMgb24gdGhlIGNhbnZhcy4gRWFjaCBsYXllcidzIHRleHRcbiAgLy8gZmlsbHMgaXRzIHZhbHVlIHRva2VucyB3aXRoIHRoYXQgbGF5ZXIncyB2YWx1ZXM6IHRoZSBtYXN0ZXIncyBvciB0aGVcbiAgLy8gcGFnZSdzLlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJQYWdlKFxuICAgIHBwdHg6IGFueSxcbiAgICBjb2xsZWN0ZWQ6IENvbGxlY3RlZFJlcG9ydCxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG92ZXJmbG93czogTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVwb3J0ID0gY29sbGVjdGVkLnJlcG9ydDtcbiAgICBjb25zdCBjb2xsZWN0ZWRQYWdlID0gY29sbGVjdGVkLnBhZ2VzW2luZGV4XTtcbiAgICBjb25zdCBzbGlkZSA9IHBwdHguYWRkU2xpZGUoKTtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLl90b2tlbnMoY29sbGVjdGVkLCBjb2xsZWN0ZWRQYWdlLnBhZ2UsIGluZGV4KTtcbiAgICBjb25zdCBwYWdlVG9rZW5zID0geyAuLi50b2tlbnMsIHZhbHVlczogY29sbGVjdGVkUGFnZS52YWx1ZXMgfTtcbiAgICBjb25zdCB0aW1lem9uZSA9IHJlc29sdmVSZXBvcnRUaW1lem9uZShyZXBvcnQpO1xuXG4gICAgaWYgKCFjb2xsZWN0ZWRQYWdlLnBhZ2UubWFzdGVySGlkZGVuKSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZW5kZXJNYXN0ZXIoc2xpZGUsIGNvbGxlY3RlZCwgdG9rZW5zLCBvdmVyZmxvd3MpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0ZWRQYWdlLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmIChpdGVtLmNvbXBvbmVudC50eXBlICE9PSAndGV4dCcpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyQ29tcG9uZW50KHBwdHgsIHNsaWRlLCBpdGVtLCB0b2tlbnMsIHRpbWV6b25lLCBjb2xsZWN0ZWQuZm9ybWF0Q29udGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoc2xpZGUsIGl0ZW0uY29tcG9uZW50LCBwYWdlVG9rZW5zKSkge1xuICAgICAgICB0aGlzLl9yZWNvcmRPdmVyZmxvdyhvdmVyZmxvd3MsIGl0ZW0uY29tcG9uZW50LCB0b2tlbnMucGFnZU5hbWUsIHBhZ2VUb2tlbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRoZSBoZWFkZXIgYW5kIGZvb3RlciwgdGhlaXIgdmFsdWUgdG9rZW5zIGZpbGxlZCB3aXRoIHRoZSBtYXN0ZXInc1xuICAvLyB2YWx1ZXMuIFRoZXkgcmVhZCBubyBwYWdlIGZpbHRlcjogaXRzIHRva2VuIHByaW50cyB0aGUgZW0gZGFzaCB0aGVyZS5cbiAgcHJpdmF0ZSBhc3luYyBfcmVuZGVyTWFzdGVyKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICAgIG92ZXJmbG93czogTWFwPG51bWJlciwgVGV4dE92ZXJmbG93PixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWFzdGVyVG9rZW5zID0ge1xuICAgICAgLi4udG9rZW5zLFxuICAgICAgdmFsdWVzOiBjb2xsZWN0ZWQubWFzdGVyVmFsdWVzLFxuICAgICAgZmlsdGVyczogbGF5ZXJGaWx0ZXJGaWVsZHMoY29sbGVjdGVkLmZpbHRlckZpZWxkcywgY29sbGVjdGVkLnJlcG9ydC5maWx0ZXJHcm91cHMgPz8gW10sIG51bGwpLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiAoY29sbGVjdGVkLnJlcG9ydC5tYXN0ZXI/LmNvbXBvbmVudHMgPz8gW10pLmZpbHRlcihpc0RyYXduKSkge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuX3JlbmRlclRleHQoc2xpZGUsIGNvbXBvbmVudCwgbWFzdGVyVG9rZW5zKSkge1xuICAgICAgICB0aGlzLl9yZWNvcmRPdmVyZmxvdyhvdmVyZmxvd3MsIGNvbXBvbmVudCwgSEVBREVSX0ZPT1RFUl9OQU1FLCBtYXN0ZXJUb2tlbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIExpc3RzIGEgdGV4dCBibG9jayB0aGF0IGRvZXMgbm90IGZpdCBpdHMgYm94LCB1bmRlciB0aGUgcGFnZSB0aGUgZXhwb3J0J3NcbiAgLy8gb3ZlcmZsb3cgZ2F0ZSBuYW1lcyBpdCBieS4gQSBibG9jayBsaXN0ZWQgb24gYW4gZWFybGllciBzbGlkZSAoYSBoZWFkZXIgb3JcbiAgLy8gZm9vdGVyKSBrZWVwcyB0aGF0IGVudHJ5LlxuICBwcml2YXRlIF9yZWNvcmRPdmVyZmxvdyhcbiAgICBvdmVyZmxvd3M6IE1hcDxudW1iZXIsIFRleHRPdmVyZmxvdz4sXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgcGFnZTogc3RyaW5nLFxuICAgIHRva2VuczogVGV4dFRva2VuQ29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFvdmVyZmxvd3MuaGFzKGNvbXBvbmVudC5pZCkpIHtcbiAgICAgIG92ZXJmbG93cy5zZXQoY29tcG9uZW50LmlkLCB0ZXh0T3ZlcmZsb3coY29tcG9uZW50LCBwYWdlLCB0b2tlbnMpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90aXRsZVNsaWRlKHBwdHg6IGFueSwgY29sbGVjdGVkOiBDb2xsZWN0ZWRSZXBvcnQsIHBhZ2VXOiBudW1iZXIsIHBhZ2VIOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzbGlkZSA9IHBwdHguYWRkU2xpZGUoKTtcblxuICAgIHNsaWRlLmFkZFRleHQoY29sbGVjdGVkLnJlcG9ydC5uYW1lLCB7XG4gICAgICB4OiAwLjUsIHk6IHBhZ2VIICogMC4zLCB3OiBwYWdlVyAtIDEsIGg6IDAuOCxcbiAgICAgIGZvbnRTaXplOiAzMCwgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnLFxuICAgIH0pO1xuXG4gICAgLy8gY292ZXJMaW5lcygpIGxlYWRzIHdpdGggdGhlIGV4cG9ydCBkYXRlLCB0aGUgb25lIGxpbmUgd3JpdHRlbiBpbiB0aGVcbiAgICAvLyByZXBvcnQncyBsb2NhbGU7IHRoZSBmaWx0ZXIgYW5kIGNvbnRleHQgbGluZXMgYXJlIGludGVyZmFjZSB0ZXh0LlxuICAgIGNvbnN0IGxpbmVzID0gY292ZXJMaW5lcyhjb2xsZWN0ZWQpO1xuICAgIGNvbnN0IHJ1bnMgPSBsaW5lcy5tYXAoKGxpbmUsIGluZGV4KSA9PiAoe1xuICAgICAgdGV4dDogbGluZSxcbiAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKFxuICAgICAgICB7IGJyZWFrTGluZTogaW5kZXggPCBsaW5lcy5sZW5ndGggLSAxIH0sXG4gICAgICAgIGluZGV4ID09PSAwID8gY29sbGVjdGVkLmZvcm1hdENvbnRleHQubG9jYWxlIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICB9KSk7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHJ1bnMsIHtcbiAgICAgIHg6IDAuNSwgeTogcGFnZUggKiAwLjMgKyAwLjksIHc6IHBhZ2VXIC0gMSwgaDogTWF0aC5tYXgoMC40LCBsaW5lcy5sZW5ndGggKiAwLjI1KSxcbiAgICAgIGZvbnRTaXplOiAxMiwgY29sb3I6ICc1MjYwNkQnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQSB0ZXh0IGJsb2NrIGFzIG5hdGl2ZSBQb3dlclBvaW50IHRleHQsIGVkaXRhYmxlIGluIHRoZSBkZWNrLCBlYWNoIHJ1blxuICAvLyBjYXJyeWluZyBpdHMgb3duIGJvbGQvaXRhbGljL2NvbG9yL3NpemUuIFRoZSBibG9jayBpcyBtZWFzdXJlZCBhcyB0aGVcbiAgLy8gY2FudmFzIGxheXMgaXQgb3V0IChSZXBvcnRUZXh0TGF5b3V0U2VydmljZSkuIEEgYmxvY2sgd2l0aG91dCBhIHRhYmxlIGlzXG4gIC8vIE9ORSB0ZXh0IGJveCAoX2FkZFRleHRCb3gpLiBBIGJsb2NrIHdpdGggdGFibGVzIGlzIGEgc3RhY2sgaW5zaWRlIGl0c1xuICAvLyBwYWRkaW5nIChfcmVuZGVyVGV4dFN0YWNrKS4gUmV0dXJucyB3aGV0aGVyIGFueXRoaW5nIHJ1bnMgcGFzdCB0aGUgYm90dG9tXG4gIC8vIG9mIHRoZSBib3ggb3Igd2FzIGxlZnQgb3V0LlxuICBwcml2YXRlIGFzeW5jIF9yZW5kZXJUZXh0KHNsaWRlOiBhbnksIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LCB0b2tlbnM6IFRleHRUb2tlbkNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBodG1sID0gY29tcG9uZW50LmNvbmZpZz8uaHRtbCA/PyAnJztcbiAgICBjb25zdCBibG9ja3MgPSB0ZXh0QmxvY2tzKGh0bWwsIHRva2Vucyk7XG4gICAgY29uc3QgbGF5b3V0ID0gYXdhaXQgdGhpcy5fdGV4dExheW91dC5tZWFzdXJlKGNvbXBvbmVudCwgdG9rZW5zKTtcbiAgICBjb25zdCB0ZXh0Q291bnQgPSBibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sua2luZCA9PT0gJ3RleHQnKS5sZW5ndGg7XG4gICAgY29uc3QgdGFibGVDb3VudCA9IGJsb2Nrcy5sZW5ndGggLSB0ZXh0Q291bnQ7XG5cbiAgICAvLyBUaGUgbWVhc3VyZSBmaW5kcyBhIGJsb2NrJ3MgcGFydHMgb25lIGZvciBvbmUgd2l0aCB0ZXh0QmxvY2tzLCB1bmxlc3MgdGhlXG4gICAgLy8gY2FudmFzIHJlbmRlcmVkIHRoZSBodG1sIGRpZmZlcmVudGx5LiBBIGJsb2NrIHdob3NlIHBhcnRzIGl0IGRpZCBub3RcbiAgICAvLyBmaW5kIGZhbGxzIGJhY2sgdG8gdGhlIG9uZSB0ZXh0IGJveCwgaXRzIHRhYmxlcyByZWFkIGFzIGxpbmVzIG9mIHRleHQuXG4gICAgaWYgKCF0YWJsZUNvdW50IHx8IGxheW91dC50YWJsZXMubGVuZ3RoICE9PSB0YWJsZUNvdW50IHx8IGxheW91dC5zZWdtZW50cy5sZW5ndGggIT09IHRleHRDb3VudCkge1xuICAgICAgdGhpcy5fYWRkVGV4dEJveChzbGlkZSwgY29tcG9uZW50LCBibG9ja1BhcmFncmFwaHMoYmxvY2tzKSk7XG5cbiAgICAgIHJldHVybiBsYXlvdXQub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlclRleHRTdGFjayhzbGlkZSwgY29tcG9uZW50LCBibG9ja3MsIGxheW91dCkgfHwgbGF5b3V0Lm92ZXJmbG93O1xuICB9XG5cbiAgLy8gVGhlIHdvcmRzIGFzIE9ORSB0ZXh0IGJveCBvdmVyIHRoZSB3aG9sZSBibG9jay4gSXRzIGluc2V0IGlzIHRoZSBibG9jaydzXG4gIC8vIHBhZGRpbmcsIHNvIHRoZSB3b3JkcyBsYW5kIHdoZXJlIHRoZXkgc2F0IG9uIHNjcmVlbi5cbiAgcHJpdmF0ZSBfYWRkVGV4dEJveChzbGlkZTogYW55LCBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCwgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdKTogdm9pZCB7XG4gICAgY29uc3QgcnVucyA9IHRoaXMuX3BhcmFncmFwaFJ1bnMocGFyYWdyYXBocyk7XG4gICAgaWYgKCFydW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZGRpbmcgPSBjb21wb25lbnQuY29uZmlnPy5wYWRkaW5nO1xuICAgIGNvbnN0IGluc2V0ID0gKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpID0+ICh2YWx1ZSA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKSAqIDcyO1xuXG4gICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICB4OiBjb21wb25lbnQueCwgeTogY29tcG9uZW50LnksIHc6IGNvbXBvbmVudC53LCBoOiBjb21wb25lbnQuaCxcbiAgICAgIHZhbGlnbjogJ3RvcCcsXG4gICAgICBmb250RmFjZTogJ0FyaWFsJyxcbiAgICAgIG1hcmdpbjogW2luc2V0KHBhZGRpbmc/LmxlZnQpLCBpbnNldChwYWRkaW5nPy5yaWdodCksIGluc2V0KHBhZGRpbmc/LmJvdHRvbSksIGluc2V0KHBhZGRpbmc/LnRvcCldLFxuICAgICAgZml0OiAnbm9uZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIGJsb2NrIHdpdGggdGFibGVzIGFzIGEgc3RhY2sgaW5zaWRlIGl0cyBwYWRkaW5nOiBhIHRleHQgYm94IGZvciB0aGVcbiAgLy8gd29yZHMgYmVmb3JlLCBiZXR3ZWVuIGFuZCBhZnRlciBpdHMgdGFibGVzLCBhbmQgYSBuYXRpdmUgdGFibGUgZm9yIGVhY2hcbiAgLy8gdGFibGUsIGVhY2ggYXQgdGhlIHRvcCB0aGUgY2FudmFzIGdpdmVzIGl0LiBQb3dlclBvaW50IHNwYWNlcyBsaW5lcyBhXG4gIC8vIGxpdHRsZSBkaWZmZXJlbnRseSBmcm9tIHRoZSBjYW52YXMsIHNvIHBsYWNpbmcgZXZlcnkgcGFydCBhZnJlc2gga2VlcHNcbiAgLy8gdGhhdCBkcmlmdCBmcm9tIGFkZGluZyB1cCBkb3duIHRoZSBibG9jay4gUmV0dXJucyB3aGV0aGVyIGFueSBwYXJ0IHdhc1xuICAvLyBsZWZ0IG91dC5cbiAgcHJpdmF0ZSBfcmVuZGVyVGV4dFN0YWNrKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgYmxvY2tzOiBUZXh0QmxvY2tbXSxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbXBvbmVudC5jb25maWc/LnBhZGRpbmc7XG4gICAgY29uc3QgeCA9IGNvbXBvbmVudC54ICsgKHBhZGRpbmc/LmxlZnQgPz8gREVGQVVMVF9DT01QT05FTlRfUEFERElORyk7XG4gICAgY29uc3QgeSA9IGNvbXBvbmVudC55ICsgKHBhZGRpbmc/LnRvcCA/PyBERUZBVUxUX0NPTVBPTkVOVF9QQURESU5HKTtcbiAgICBsZXQgc2VnbWVudEluZGV4ID0gMDtcbiAgICBsZXQgdGFibGVJbmRleCA9IDA7XG4gICAgbGV0IGZsYWdnZWQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgYmxvY2sgb2YgYmxvY2tzKSB7XG4gICAgICBjb25zdCBsZWZ0T3V0ID0gYmxvY2sua2luZCA9PT0gJ3RleHQnXG4gICAgICAgID8gdGhpcy5fYWRkVGV4dFNlZ21lbnQoc2xpZGUsIGJsb2NrLnBhcmFncmFwaHMsIGxheW91dC5zZWdtZW50c1tzZWdtZW50SW5kZXgrK10sIGxheW91dCwgeCwgeSlcbiAgICAgICAgOiB0aGlzLl9hZGRUZXh0VGFibGUoc2xpZGUsIGJsb2NrLnRhYmxlLCBsYXlvdXQudGFibGVzW3RhYmxlSW5kZXgrK10sIGxheW91dCwgeCwgeSk7XG5cbiAgICAgIGZsYWdnZWQgPSBmbGFnZ2VkIHx8IGxlZnRPdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYWdnZWQ7XG4gIH1cblxuICAvLyBUaGUgd29yZHMgYmV0d2VlbiB0d28gdGFibGVzIChvciBiZWZvcmUgdGhlIGZpcnN0LCBvciBhZnRlciB0aGUgbGFzdCkgYXNcbiAgLy8gYSB0ZXh0IGJveCBmcm9tIHRoZSB0b3Agb2YgdGhlaXIgZmlyc3QgbGluZSB0byB0aGUgYm90dG9tIG9mIHRoZWlyIGxhc3QsXG4gIC8vIGFzIHdpZGUgYXMgdGhlIGJsb2NrJ3MgY29udGVudC4gQSBzdHJldGNoIHRoYXQgZHJhd3Mgbm90aGluZyBpcyBza2lwcGVkLFxuICAvLyBhbmQgb25lIHRoYXQgc3RhcnRzIGJlbG93IHRoZSBib3ggaXMgbGVmdCBvdXQuIFJldHVybnMgd2hldGhlciBpdCB3YXMuXG4gIHByaXZhdGUgX2FkZFRleHRTZWdtZW50KFxuICAgIHNsaWRlOiBhbnksXG4gICAgcGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdLFxuICAgIHNlZ21lbnQ6IFRleHRTZWdtZW50TGF5b3V0IHwgbnVsbCxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlcixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzZWdtZW50IHx8ICFwYXJhZ3JhcGhzLnNvbWUoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJ1bnMubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzZWdtZW50LnRvcCA+PSBsYXlvdXQuY29udGVudEhlaWdodCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkVGV4dCh0aGlzLl9wYXJhZ3JhcGhSdW5zKHBhcmFncmFwaHMpLCB7XG4gICAgICB4LCB5OiB5ICsgc2VnbWVudC50b3AsIHc6IGxheW91dC5jb250ZW50V2lkdGgsIGg6IE1hdGgubWF4KFRFWFRfU0VHTUVOVF9NSU5fSCwgc2VnbWVudC5ib3R0b20gLSBzZWdtZW50LnRvcCksXG4gICAgICBtYXJnaW46IDAsXG4gICAgICB2YWxpZ246ICd0b3AnLFxuICAgICAgZm9udEZhY2U6ICdBcmlhbCcsXG4gICAgICBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEEgdGFibGUgYXMgYSBuYXRpdmUsIGVkaXRhYmxlIFBvd2VyUG9pbnQgdGFibGUgd2hlcmUgdGhlIGNhbnZhcyBwdXRzIGl0LFxuICAvLyBpbiBpdHMgY29sdW1uIHdpZHRocyBhbmQgcm93IGhlaWdodHMsIGluIHRoZSBvbmUgbG9vayBldmVyeSByZW5kZXJlclxuICAvLyBkcmF3cyAoVEVYVF9UQUJMRV8qIGluIHRleHQudHMpLiBPbmx5IHRoZSByb3dzIHRoYXQgZW5kIGluc2lkZSB0aGUgYm94IGFyZVxuICAvLyBrZXB0LiBSZXR1cm5zIHdoZXRoZXIgYW55IHJvdyB3YXMgbGVmdCBvdXQuXG4gIHByaXZhdGUgX2FkZFRleHRUYWJsZShcbiAgICBzbGlkZTogYW55LFxuICAgIHRhYmxlOiBUZXh0VGFibGUsXG4gICAgdGFibGVMYXlvdXQ6IFRleHRUYWJsZUxheW91dCxcbiAgICBsYXlvdXQ6IFRleHRCbG9ja0xheW91dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlcixcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2VwdCA9IHRoaXMuX2tlcHRSb3dzKHRhYmxlTGF5b3V0LCBsYXlvdXQuY29udGVudEhlaWdodCk7XG5cbiAgICBpZiAoa2VwdCkge1xuICAgICAgc2xpZGUuYWRkVGFibGUodGhpcy5fdGFibGVSb3dzKHRhYmxlLCBrZXB0KSwge1xuICAgICAgICB4OiB4ICsgdGFibGVMYXlvdXQubGVmdCxcbiAgICAgICAgeTogeSArIHRhYmxlTGF5b3V0LnRvcCxcbiAgICAgICAgdzogdGFibGVMYXlvdXQud2lkdGgsXG4gICAgICAgIGNvbFc6IHRhYmxlTGF5b3V0LmNvbHVtbldpZHRocyxcbiAgICAgICAgcm93SDogdGFibGVMYXlvdXQucm93SGVpZ2h0cy5zbGljZSgwLCBrZXB0KSxcbiAgICAgICAgYXV0b1BhZ2U6IGZhbHNlLFxuICAgICAgICBmb250RmFjZTogJ0FyaWFsJyxcbiAgICAgICAgZm9udFNpemU6IERFRkFVTFRfVEVYVF9TSVpFLFxuICAgICAgICBjb2xvcjogREVGQVVMVF9URVhUX0NPTE9SLnJlcGxhY2UoJyMnLCAnJyksXG4gICAgICAgIGJvcmRlcjogeyB0eXBlOiAnc29saWQnLCBwdDogVEVYVF9UQUJMRV9CT1JERVJfV0lEVEgsIGNvbG9yOiBURVhUX1RBQkxFX0JPUkRFUl9DT0xPUi5yZXBsYWNlKCcjJywgJycpIH0sXG4gICAgICAgIG1hcmdpbjogVEVYVF9UQUJMRV9DRUxMX01BUkdJTixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBrZXB0IDwgdGFibGUucm93cy5sZW5ndGg7XG4gIH1cblxuICAvLyBIb3cgbWFueSBvZiBhIHRhYmxlJ3Mgcm93cywgZnJvbSB0aGUgdG9wLCBlbmQgaW5zaWRlIHRoZSBib3guXG4gIHByaXZhdGUgX2tlcHRSb3dzKHRhYmxlTGF5b3V0OiBUZXh0VGFibGVMYXlvdXQsIGNvbnRlbnRIZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IGJvdHRvbSA9IHRhYmxlTGF5b3V0LnRvcDtcbiAgICBsZXQga2VwdCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHJvd0hlaWdodCBvZiB0YWJsZUxheW91dC5yb3dIZWlnaHRzKSB7XG4gICAgICBib3R0b20gKz0gcm93SGVpZ2h0O1xuICAgICAgaWYgKGJvdHRvbSA+IGNvbnRlbnRIZWlnaHQgKyBPVkVSRkxPV19TTEFDSykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAga2VwdCsrO1xuICAgIH1cblxuICAgIHJldHVybiBrZXB0O1xuICB9XG5cbiAgLy8gVGhlIGtlcHQgcm93cyBhcyBwcHR4Z2VuanMgY2VsbHMsIGVhY2ggcm93IGluIGdyaWQgb3JkZXIuIEEgUG93ZXJQb2ludFxuICAvLyB0YWJsZSBpcyBhIGZ1bGwgZ3JpZCwgYW5kIHBwdHhnZW5qcyBjb3VudHMgaXRzIGNvbHVtbnMgb24gdGhlIGZpcnN0IHJvd1xuICAvLyBhbmQgc2xpcHMgYSBtZXJnZWQgY2VsbCdzIGNvbnRpbnVhdGlvbiBpbnRvIHRoZSByb3cgYmVsb3cgYXQgdGhhdCBjZWxsJ3NcbiAgLy8gcGxhY2UgaW4gaXRzIG93biByb3cuIFNvIGEgY2VsbCBpcyB3cml0dGVuIGluIGl0cyB0b3AgbGVmdCBzbG90IG9ubHksIGFcbiAgLy8gc2xvdCBubyBjZWxsIGhvbGRzIGdldHMgYW4gZW1wdHkgY2VsbCwgYW5kIGEgY2VsbCdzIHNwYW5zIGVuZCB3aGVyZSB0aGV5XG4gIC8vIHdvdWxkIHJlYWNoIHBhc3QgdGhlIGtlcHQgcm93cyBvciBpbnRvIGEgc2xvdCBhbm90aGVyIGNlbGwgaG9sZHNcbiAgLy8gKGNsYWltU2xvdHMpLlxuICBwcml2YXRlIF90YWJsZVJvd3ModGFibGU6IFRleHRUYWJsZSwga2VwdDogbnVtYmVyKTogYW55W11bXSB7XG4gICAgY29uc3Qgc2xvdHM6IChUZXh0VGFibGVDZWxsIHwgbnVsbClbXVtdID0gQXJyYXkuZnJvbSh7IGxlbmd0aDoga2VwdCB9LCAoKSA9PiBBcnJheSh0YWJsZS5jb2x1bW5zKS5maWxsKG51bGwpKTtcbiAgICB0YWJsZS5yb3dzLnNsaWNlKDAsIGtlcHQpLmZvckVhY2goKHJvdykgPT4gcm93LmNlbGxzLmZvckVhY2goKGNlbGwpID0+IGNsYWltU2xvdHMoc2xvdHMsIGNlbGwpKSk7XG5cbiAgICByZXR1cm4gc2xvdHMubWFwKChyb3csIHJvd0luZGV4KSA9PiByb3cuZmxhdE1hcCgoY2VsbCwgY29sdW1uKSA9PiB7XG4gICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgcmV0dXJuIFt7IHRleHQ6ICcnIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2VsbC5yb3cgPT09IHJvd0luZGV4ICYmIGNlbGwuY29sdW1uID09PSBjb2x1bW4gPyBbdGhpcy5fdGFibGVDZWxsKGNlbGwpXSA6IFtdO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8vIEEgdGV4dCB0YWJsZSdzIGNlbGw6IGl0cyB3b3JkcywgaXRzIHNwYW5zLCBpdHMgZmlsbCBhbmQgaXRzIGFsaWdubWVudC4gQVxuICAvLyBoZWFkZXIgY2VsbCdzIHJ1bnMgYXJlIGFscmVhZHkgYm9sZCAocGFyc2VUYWJsZSksIHNvIGEgcnVuIGl0cyBodG1sIHNldHNcbiAgLy8gaW4gYSBub3JtYWwgd2VpZ2h0IHN0YXlzIHRoYXQgd2F5LlxuICBwcml2YXRlIF90YWJsZUNlbGwoY2VsbDogVGV4dFRhYmxlQ2VsbCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBydW5zID0gdGhpcy5fcGFyYWdyYXBoUnVucyhjZWxsLnBhcmFncmFwaHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFuIGVtcHR5IGNlbGwgc3RpbGwgbmVlZHMgaXRzIG9uZSBlbXB0eSBwYXJhZ3JhcGguXG4gICAgICB0ZXh0OiBydW5zLmxlbmd0aCA/IHJ1bnMgOiAnJyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY29sc3BhbjogY2VsbC5jb2xTcGFuLFxuICAgICAgICByb3dzcGFuOiBjZWxsLnJvd1NwYW4sXG4gICAgICAgIGZpbGw6IGNlbGwuZmlsbCA/IHsgY29sb3I6IGNlbGwuZmlsbC5yZXBsYWNlKCcjJywgJycpIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGFsaWduOiBjZWxsLmFsaWduLFxuICAgICAgICB2YWxpZ246IGNlbGwudmFsaWduID8/ICdtaWRkbGUnLFxuICAgICAgICBtYXJnaW46IFRFWFRfVEFCTEVfQ0VMTF9NQVJHSU4sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBQYXJhZ3JhcGhzIGFzIHRoZSBydW5zIG9mIG9uZSBuYXRpdmUgdGV4dCBib2R5LCBlYWNoIHJ1biBpbiBpdHMgb3duXG4gIC8vIHN0eWxlLCBhIGxpbmUgYnJlYWsgYWZ0ZXIgZWFjaCBwYXJhZ3JhcGggYnV0IHRoZSBsYXN0LiBBbiBlbXB0eSBwYXJhZ3JhcGhcbiAgLy8gaXMgYSBibGFuayBsaW5lLiBUZXh0IGJveGVzIGFuZCB0YWJsZSBjZWxscyB0YWtlIHRoZSBzYW1lIHJ1bnMuXG4gIHByaXZhdGUgX3BhcmFncmFwaFJ1bnMocGFyYWdyYXBoczogVGV4dFBhcmFncmFwaFtdKTogYW55W10ge1xuICAgIHJldHVybiBwYXJhZ3JhcGhzLmZsYXRNYXAoKHBhcmFncmFwaCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBwYXJhZ3JhcGhzLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCBwYXJhZ3JhcGhPcHRpb25zID0ge1xuICAgICAgICBhbGlnbjogcGFyYWdyYXBoLmFsaWduLFxuICAgICAgICBidWxsZXQ6IHBhcmFncmFwaC5idWxsZXQgPT09ICdudW1iZXInXG4gICAgICAgICAgPyB7IHR5cGU6ICdudW1iZXInIH1cbiAgICAgICAgICA6IChwYXJhZ3JhcGguYnVsbGV0ID09PSAnYnVsbGV0JyA/IHRydWUgOiB1bmRlZmluZWQpLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJ1bnM6IFRleHRSdW5bXSA9IHBhcmFncmFwaC5ydW5zLmxlbmd0aCA/IHBhcmFncmFwaC5ydW5zIDogW3sgdGV4dDogJycgfV07XG5cbiAgICAgIHJldHVybiBydW5zLm1hcCgocnVuLCBydW5JbmRleCkgPT4gKHtcbiAgICAgICAgdGV4dDogcnVuLnRleHQsXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuX3J1bk9wdGlvbnMocnVuLCBwYXJhZ3JhcGhPcHRpb25zLCBydW5JbmRleCA9PT0gcnVucy5sZW5ndGggLSAxICYmICFpc0xhc3QpLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gT25lIHJ1bidzIG9wdGlvbnM6IGl0cyBvd24gc3R5bGUgb3ZlciBpdHMgcGFyYWdyYXBoJ3MgYWxpZ25tZW50IGFuZFxuICAvLyBidWxsZXQsIGFuZCBhIGxpbmUgYnJlYWsgd2hlbiBpdCBlbmRzIGEgcGFyYWdyYXBoIHRoYXQgaXMgbm90IHRoZSBsYXN0LlxuICBwcml2YXRlIF9ydW5PcHRpb25zKFxuICAgIHJ1bjogVGV4dFJ1bixcbiAgICBwYXJhZ3JhcGhPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBicmVha0xpbmU6IGJvb2xlYW4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucGFyYWdyYXBoT3B0aW9ucyxcbiAgICAgIGJvbGQ6IHJ1bi5ib2xkLFxuICAgICAgaXRhbGljOiBydW4uaXRhbGljLFxuICAgICAgdW5kZXJsaW5lOiBydW4udW5kZXJsaW5lID8geyBzdHlsZTogJ3NuZycgfSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmlrZTogcnVuLnN0cmlrZSA/ICdzbmdTdHJpa2UnIDogdW5kZWZpbmVkLFxuICAgICAgY29sb3I6IChydW4uY29sb3IgPz8gREVGQVVMVF9URVhUX0NPTE9SKS5yZXBsYWNlKCcjJywgJycpLFxuICAgICAgaGlnaGxpZ2h0OiBydW4uaGlnaGxpZ2h0Py5yZXBsYWNlKCcjJywgJycpLFxuICAgICAgZm9udFNpemU6IHJ1bi5mb250U2l6ZSA/PyBERUZBVUxUX1RFWFRfU0laRSxcbiAgICAgIGZvbnRGYWNlOiBydW4uZm9udEZhY2UsXG4gICAgICBoeXBlcmxpbms6IHJ1bi5saW5rID8geyB1cmw6IHJ1bi5saW5rIH0gOiB1bmRlZmluZWQsXG4gICAgICBicmVha0xpbmUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFdoYXQgdGhlIHRva2VucyBvZiBhIHRleHQgYmxvY2sgYW5kIG9mIGEgdGlsZSdzIHRpdGxlIGZpbGwgd2l0aCBvbiB0aGlzXG4gIC8vIHNsaWRlOiB0aGUgcGFnZSdzIHBvc2l0aW9uIGFtb25nIHRoZSByZXBvcnQncyBwYWdlcyDigJQgdGhlIHRpdGxlIHNsaWRlIGlzXG4gIC8vIG5vdCBhIHJlcG9ydCBwYWdlIOKAlCBhbmQgdGhlIHJlcG9ydCdzIGZpbHRlcnMgd2l0aCB0aGUgcGFnZSdzIG93biBwYWdlXG4gIC8vIGZpbHRlcnMgKGxheWVyRmlsdGVyRmllbGRzKS5cbiAgcHJpdmF0ZSBfdG9rZW5zKGNvbGxlY3RlZDogQ29sbGVjdGVkUmVwb3J0LCBwYWdlOiBSZXBvcnRQYWdlLCBpbmRleDogbnVtYmVyKTogVGV4dFRva2VuQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VOdW1iZXI6IGluZGV4ICsgMSxcbiAgICAgIHBhZ2VOYW1lOiBwYWdlLm5hbWUgfHwgYFBhZ2UgJHtpbmRleCArIDF9YCxcbiAgICAgIHJlcG9ydE5hbWU6IGNvbGxlY3RlZC5yZXBvcnQubmFtZSxcbiAgICAgIGZpbHRlcnM6IGxheWVyRmlsdGVyRmllbGRzKGNvbGxlY3RlZC5maWx0ZXJGaWVsZHMsIGNvbGxlY3RlZC5yZXBvcnQuZmlsdGVyR3JvdXBzID8/IFtdLCBwYWdlLmlkKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB0aWxlIG9uIGl0cyBzbGlkZSwgaXRzIHRpdGxlJ3MgdG9rZW5zIGZpbGxlZCB3aXRoIHRoZSBzbGlkZSdzIHBhZ2UuXG4gIHByaXZhdGUgX3JlbmRlckNvbXBvbmVudChcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgdG9rZW5zOiBUZXh0VG9rZW5Db250ZXh0LFxuICAgIHRpbWV6b25lOiBzdHJpbmcsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gaXRlbS5jb21wb25lbnQ7XG4gICAgLy8gR2VvbWV0cnkgaXMgaW4gaW5jaGVzIOKAlCBQb3dlclBvaW50J3MgbmF0aXZlIHVuaXQuXG4gICAgY29uc3QgeyB4LCB5LCB3LCBoIH0gPSBjb21wb25lbnQ7XG5cbiAgICBjb25zdCB0aXRsZSA9IGV4cG9ydFRpdGxlKGNvbXBvbmVudCwgdG9rZW5zLCBpdGVtLnNlYXJjaCwgaXRlbS5jcnVtYnMsIGl0ZW0uZmlsdGVyZWQpO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgc2xpZGUuYWRkVGV4dCh0aXRsZSwge1xuICAgICAgICB4LCB5LCB3LCBoOiBUSVRMRV9ILFxuICAgICAgICBmb250U2l6ZTogMTAsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJywgdmFsaWduOiAndG9wJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEEgY2hhcnQgb3IgbGlzdCB0aGF0IGNvbXBhcmVzIG9yIGhhcyBhIHRpbWVmcmFtZSBuYW1lcyBpdHMgZGF5cyB1bmRlclxuICAgIC8vIHRoZSB0aXRsZSwgYW5kIGl0cyBub3RlcyBzaXQgYXQgdGhlIGZvb3Qgb2YgaXRzIGJveDsgYSBLUEkgY2FyZCBkcmF3c1xuICAgIC8vIGJvdGggaXRzZWxmLiBOZWl0aGVyIHRha2VzIHJvb20gZnJvbSBhIGNvbXBvbmVudCB3aXRob3V0IHRob3NlIGtleXMuXG4gICAgY29uc3Qgc3VidGl0bGUgPSBleHBvcnRXaW5kb3dzTGluZShpdGVtLCB0aW1lem9uZSwgY29udGV4dC5sb2NhbGUpO1xuICAgIGNvbnN0IG5vdGVzID0gY29tcG9uZW50LnR5cGUgPT09ICdrcGknID8gW10gOiBleHBvcnROb3RlTGluZXMoaXRlbSwgdGltZXpvbmUsIGNvbnRleHQubG9jYWxlKTtcbiAgICBjb25zdCB0b3AgPSB5ICsgVElUTEVfSCArIChzdWJ0aXRsZSA/IFNVQlRJVExFX0ggOiAwKTtcbiAgICBjb25zdCByb29tID0gTWF0aC5tYXgoMC4zLCB5ICsgaCAtIHRvcCk7XG4gICAgY29uc3Qga2VwdCA9IG5vdGVzLnNsaWNlKDAsIE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHJvb20gLSBNSU5fQk9EWV9IKSAvIE5PVEVfTElORV9IKSkpO1xuXG4gICAgaWYgKHN1YnRpdGxlKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2ZpdEVzdGltYXRlKHN1YnRpdGxlLCBTTUFMTF9GT05UX1NJWkUsIHcpLCB7XG4gICAgICAgIHgsIHk6IHkgKyBUSVRMRV9ILCB3LCBoOiBTVUJUSVRMRV9ILFxuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIHZhbGlnbjogJ3RvcCcsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5WSA9IHRvcDtcbiAgICBjb25zdCBib2R5SCA9IE1hdGgubWF4KDAuMywgcm9vbSAtIGtlcHQubGVuZ3RoICogTk9URV9MSU5FX0gpO1xuXG4gICAgaWYgKGtlcHQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBub3RlTGluZXMgPSBrZXB0Lm1hcCgobm90ZSkgPT4gdGhpcy5fZml0RXN0aW1hdGUobm90ZSwgU01BTExfRk9OVF9TSVpFLCB3KSk7XG5cbiAgICAgIHNsaWRlLmFkZFRleHQodGhpcy5fbGluZVJ1bnMobm90ZUxpbmVzLCB7IGl0YWxpYzogdHJ1ZSB9KSwge1xuICAgICAgICB4LCB5OiBib2R5WSArIGJvZHlILCB3LCBoOiBrZXB0Lmxlbmd0aCAqIE5PVEVfTElORV9ILFxuICAgICAgICBmb250U2l6ZTogU01BTExfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIHZhbGlnbjogJ3RvcCcsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWl0ZW0uZGF0YSB8fCBpc0VtcHR5VGlsZShpdGVtKSkge1xuICAgICAgc2xpZGUuYWRkVGV4dChlbXB0eUxhYmVsKGl0ZW0pLCB7XG4gICAgICAgIHgsIHk6IGJvZHlZLCB3LCBoOiBib2R5SCxcbiAgICAgICAgZm9udFNpemU6IDEwLCBpdGFsaWM6IHRydWUsIGNvbG9yOiBNVVRFRF9DT0xPUiwgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlKSB7XG4gICAgICBjYXNlICdjaGFydCc6XG4gICAgICAgIHRoaXMuX3JlbmRlckNoYXJ0KHBwdHgsIHNsaWRlLCBjb21wb25lbnQsIGl0ZW0uZGF0YSwgY29udGV4dCwgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFibGUoc2xpZGUsIGNvbXBvbmVudCwgaXRlbS5kYXRhLCBpdGVtLmhpZGRlbkNvbHVtbnMsIHRpbWV6b25lLCBjb250ZXh0LCB4LCBib2R5WSwgdywgYm9keUgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dyaWQnOlxuICAgICAgICB0aGlzLl9yZW5kZXJHcmlkVGFibGUoc2xpZGUsIGl0ZW0sIGNvbnRleHQsIHgsIGJvZHlZLCB3LCBib2R5SCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAna3BpJzpcbiAgICAgICAgdGhpcy5fcmVuZGVyS3BpKHBwdHgsIHNsaWRlLCBpdGVtLCB0aW1lem9uZSwgY29udGV4dCwgeCwgYm9keVksIHcsIGJvZHlIKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gTGluZXMgb2Ygb25lIHRleHQgYm94LCBlYWNoIGl0cyBvd24gcGFyYWdyYXBoLlxuICBwcml2YXRlIF9saW5lUnVucyhsaW5lczogcmVhZG9ubHkgc3RyaW5nW10sIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSwgaW5kZXgpID0+ICh7IHRleHQ6IGxpbmUsIG9wdGlvbnM6IHsgLi4ub3B0aW9ucywgYnJlYWtMaW5lOiBpbmRleCA8IGxpbmVzLmxlbmd0aCAtIDEgfSB9KSk7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJDaGFydChcbiAgICBwcHR4OiBhbnksXG4gICAgc2xpZGU6IGFueSxcbiAgICBjb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudCxcbiAgICBkYXRhOiBDb21wb25lbnREYXRhLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBjb21wb25lbnQuY29uZmlnIGFzIENoYXJ0Q29uZmlnO1xuICAgIGNvbnN0IGNoYXJ0VHlwZSA9IGNvbmZpZy5jaGFydFR5cGUgPz8gJ2Jhcic7XG5cbiAgICBpZiAoY2hhcnRUeXBlID09PSAnd2F0ZXJmYWxsJykge1xuICAgICAgdGhpcy5fcmVuZGVyV2F0ZXJmYWxsKHBwdHgsIHNsaWRlLCBjb21wb25lbnQsIGRhdGEsIGNvbnRleHQsIHgsIHksIHcsIGgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdENoYXJ0U2VyaWVzKGNvbXBvbmVudCwgZGF0YSk7XG5cbiAgICBjb25zdCB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgYmFyOiBwcHR4LkNoYXJ0VHlwZS5iYXIsXG4gICAgICBsaW5lOiBwcHR4LkNoYXJ0VHlwZS5saW5lLFxuICAgICAgYXJlYTogcHB0eC5DaGFydFR5cGUuYXJlYSxcbiAgICAgIHBpZTogcHB0eC5DaGFydFR5cGUucGllLFxuICAgICAgZG9udXQ6IHBwdHguQ2hhcnRUeXBlLmRvdWdobnV0LFxuICAgIH07XG5cbiAgICBjb25zdCBwaWUgPSBjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JztcbiAgICBjb25zdCBjb2xvckJ5ID0gaXNDb2xvckJ5KGNvbmZpZyk7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5fY2F0ZWdvcnlMYWJlbHMoXG4gICAgICBleHRyYWN0ZWQuY2F0ZWdvcmllcyxcbiAgICAgIGRhdGEuZ3JhbnVsYXJpdHksXG4gICAgICBjb250ZXh0LmxvY2FsZSxcbiAgICAgIGNoYXJ0RGF0ZUxhYmVsKGNvbmZpZyksXG4gICAgKTtcbiAgICAvLyBBIDEwMCUgc3RhY2tlZCBjaGFydCdzIHByaW1hcnkgYmFycyBhbmQgYXJlYXMgcGxvdCB0aGUgc2hhcmVzIHRoZSBzY3JlZW5cbiAgICAvLyBkcmF3cywgc3RhY2tlZDogUG93ZXJQb2ludCdzIG93biBwZXJjZW50U3RhY2tlZCBncm91cGluZyBpcyBkcm9wcGVkIG9uIGFuXG4gICAgLy8gYXJlYSBjaGFydCwgc28gb25lIHJ1bGUgY292ZXJzIGJvdGguIFRoZSBkYXRhIHNoZWV0IGhvbGRzIHRoZSBzaGFyZXM7XG4gICAgLy8gdGhlIENTViBrZWVwcyB0aGUgcmF3IHZhbHVlcy5cbiAgICBjb25zdCBzaGFyZXMgPSBwZXJjZW50U3RhY2tlZFNoYXJlcyhleHRyYWN0ZWQsIGNvbmZpZyk7XG5cbiAgICAvLyBOYXRpdmUgY2hhcnQgZGF0YTogb25lIGVudHJ5IHBlciBzZXJpZXMgKHBpZSBjaGFydHMgdGFrZSBleGFjdGx5IG9uZSkuXG4gICAgLy8gY29sb3JCeSBlbWl0cyBvbmUgc2VyaWVzIHBlciBjYXRlZ29yeSBmb3IgdGhlIG9uLXNjcmVlbiBvdmVybGFwOyBQb3dlclBvaW50XG4gICAgLy8gaGFzIG5vIGVxdWl2YWxlbnQgb3ZlcmxhcCwgc28gY29sbGFwc2UgdGhlbSBiYWNrIGludG8gYSBzaW5nbGUgc2VyaWVzIChlYWNoXG4gICAgLy8gY2F0ZWdvcnkncyB2YWx1ZSBzaXRzIGF0IGl0cyBvd24gc2xvdCkg4oCUIG9uZSBmdWxsLXdpZHRoIGJhciBwZXIgY2F0ZWdvcnkg4oCUXG4gICAgLy8gcmF0aGVyIHRoYW4gbGV0dGluZyBQb3dlclBvaW50IGNsdXN0ZXIgdGhlbSBpbnRvIHNsaXZlcnMuXG4gICAgY29uc3QgbWVhc3VyZURhdGEgPSBjb2xvckJ5XG4gICAgICA/IFt7XG4gICAgICAgIG5hbWU6IGNvbmZpZy5tZWFzdXJlcz8uWzBdPy5sYWJlbCA/PyBjb25maWcuY29sb3JCeT8ubGFiZWwgPz8gJycsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgdmFsdWVzOiBjb2xvckJ5VmFsdWVzKGV4dHJhY3RlZCksXG4gICAgICB9XVxuICAgICAgOiAocGllID8gZXh0cmFjdGVkLnNlcmllcy5zbGljZSgwLCAxKSA6IGV4dHJhY3RlZC5zZXJpZXMpXG4gICAgICAgIC5tYXAoKHNlcmllcywgaW5kZXgpID0+ICh7XG4gICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsXG4gICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgIC8vIEEgcGllIGtlZXBzIHRoZSAwIHRoZSBzY3JlZW4ncyBwaWUgdXNlczsgYW4gYXhpcyBjaGFydCBrZWVwcyBpdHNcbiAgICAgICAgICAvLyBudWxsIHNvIHRoZSBwb2ludCBpcyBhIGdhcC5cbiAgICAgICAgICB2YWx1ZXM6IHBpZSA/IHNlcmllcy52YWx1ZXMubWFwKCh2YWx1ZSkgPT4gdmFsdWUgPz8gMCkgOiAoc2hhcmVzPy5nZXQoaW5kZXgpID8/IHNlcmllcy52YWx1ZXMpLFxuICAgICAgICB9KSk7XG5cbiAgICAvLyBUaGUgdHlwZSBlYWNoIGNoYXJ0RGF0YSBlbnRyeSBpcyBkcmF3biBhcy4gQSBwaWUgaXMgb25lIGVudHJ5IG9mIGl0cyBvd25cbiAgICAvLyB0eXBlOyBjb2xvckJ5IGNvbGxhcHNlZCBpdHMgc2VyaWVzIGludG8gb25lLCBkcmF3biBhcyB0aGUgbG9uZSBtZWFzdXJlJ3MuXG4gICAgY29uc3Qgc2VyaWVzRGF0YVR5cGVzOiBzdHJpbmdbXSA9IHBpZVxuICAgICAgPyBbY2hhcnRUeXBlXVxuICAgICAgOiBzZXJpZXNUeXBlcyhleHRyYWN0ZWQsIGNoYXJ0VHlwZSkuc2xpY2UoMCwgY29sb3JCeSA/IDEgOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IGRhdGFUeXBlcyA9IHNlcmllc0RhdGFUeXBlcy5sZW5ndGggPyBzZXJpZXNEYXRhVHlwZXMgOiBbY2hhcnRUeXBlXTtcbiAgICAvLyBUaGUgdmFsdWUgYXhpcyBvZiBlYWNoIGNoYXJ0RGF0YSBlbnRyeTsgYSBwaWUgYW5kIGEgY29sb3JCeSBjaGFydCBoYXZlXG4gICAgLy8gb25lIHNlcmllcyBvbiB0aGUgb25lIGF4aXMuXG4gICAgY29uc3QgYXhpc0luZGV4ZXMgPSBwaWUgfHwgY29sb3JCeSA/IFswIGFzIFZhbHVlQXhpc0luZGV4XSA6IHNlcmllc0F4aXNJbmRleGVzKGV4dHJhY3RlZCwgY29uZmlnKTtcbiAgICBjb25zdCB0d29BeGVzID0gYXhpc0luZGV4ZXMuaW5jbHVkZXMoMSk7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IGNoYXJ0UmVmZXJlbmNlcyhjb25maWcsIHR3b0F4ZXMpO1xuICAgIGNvbnN0IGZvcm1hdENvZGVzID0gcGllID8gW10gOiB0aGlzLl9tZWFzdXJlRm9ybWF0Q29kZXMoY29uZmlnLCBleHRyYWN0ZWQsIGF4aXNJbmRleGVzLCBjb250ZXh0LCBzaGFyZXMsIHJlZmVyZW5jZXMpO1xuICAgIC8vIEEgdmFsdWUgYXhpcyB0aGF0IHBsb3RzIG5vdGhpbmcgYnV0IHJhbmtzIHJlYWRzIHRvcC1kb3duLCByYW5rIDEgYXQgdGhlXG4gICAgLy8gdG9wLCBhcyBvbiBzY3JlZW4gKGEgMTAwJSBzdGFja2VkIGNoYXJ0J3MgcHJpbWFyeSBheGlzIGlzIGl0cyBzaGFyZXMpLlxuICAgIGNvbnN0IHJhbmtBeGVzID0gcGllIHx8IGNvbG9yQnkgfHwgc2hhcmVzID8gW2ZhbHNlLCBmYWxzZV0gOiByYW5rVmFsdWVBeGVzKGV4dHJhY3RlZCwgZGF0YSwgY29uZmlnKTtcbiAgICBjb25zdCByYW5rUGVha3MgPSAoWzAsIDFdIGFzIGNvbnN0KS5tYXAoKGF4aXNJbmRleCkgPT4gY2hhcnRWYWx1ZVBlYWsoXG4gICAgICBleHRyYWN0ZWQuc2VyaWVzLmZpbHRlcigoXywgaW5kZXgpID0+IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gYXhpc0luZGV4KS5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksXG4gICAgICBmYWxzZSxcbiAgICApKTtcblxuICAgIC8vIFJlZmVyZW5jZXMgYW5kIHN0YXRpc3RpYyBsaW5lcyBmb2xsb3cgdGhlIG1lYXN1cmVzIGluIHRoZSBjaGFydCBkYXRhLFxuICAgIC8vIGVhY2ggYSBjb25zdGFudCBzZXJpZXMgb2YgaXRzIG93bi5cbiAgICBjb25zdCBjb25zdGFudHMgPSBwaWVcbiAgICAgID8gW11cbiAgICAgIDogW1xuICAgICAgICAuLi50aGlzLl9yZWZlcmVuY2VMaW5lcyhyZWZlcmVuY2VzKSxcbiAgICAgICAgLi4udGhpcy5fc3RhdExpbmVzKGNvbmZpZywgZXh0cmFjdGVkLCBheGlzSW5kZXhlcywgc2hhcmVzLCBjb2xvckJ5LCBtZWFzdXJlRGF0YVswXT8ubmFtZSA/PyAnJyksXG4gICAgICBdO1xuICAgIGNvbnN0IGxlZ2VuZFBvc2l0aW9uID0gdGhpcy5fbGVnZW5kUG9zaXRpb24oY29uZmlnLCBjb2xvckJ5LCBleHRyYWN0ZWQuc2VyaWVzLmxlbmd0aCwgY29uc3RhbnRzLmxlbmd0aCk7XG4gICAgY29uc3QgY2hhcnREYXRhID0gW1xuICAgICAgLi4ubWVhc3VyZURhdGEsXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lKSA9PiAoeyBuYW1lOiBsaW5lLm5hbWUsIGxhYmVscywgdmFsdWVzOiBsYWJlbHMubWFwKCgpID0+IGxpbmUudmFsdWUpIH0pKSxcbiAgICBdO1xuXG4gICAgLy8gU2VyaWVzIGNvbG9ycyBhcmUgcGVyIGVudHJ5IChfZW50cnlQbGFuKSwgbmV2ZXIgY2hhcnQtbGV2ZWwsIHdoZXJlIGFcbiAgICAvLyBtdWx0aS10eXBlIGNoYXJ0J3MgZXZlcnkgZW50cnkgd291bGQgaW5oZXJpdCB0aGVtLlxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICB4LCB5LCB3LCBoLFxuICAgICAgc2hvd0xlZ2VuZDogbGVnZW5kUG9zaXRpb24gIT09ICdoaWRkZW4nLFxuICAgICAgbGVnZW5kUG9zOiBQUFRYX0xFR0VORF9QT1NbbGVnZW5kUG9zaXRpb25dLFxuICAgICAgbGVnZW5kRm9udFNpemU6IDksXG4gICAgICBiYXJEaXI6IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2JhcicgOiAnY29sJyxcbiAgICAgIGJhckdyb3VwaW5nOiBjb25maWcuc3RhY2tlZCB8fCBzaGFyZXMgPyAnc3RhY2tlZCcgOiAnY2x1c3RlcmVkJyxcbiAgICAgIGhvbGVTaXplOiBjaGFydFR5cGUgPT09ICdkb251dCcgPyA1NSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLih0d29BeGVzXG4gICAgICAgID8gdGhpcy5fdHdvQXhlc09wdGlvbnMoY29uZmlnLCBkYXRhLCBmb3JtYXRDb2Rlcywgc2hhcmVzLCByYW5rQXhlcywgcmFua1BlYWtzKVxuICAgICAgICA6IHRoaXMuX2F4aXNUZXh0T3B0aW9ucyhjb25maWcsIGRhdGEsIHBpZSkpLFxuICAgICAgLi4uQkxBTktTX0FTX0dBUFMsXG4gICAgICAvLyBBIHBpZSBoYXMgbm8gYXhlcy4gQSBjb21ibydzIHR5cGVzIGluaGVyaXQgdGhlc2UgZnJvbSB0aGUgY2hhcnQgbGV2ZWw7XG4gICAgICAvLyBhIHR3by1heGlzIGNoYXJ0J3MgdmFsdWUgYXhlcyBjYXJyeSB0aGVpciBvd24gZm9ybWF0IGNvZGVzLiBBIDEwMCVcbiAgICAgIC8vIHN0YWNrZWQgY2hhcnQncyBvbmUgdmFsdWUgYXhpcyBpcyB0aGUgc2hhcmUgYXhpcy5cbiAgICAgIC4uLihwaWUgfHwgdHdvQXhlcyA/IHt9IDogKHNoYXJlcyA/IHRoaXMuX3BlcmNlbnRBeGlzT3B0aW9ucyhzaGFyZXMpIDoge1xuICAgICAgICB2YWxBeGlzTGFiZWxGb3JtYXRDb2RlOiBmb3JtYXRDb2Rlc1swXSxcbiAgICAgIH0pKSxcbiAgICAgIC4uLihwaWUgPyB7fSA6IHRoaXMuX2NhdGVnb3J5T3JkZXJPcHRpb25zKGNvbmZpZywgZGF0YVR5cGVzKSksXG4gICAgICAuLi4odHdvQXhlcyB8fCAhcmFua0F4ZXNbMF0gPyB7fSA6IHtcbiAgICAgICAgLi4udGhpcy5fcmFua0F4aXNPcHRpb25zKGNvbmZpZy52YWx1ZUF4aXMsIHJhbmtQZWFrc1swXSksXG4gICAgICAgIGNhdEF4aXNMYWJlbFBvczogUFBUWF9SQU5LX0NBVEVHT1JZX0xBQkVMX1BPUyxcbiAgICAgIH0pLFxuICAgICAgZGF0YUJvcmRlcjogeyBwdDogMCwgY29sb3I6ICdGRkZGRkYnIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHByaW9yU3R5bGVzID0gcGllID8gbnVsbCA6IHByaW9yU2VyaWVzU3R5bGVzKGNvbmZpZywgZGF0YSwgZXh0cmFjdGVkKTtcbiAgICBjb25zdCBlbnRyaWVzID0gW1xuICAgICAgLi4udGhpcy5fZW50cnlQbGFuKGRhdGFUeXBlcywgZXh0cmFjdGVkLCBjb25maWcsIGF4aXNJbmRleGVzLCBzaGFyZXMsIGNoYXJ0RGF0YS5sZW5ndGgsIHByaW9yU3R5bGVzKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4gdGhpcy5fd2l0aERhdGFMYWJlbHMoZW50cnksIGNvbmZpZywgZm9ybWF0Q29kZXMsIHNoYXJlcywgbGFiZWxzLmxlbmd0aCkpLFxuICAgICAgLi4uY29uc3RhbnRzLm1hcCgobGluZSwgaW5kZXgpID0+IHRoaXMuX2NvbnN0YW50RW50cnkobGluZSwgbWVhc3VyZURhdGEubGVuZ3RoICsgaW5kZXgsIGNoYXJ0RGF0YS5sZW5ndGgpKSxcbiAgICBdO1xuXG4gICAgdGhpcy5fYWRkQ2hhcnQoc2xpZGUsIHR5cGVNYXAsIGVudHJpZXMsIGNoYXJ0RGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBXaGVyZSB0aGUgbGVnZW5kIHNpdHMsIGFzIG9uIHNjcmVlbiAocmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKSwgd2l0aCB0d29cbiAgLy8gZGlmZmVyZW5jZXMuIEEgc2luZ2xlLXNlcmllcyBjb2xvckJ5IGNoYXJ0IGNhbid0IGNhcnJ5IGEgcGVyLWNhdGVnb3J5XG4gIC8vIGxlZ2VuZCBpbiBhIG5hdGl2ZSBQb3dlclBvaW50IGJhciBjaGFydCwgc28gdGhlIGNhdGVnb3J5IGF4aXMgbGFiZWxzXG4gIC8vIGlkZW50aWZ5IGVhY2ggYmFyIGluc3RlYWQuIEFuZCBhIHJlZmVyZW5jZSBvciBzdGF0aXN0aWMgbGluZSBpcyBuYW1lZCBpblxuICAvLyB0aGUgbGVnZW5kIGFsb25lLCB3aGVyZSB0aGUgc2NyZWVuIGxhYmVscyBpdCBvbiB0aGUgbGluZSwgc28gYSBjaGFydCB0aGF0XG4gIC8vIGRyYXdzIG9uZSBzaG93cyB0aGUgbGVnZW5kIHdoZW5ldmVyIHRoZSBjb25maWcgZG9lcyBub3QgcGluIGl0LiBBIHBpbm5lZFxuICAvLyBwb3NpdGlvbiwgJ2hpZGRlbicgaW5jbHVkZWQsIHN0aWxsIHdpbnMuXG4gIHByaXZhdGUgX2xlZ2VuZFBvc2l0aW9uKFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgY29sb3JCeTogYm9vbGVhbixcbiAgICBzZXJpZXNDb3VudDogbnVtYmVyLFxuICAgIGNvbnN0YW50Q291bnQ6IG51bWJlcixcbiAgKTogTGVnZW5kUG9zaXRpb24ge1xuICAgIGlmIChjb25zdGFudENvdW50KSB7XG4gICAgICByZXR1cm4gY29uZmlnLmxlZ2VuZCA/PyBQUFRYX0NPTlNUQU5UX0xFR0VORDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sb3JCeSA/ICdoaWRkZW4nIDogcmVzb2x2ZUxlZ2VuZFBvc2l0aW9uKGNvbmZpZywgc2VyaWVzQ291bnQpO1xuICB9XG5cbiAgLy8gRWFjaCByZWZlcmVuY2UgKGNoYXJ0UmVmZXJlbmNlcykgYXMgY29uc3RhbnQgbGluZXM6IGEgbGluZSBhdCBpdHMgdmFsdWUsXG4gIC8vIG9yIGEgYmFuZCdzIGxvd2VyIGVkZ2UgdW5kZXIgaXRzIGxhYmVsIGFuZCBpdHMgdXBwZXIgZWRnZSB1bmRlciB0aGUgbGFiZWxcbiAgLy8gd2l0aCBQUFRYX0JBTkRfVVBQRVJfU1VGRklYLiBBIGNoYXJ0IGRyYXdzIHRoZSBvbmVzIHRoZSBzY3JlZW4gZHJhd3M6IG5vbmVcbiAgLy8gb24gYSBob3Jpem9udGFsIGNoYXJ0IG9yIGEgcGllLlxuICBwcml2YXRlIF9yZWZlcmVuY2VMaW5lcyhyZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdKTogUHB0eENvbnN0YW50TGluZVtdIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlcy5mbGF0TWFwKChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGNvbnN0IGxpbmUgPSB7IG5hbWU6IHJlZmVyZW5jZS5sYWJlbCwgdmFsdWU6IHJlZmVyZW5jZS5sb3csIGNvbG9yOiBSRVBPUlRfUkVGRVJFTkNFX0NPTE9SLCBzZWNvbmRhcnk6IHJlZmVyZW5jZS5heGlzSW5kZXggPT09IDEgfTtcblxuICAgICAgcmV0dXJuIHJlZmVyZW5jZS5iYW5kXG4gICAgICAgID8gW2xpbmUsIHsgLi4ubGluZSwgbmFtZTogYCR7cmVmZXJlbmNlLmxhYmVsfSR7UFBUWF9CQU5EX1VQUEVSX1NVRkZJWH1gLCB2YWx1ZTogcmVmZXJlbmNlLmhpZ2ggfV1cbiAgICAgICAgOiBbbGluZV07XG4gICAgfSk7XG4gIH1cblxuICAvLyBFYWNoIG1lYXN1cmUncyBzdGF0aXN0aWMgbGluZSwgdGFrZW4gb3ZlciB0aGUgdmFsdWVzIHRoZSBzZXJpZXMgcGxvdHNcbiAgLy8gKGl0cyBzaGFyZXMgb24gYSAxMDAlIHN0YWNrZWQgY2hhcnQpLCBuYW1lZCBhZnRlciB0aGUgc2VyaWVzICgnVmlzaXRzXG4gIC8vIGF2ZXJhZ2UnKSBhbmQgZHJhd24gaW4gaXRzIGNvbG9yIG9uIGl0cyBheGlzLiBBIGNvbG9yQnkgY2hhcnQncyBvbmUgbGluZVxuICAvLyBpcyB0YWtlbiBvdmVyIGl0cyBjb2xsYXBzZWQgYmFycyBhbmQgZHJhd24gaW4gdGhlIHJlZmVyZW5jZSBzbGF0ZSwgYXMgb25cbiAgLy8gc2NyZWVuLiBBIHNlcmllcyB3aXRoIG5vIHZhbHVlIGRyYXdzIG5vbmUsIGFuZCBhIGhvcml6b250YWwgY2hhcnQgbm9uZS5cbiAgcHJpdmF0ZSBfc3RhdExpbmVzKFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgICBheGlzSW5kZXhlczogVmFsdWVBeGlzSW5kZXhbXSxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIGNvbG9yQnk6IGJvb2xlYW4sXG4gICAgY29sb3JCeU5hbWU6IHN0cmluZyxcbiAgKTogUHB0eENvbnN0YW50TGluZVtdIHtcbiAgICBpZiAoIWRyYXdzU3RhdExpbmVzKGNvbmZpZykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lID0gKFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgdmFsdWVzOiAobnVtYmVyIHwgbnVsbClbXSxcbiAgICAgIHN0YXQ6IFJlcG9ydENoYXJ0TWFya1N0YXQsXG4gICAgICBjb2xvcjogc3RyaW5nLFxuICAgICAgc2Vjb25kYXJ5OiBib29sZWFuLFxuICAgICk6IFBwdHhDb25zdGFudExpbmVbXSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHNlcmllc1N0YXQodmFsdWVzLCBzdGF0KTtcbiAgICAgIGNvbnN0IHN0YXROYW1lID0gU1RBVF9MQUJFTFtzdGF0XTtcblxuICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsXG4gICAgICAgID8gW11cbiAgICAgICAgOiBbeyBuYW1lOiBuYW1lID8gYCR7bmFtZX0gJHtzdGF0TmFtZS50b0xvd2VyQ2FzZSgpfWAgOiBzdGF0TmFtZSwgdmFsdWUsIGNvbG9yLCBzZWNvbmRhcnkgfV07XG4gICAgfTtcblxuICAgIGlmIChjb2xvckJ5KSB7XG4gICAgICBjb25zdCBzdGF0ID0gbWVhc3VyZU1hcmtTdGF0KGV4dHJhY3RlZC5zZXJpZXNbMF0/Lm1lYXN1cmUpO1xuXG4gICAgICByZXR1cm4gc3RhdCA/IGxpbmUoY29sb3JCeU5hbWUsIGNvbG9yQnlWYWx1ZXMoZXh0cmFjdGVkKSwgc3RhdCwgUkVQT1JUX1JFRkVSRU5DRV9DT0xPUiwgZmFsc2UpIDogW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dHJhY3RlZC5zZXJpZXMuZmxhdE1hcCgoc2VyaWVzLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdCA9IG1lYXN1cmVNYXJrU3RhdChzZXJpZXMubWVhc3VyZSk7XG5cbiAgICAgIHJldHVybiBzdGF0XG4gICAgICAgID8gbGluZShzZXJpZXMubmFtZSwgc2hhcmVzPy5nZXQoaW5kZXgpID8/IHNlcmllcy52YWx1ZXMsIHN0YXQsIHNlcmllc0hleChzZXJpZXMsIGluZGV4KSwgYXhpc0luZGV4ZXNbaW5kZXhdID09PSAxKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gQSBjb25zdGFudCBsaW5lJ3Mgb3duIGVudHJ5OiBkYXNoZWQsIHdpdGhvdXQgbWFya2VycyBvciBkYXRhIGxhYmVscywgb25cbiAgLy8gaXRzIHZhbHVlIGF4aXMuIEl0cyBjb2xvcnMgcnVuIHRoZSBsZW5ndGggb2YgdGhlIGNoYXJ0J3MgZGF0YSwgYXMgYVxuICAvLyBtZWFzdXJlIGxpbmUncyBkbyAoX2VudHJ5UGxhbiksIHNvIG5vIG1hcmtlciBldmVyIHRha2VzIGEgcmFuZG9tIGNvbG9yLlxuICBwcml2YXRlIF9jb25zdGFudEVudHJ5KGxpbmU6IFBwdHhDb25zdGFudExpbmUsIGluZGV4OiBudW1iZXIsIHRvdGFsRGF0YTogbnVtYmVyKTogUHB0eEVudHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgaW5kZXhlczogW2luZGV4XSxcbiAgICAgIHNlY29uZGFyeTogbGluZS5zZWNvbmRhcnksXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNoYXJ0Q29sb3JzOiBBcnJheTxzdHJpbmc+KHRvdGFsRGF0YSkuZmlsbChsaW5lLmNvbG9yKSxcbiAgICAgICAgbGluZURhc2g6IFBQVFhfTElORV9EQVNIW1JlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZF0sXG4gICAgICAgIGxpbmVEYXRhU3ltYm9sOiAnbm9uZScsXG4gICAgICAgIGxpbmVTaXplOiBQUFRYX0NPTlNUQU5UX0xJTkVfU0laRSxcbiAgICAgICAgc2hvd1ZhbHVlOiBmYWxzZSxcbiAgICAgICAgLi4uKGxpbmUuc2Vjb25kYXJ5ID8geyBzZWNvbmRhcnlWYWxBeGlzOiB0cnVlLCBzZWNvbmRhcnlDYXRBeGlzOiB0cnVlIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgbnVtYmVyIGZvcm1hdCBjb2RlIG9mIHRoZSBtZWFzdXJlcyBwbG90dGVkIG9uIGVhY2ggdmFsdWUgYXhpcywgYnlcbiAgLy8gYXhpcyBpbmRleCwgbWF0Y2hpbmcgdGhlIHNjcmVlbidzIHRpY2tzIChfdmFsdWVBeGlzQ29kZSk6IGEgb25lLWF4aXMgY2hhcnRcbiAgLy8gdGFrZXMgdGhlIGZvcm1hdCBpdHMgcGxvdHRlZCBzZXJpZXMnIG1lYXN1cmVzIGFncmVlIG9uLCBhcyBvbiBzY3JlZW4uIEEgMTAwJSBzdGFja2VkXG4gIC8vIGNoYXJ0J3Mgc2hhcmUgYXhpcyBpcyBkcmF3biBpbiBQUFRYX1BFUkNFTlRfRk9STUFUX0NPREUgaW5zdGVhZDsgdGhlc2VcbiAgLy8gY29kZXMgc3RpbGwgd3JpdGUgdGhlIHJhdyB2YWx1ZXMgb2YgdGhlIHNlcmllcyBiZXNpZGUgaXRzIHNoYXJlcy4gVGhlXG4gIC8vIHJlZmVyZW5jZXMgb24gYW4gYXhpcyBjb3VudCB0b3dhcmQgaXRzIHBlYWssIGFzIG9uIHNjcmVlblxuICAvLyAocmVmZXJlbmNlUGVhayksIGV4Y2VwdCBhIDEwMCUgc3RhY2tlZCBjaGFydCdzLCB3aGljaCBhcmUgc2hhcmVzLlxuICBwcml2YXRlIF9tZWFzdXJlRm9ybWF0Q29kZXMoXG4gICAgY29uZmlnOiBDaGFydENvbmZpZyxcbiAgICBleHRyYWN0ZWQ6IEV4dHJhY3RlZENoYXJ0U2VyaWVzLFxuICAgIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICByZWZlcmVuY2VzOiBEcmF3blJlZmVyZW5jZVtdLFxuICApOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVhY2ggPSAoYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCkgPT4gKHNoYXJlcyAmJiBheGlzSW5kZXggPT09IDAgPyAwIDogcmVmZXJlbmNlUGVhayhyZWZlcmVuY2VzLCBheGlzSW5kZXgpKTtcblxuICAgIGlmICghYXhpc0luZGV4ZXMuaW5jbHVkZXMoMSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGV4dHJhY3RlZC5zZXJpZXMubWFwKChzZXJpZXMpID0+IHNlcmllcy52YWx1ZXMpO1xuICAgICAgY29uc3Qgc3BlYyA9IGF4aXNOdW1iZXJGb3JtYXQoZXh0cmFjdGVkLnNlcmllcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLm1lYXN1cmUpKTtcblxuICAgICAgcmV0dXJuIFt0aGlzLl92YWx1ZUF4aXNDb2RlKHNwZWMsIHZhbHVlcywgISFjb25maWcuc3RhY2tlZCwgY29udGV4dCwgcmVhY2goMCkpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFswLCAxXSBhcyBjb25zdCkubWFwKChheGlzSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG9uQXhpcyA9IGV4dHJhY3RlZC5zZXJpZXMuZmlsdGVyKChfLCBpbmRleCkgPT4gYXhpc0luZGV4ZXNbaW5kZXhdID09PSBheGlzSW5kZXgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWVBeGlzQ29kZShcbiAgICAgICAgYXhpc051bWJlckZvcm1hdChvbkF4aXMubWFwKChzZXJpZXMpID0+IHNlcmllcy5tZWFzdXJlKSksXG4gICAgICAgIG9uQXhpcy5tYXAoKHNlcmllcykgPT4gc2VyaWVzLnZhbHVlcyksXG4gICAgICAgICEhY29uZmlnLnN0YWNrZWQgJiYgIXNoYXJlcyxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgcmVhY2goYXhpc0luZGV4KSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBBIG1lYXN1cmUgZW50cnkgd2l0aCBpdHMgZGF0YSBsYWJlbHMgKGNvbmZpZy5kYXRhTGFiZWxzKSwgc2V0IG9uIHRoZVxuICAvLyBlbnRyeSBhbG9uZTogb24gYSBjaGFydCBvZiBzZXZlcmFsIGVudHJpZXMgYSBjaGFydC1sZXZlbCBrZXkgd291bGQgcmVhY2hcbiAgLy8gZXZlcnkgb25lIG9mIHRoZW0uIE5ldmVyIGNhbGxlZCBmb3IgYSByZWZlcmVuY2Ugb3Igc3RhdGlzdGljIGxpbmUuXG4gIC8vXG4gIC8vICdhbGwnIGxhYmVscyBldmVyeSBwb2ludC4gUG93ZXJQb2ludCBjYW5ub3QgaGlkZSBvdmVybGFwcGluZyBsYWJlbHMsIHNvXG4gIC8vICdhdXRvJyBsYWJlbHMgZXZlcnkgcG9pbnQgdXAgdG8gUFBUWF9BVVRPX0xBQkVMX01BWF9QT0lOVFMgY2F0ZWdvcmllc1xuICAvLyBhbmQgbm9uZSBwYXN0IHRoYXQuIHBwdHhnZW5qcyBjYW5ub3QgbGFiZWwgYSBzaW5nbGUgcG9pbnQsIHNvICdsYXN0J1xuICAvLyBsYWJlbHMgbm9uZSAoYSBkb2N1bWVudGVkIGdhcCksIGV4Y2VwdCBvbiBhIGNvbG9yQnkgY2hhcnQ6IHRoZXJlIGV2ZXJ5XG4gIC8vIGJhciBpcyBpdHMgb3duIHNlcmllcycgbGF0ZXN0IHBvaW50IG9uIHNjcmVlbiwgc28gJ2xhc3QnIGxhYmVscyBldmVyeVxuICAvLyBiYXIgb2YgdGhlIG9uZSBjb2xsYXBzZWQgc2VyaWVzLCBhcyAnYWxsJyBkb2VzLlxuICAvL1xuICAvLyBBIGxhYmVsIGlzIHdyaXR0ZW4gaW4gaXRzIGF4aXMncyBmb3JtYXQgY29kZSAoJzAlJyBmb3IgYSBzaGFyZSkuIEFcbiAgLy8gc3RhY2tlZCBiYXIncyBzaXRzIGluIHRoZSBtaWRkbGUgb2YgaXRzIHNlZ21lbnQgYW5kIGEgbGluZSdzIGFib3ZlIGl0c1xuICAvLyBwb2ludC4gQSBjbHVzdGVyZWQgYmFyIGtlZXBzIFBvd2VyUG9pbnQncyBkZWZhdWx0LCBvdXRzaWRlIGl0cyBlbmQsIHdoaWNoXG4gIC8vIHBwdHhnZW5qcyB3b3VsZCBkcm9wIG9uIGEgb25lLWVudHJ5IGNoYXJ0IGlmIG5hbWVkOyBhbiBhcmVhIHRha2VzIG5vXG4gIC8vIHBvc2l0aW9uIGF0IGFsbCwgYW5kIHBwdHhnZW5qcyBkb2VzIG5vdCBzdHJpcCBvbmUgZnJvbSBhIGNvbWJvJ3MgYXJlYS5cbiAgcHJpdmF0ZSBfd2l0aERhdGFMYWJlbHMoXG4gICAgZW50cnk6IFBwdHhFbnRyeSxcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGZvcm1hdENvZGVzOiBzdHJpbmdbXSxcbiAgICBzaGFyZXM6IFBlcmNlbnRTaGFyZXMgfCBudWxsLFxuICAgIGNhdGVnb3J5Q291bnQ6IG51bWJlcixcbiAgKTogUHB0eEVudHJ5IHtcbiAgICBjb25zdCBtb2RlID0gY29uZmlnLmRhdGFMYWJlbHM7XG4gICAgY29uc3Qgc2hvdyA9IG1vZGUgPT09IFJlcG9ydENoYXJ0RGF0YUxhYmVscy5BbGxcbiAgICAgIHx8IChtb2RlID09PSBSZXBvcnRDaGFydERhdGFMYWJlbHMuQXV0byAmJiBjYXRlZ29yeUNvdW50IDw9IFBQVFhfQVVUT19MQUJFTF9NQVhfUE9JTlRTKVxuICAgICAgfHwgKG1vZGUgPT09IFJlcG9ydENoYXJ0RGF0YUxhYmVscy5MYXN0ICYmIGlzQ29sb3JCeShjb25maWcpKTtcbiAgICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuXG4gICAgaWYgKCFzaG93IHx8IGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHwgY2hhcnRUeXBlID09PSAnZG9udXQnKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhcmUgPSAhIXNoYXJlcz8uaGFzKGVudHJ5LmluZGV4ZXNbMF0pO1xuICAgIGNvbnN0IHN0YWNrZWQgPSBlbnRyeS50eXBlID09PSAnYmFyJyAmJiAoc2hhcmVzID8gc2hhcmUgOiAhIWNvbmZpZy5zdGFja2VkKTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuX2RhdGFMYWJlbFBvc2l0aW9uKGVudHJ5LnR5cGUsIHN0YWNrZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmVudHJ5LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICAuLi5lbnRyeS5vcHRpb25zLFxuICAgICAgICBzaG93VmFsdWU6IHRydWUsXG4gICAgICAgIGRhdGFMYWJlbEZvcm1hdENvZGU6IHNoYXJlID8gUFBUWF9QRVJDRU5UX0ZPUk1BVF9DT0RFIDogZm9ybWF0Q29kZXNbZW50cnkuc2Vjb25kYXJ5ID8gMSA6IDBdLFxuICAgICAgICBkYXRhTGFiZWxGb250U2l6ZTogUFBUWF9EQVRBX0xBQkVMX0ZPTlRfU0laRSxcbiAgICAgICAgLi4uKHBvc2l0aW9uID8geyBkYXRhTGFiZWxQb3NpdGlvbjogcG9zaXRpb24gfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgMTAwJSBzdGFja2VkIGNoYXJ0J3Mgc2hhcmUgYXhpcywgYXMgb24gc2NyZWVuOiBmcm9tIDAgKC0xMDAlIHdoZW4gYVxuICAvLyBzaGFyZSBpcyBuZWdhdGl2ZSkgdG8gMTAwJSwgYSBncmlkbGluZSBldmVyeSAyNSUsIGluIHdob2xlIHBlcmNlbnRhZ2VzLlxuICBwcml2YXRlIF9wZXJjZW50QXhpc09wdGlvbnMoc2hhcmVzOiBQZXJjZW50U2hhcmVzKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICB2YWxBeGlzTWluVmFsOiBwZXJjZW50QXhpc01pbihzaGFyZXMpLFxuICAgICAgdmFsQXhpc01heFZhbDogUEVSQ0VOVF9BWElTX01BWCxcbiAgICAgIHZhbEF4aXNNYWpvclVuaXQ6IFBFUkNFTlRfQVhJU19JTlRFUlZBTCxcbiAgICAgIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IFBQVFhfUEVSQ0VOVF9GT1JNQVRfQ09ERSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB0d28tYXhpcyBjaGFydCdzIGF4ZXMsIGVhY2ggaW4gaXRzIG93biBvYmplY3Q6IHBwdHhnZW5qcyBidWlsZHMgdGhlXG4gIC8vIHNlY29uZCB2YWx1ZSBhbmQgY2F0ZWdvcnkgYXhlcyBmcm9tIHRoZSBjaGFydCdzIG9wdGlvbnMgd2l0aCB0aGVzZSBsYWlkXG4gIC8vIG92ZXIgdGhlbSwgc28gYSB2YWx1ZS1heGlzIGtleSBsZWZ0IGF0IHRoZSBjaGFydCBsZXZlbCB3b3VsZCByZWFjaCBib3RoLlxuICAvLyBUaGUgcHJpbWFyeSB2YWx1ZSBheGlzIGlzIG9uIHRoZSBsZWZ0IHdpdGggdGhlIGNhdGVnb3J5IGF4aXMgdW5kZXIgaXQ7XG4gIC8vIHRoZSBzZWNvbmQgaXMgb24gdGhlIHJpZ2h0LCB3aXRob3V0IGdyaWRsaW5lcyBvZiBpdHMgb3duLCBhbmQgaXRzXG4gIC8vIGNhdGVnb3J5IGF4aXMgaXMgaGlkZGVuLiBFYWNoIHZhbHVlIGF4aXMgaXMgdGl0bGVkIG9ubHkgYnkgaXRzIG93biBsYWJlbFxuICAvLyBhbmQgZm9ybWF0dGVkIGJ5IHRoZSBtZWFzdXJlcyBwbG90dGVkIGFnYWluc3QgaXQsIGFzIG9uIHNjcmVlbi4gT24gYSAxMDAlXG4gIC8vIHN0YWNrZWQgY2hhcnQgdGhlIHByaW1hcnkgYXhpcyBpcyB0aGUgc2hhcmUgYXhpcywgYW5kIHRoZSBzZWNvbmQgYXhpcydzXG4gIC8vIHNlcmllcyBhcmUgbm90IHN0YWNrZWQuXG4gIHByaXZhdGUgX3R3b0F4ZXNPcHRpb25zKFxuICAgIGNvbmZpZzogQ2hhcnRDb25maWcsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBmb3JtYXRDb2Rlczogc3RyaW5nW10sXG4gICAgc2hhcmVzOiBQZXJjZW50U2hhcmVzIHwgbnVsbCxcbiAgICByYW5rQXhlczogYm9vbGVhbltdLFxuICAgIHJhbmtQZWFrczogbnVtYmVyW10sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCB2YWx1ZUF4aXMgPSAoYXhpc0luZGV4OiBWYWx1ZUF4aXNJbmRleCkgPT4ge1xuICAgICAgY29uc3QgYXhpcyA9IGF4aXNJbmRleCA9PT0gMSA/IGNvbmZpZy5zZWNvbmRhcnlBeGlzIDogY29uZmlnLnZhbHVlQXhpcztcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5fdmFsdWVBeGlzUmFuZ2VPcHRpb25zKGF4aXMsIGF4aXM/LmxhYmVsKTtcbiAgICAgIGNvbnN0IHJhbmsgPSByYW5rQXhlc1theGlzSW5kZXhdID8gdGhpcy5fcmFua0F4aXNPcHRpb25zKGF4aXMsIHJhbmtQZWFrc1theGlzSW5kZXhdKSA6IHt9O1xuXG4gICAgICBpZiAoc2hhcmVzICYmIGF4aXNJbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyAuLi5yYW5nZSwgLi4udGhpcy5fcGVyY2VudEF4aXNPcHRpb25zKHNoYXJlcykgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgLi4ucmFuZ2UsIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IGZvcm1hdENvZGVzW2F4aXNJbmRleF0sIC4uLnJhbmsgfTtcbiAgICB9O1xuICAgIC8vIFRoZSBjYXRlZ29yeSBsYWJlbHMgc3RheSB1bmRlciB0aGUgcGxvdCB3aGVuIHRoZSBwcmltYXJ5IHZhbHVlIGF4aXMgaXNcbiAgICAvLyBhIHJhbmsgYXhpcyBkcmF3biB0b3AtZG93bi5cbiAgICBjb25zdCBjYXRlZ29yeSA9IHJhbmtBeGVzWzBdXG4gICAgICA/IHsgLi4udGhpcy5fY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnLCBkYXRhKSwgY2F0QXhpc0xhYmVsUG9zOiBQUFRYX1JBTktfQ0FURUdPUllfTEFCRUxfUE9TIH1cbiAgICAgIDogdGhpcy5fY2F0ZWdvcnlUaXRsZU9wdGlvbnMoY29uZmlnLCBkYXRhKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5BWElTX0ZPTlRfU0laRVMsXG4gICAgICB2YWxBeGVzOiBbdmFsdWVBeGlzKDApLCB7IC4uLnZhbHVlQXhpcygxKSwgdmFsR3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9IH1dLFxuICAgICAgY2F0QXhlczogW2NhdGVnb3J5LCB7IGNhdEF4aXNIaWRkZW46IHRydWUgfV0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgcmFuayBheGlzLCBhcyBvbiBzY3JlZW46IHJldmVyc2VkICgnbWF4TWluJyksIHNvIHJhbmsgMSBpcyBhdCB0aGUgdG9wLFxuICAvLyBzdGFydGluZyBhdCByYW5rIDEgdW5sZXNzIHRoZSBjb25maWcgcGlucyBhIGJvdW5kLCBhbmQgbGFiZWxlZCBpbiB3aG9sZVxuICAvLyByYW5rcy4gRmV3IHJhbmtzIGFyZSBzdGVwcGVkIG9uZSBhdCBhIHRpbWUgd2hlbiB0aGUgY29uZmlnIHBpbnMgbm9cbiAgLy8gaW50ZXJ2YWwsIHNvIG5vIHRpY2sgZmFsbHMgYmV0d2VlbiB0d28gcmFua3MuXG4gIHByaXZhdGUgX3JhbmtBeGlzT3B0aW9ucyhheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCwgcGVhazogbnVtYmVyKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHJhbmdlID0gdmFsdWVBeGlzUmFuZ2UoYXhpcyk7XG4gICAgY29uc3Qgd2hvbGVTdGVwcyA9IHJhbmdlLmludGVydmFsID09PSB1bmRlZmluZWQgJiYgcGVhayA8PSBQUFRYX1JBTktfV0hPTEVfU1RFUF9QRUFLO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbEF4aXNPcmllbnRhdGlvbjogJ21heE1pbicsXG4gICAgICB2YWxBeGlzTWluVmFsOiByYW5nZS5taW4gPz8gUkFOS19BWElTX01JTixcbiAgICAgIHZhbEF4aXNMYWJlbEZvcm1hdENvZGU6IFBQVFhfUkFOS19GT1JNQVRfQ09ERSxcbiAgICAgIC4uLih3aG9sZVN0ZXBzID8geyB2YWxBeGlzTWFqb3JVbml0OiAxIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEEgaG9yaXpvbnRhbCBiYXIgY2hhcnQgcmVhZHMgdG9wLWRvd24sIGZpcnN0IGNhdGVnb3J5IGF0IHRoZSB0b3AsIGFzIGl0XG4gIC8vIGRvZXMgb24gc2NyZWVuLiBQb3dlclBvaW50IGRyYXdzIGNhdGVnb3J5IDAgbmV4dCB0byB0aGUgdmFsdWUgYXhpcywgYXQgdGhlXG4gIC8vIGJvdHRvbSwgc28gdGhlIGNhdGVnb3J5IGF4aXMgaXMgcmV2ZXJzZWQgKCdtYXhNaW4nKTsgdGhlIHZhbHVlIGF4aXMgdGhlblxuICAvLyBjcm9zc2VzIGF0IHRoZSBsYXN0IGNhdGVnb3J5ICgnbWF4JyksIHdoaWNoIG5vdyBzaXRzIGF0IHRoZSBib3R0b20sIGFuZFxuICAvLyAnbmV4dFRvJyBrZWVwcyBpdHMgbGFiZWxzIG9uIHRoYXQgbGluZSAocHB0eGdlbmpzJ3MgZGVmYXVsdCBmb3IgYSBiYXJcbiAgLy8gZGlyZWN0aW9uLCAnbG93Jywgd291bGQgZm9sbG93IHRoZSBmaXJzdCBjYXRlZ29yeSB0byB0aGUgdG9wKS4gT25seSBhblxuICAvLyBhbGwtYmFyIGNoYXJ0OiBhIGxpbmUgb3IgYXJlYSBpcyBuZXZlciBkcmF3biBzaWRld2F5cy5cbiAgcHJpdmF0ZSBfY2F0ZWdvcnlPcmRlck9wdGlvbnMoY29uZmlnOiBDaGFydENvbmZpZywgdHlwZXM6IHN0cmluZ1tdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmIChjb25maWcub3JpZW50YXRpb24gIT09ICdob3Jpem9udGFsJyB8fCB0eXBlcy5zb21lKCh0eXBlKSA9PiB0eXBlICE9PSAnYmFyJykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjYXRBeGlzT3JpZW50YXRpb246ICdtYXhNaW4nLCBjYXRBeGlzQ3Jvc3Nlc0F0OiAnbWF4JywgdmFsQXhpc0xhYmVsUG9zOiAnbmV4dFRvJyB9O1xuICB9XG5cbiAgLy8gVGhlIHZhbHVlIGF4aXMncyBudW1iZXIgZm9ybWF0IGNvZGUsIG1hdGNoaW5nIHRoZSBzY3JlZW4ncyB0aWNrczogd2l0aCBhblxuICAvLyBheGlzIGZvcm1hdCAoYXhpc051bWJlckZvcm1hdCwgb3IgYSB3YXRlcmZhbGwncyBmb3JtYXR0ZWQgbWVhc3VyZSkgdGhlXG4gIC8vIHVuaXRzIGFuZCBkZWNpbWFscyB0aGUgc2NyZWVuIGRlY2lkZXMgZnJvbSB0aGUgc2FtZSBwZWFrOyB3aXRob3V0IG9uZSxcbiAgLy8gdGhlIGNvZGUgZm9yIHRoZSBzY3JlZW4ncyBwbGFpbiB0aWNrcy4gVGhlIHBlYWsgaXMgdGhlIHNlcmllcycgb3IgdGhlXG4gIC8vIGZ1cnRoZXN0IHJlZmVyZW5jZSBvbiB0aGUgYXhpcyAocmVhY2gpLCB3aGljaGV2ZXIgaXMgbGFyZ2VyOyB0aGUgZm9ybWF0XG4gIC8vIGhlbHBlcnMgcmVhZCBpdCBvZmYgYSBvbmUtcG9pbnQgc2VyaWVzLlxuICBwcml2YXRlIF92YWx1ZUF4aXNDb2RlKFxuICAgIHNwZWM6IE51bWJlckZvcm1hdFNwZWMgfCBudWxsLFxuICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW11bXSxcbiAgICBzdGFja2VkOiBib29sZWFuLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgcmVhY2g6IG51bWJlcixcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBwZWFrID0gTWF0aC5tYXgoY2hhcnRWYWx1ZVBlYWsodmFsdWVzLCBzdGFja2VkKSwgcmVhY2gpO1xuICAgIGNvbnN0IHBlYWtTZXJpZXMgPSBbW3BlYWtdXTtcblxuICAgIGlmICghc3BlYykge1xuICAgICAgcmV0dXJuIGNoYXJ0QXhpc0Zvcm1hdENvZGUocGVha1NlcmllcywgZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJ0ID0gcmVzb2x2ZUNoYXJ0TnVtYmVyRm9ybWF0KHNwZWMsIHBlYWssIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG51bWJlckZvcm1hdENvZGUoc3BlYywgY29udGV4dCwgY2hhcnQsIHBlYWtTZXJpZXMsIGZhbHNlKTtcbiAgfVxuXG4gIC8vIE9uZSBuYXRpdmUgY2hhcnQgd2hlbiB0aGUgcGxhbiBpcyBhIHNpbmdsZSBlbnRyeSwgaXRzIG9wdGlvbnMgbGFpZCBvdmVyXG4gIC8vIHRoZSBjaGFydCdzLiBPdGhlcndpc2UgcHB0eGdlbmpzJ3MgbXVsdGktdHlwZSBjaGFydCwgd2hlcmUgZXZlcnkgZW50cnknc1xuICAvLyBvd24gb3B0aW9ucyBhcmUgbGFpZCBvdmVyIHRoZSBjaGFydCdzLlxuICBwcml2YXRlIF9hZGRDaGFydChcbiAgICBzbGlkZTogYW55LFxuICAgIHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgZW50cmllczogUHB0eEVudHJ5W10sXG4gICAgY2hhcnREYXRhOiB1bmtub3duW10sXG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgc2xpZGUuYWRkQ2hhcnQodHlwZU1hcFtlbnRyeS50eXBlXSwgZW50cnkuaW5kZXhlcy5tYXAoKGluZGV4KSA9PiBjaGFydERhdGFbaW5kZXhdKSwgeyAuLi5vcHRpb25zLCAuLi5lbnRyeS5vcHRpb25zIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkQ2hhcnQoZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoe1xuICAgICAgdHlwZTogdHlwZU1hcFtlbnRyeS50eXBlXSxcbiAgICAgIGRhdGE6IGVudHJ5LmluZGV4ZXMubWFwKChpbmRleCkgPT4gY2hhcnREYXRhW2luZGV4XSksXG4gICAgICBvcHRpb25zOiBlbnRyeS5vcHRpb25zLFxuICAgIH0pKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBIb3cgYSBjaGFydCdzIHNlcmllcyAoZGF0YVR5cGVzLCBvbmUgcGVyIGNoYXJ0RGF0YSBlbnRyeSkgYXJlIGN1dCBpbnRvXG4gIC8vIG5hdGl2ZSBjaGFydHMsIGFuZCB0aGUgY29sb3JzIGVhY2ggZHJhd3MgaW4uXG4gIC8vXG4gIC8vIEEgcGllJ3Mgc2xpY2VzIGFuZCBhIGNvbG9yQnkgY2hhcnQncyBjb2xsYXBzZWQgYmFycyBhcmUgb25lIHNlcmllcyBjb2xvcmVkXG4gIC8vIHBvaW50IGJ5IHBvaW50LCBzbyB0aGVpciBvbmUgZW50cnkga2VlcHMgdGhlIHdob2xlIHBhbGV0dGUuIEV2ZXJ5IG90aGVyXG4gIC8vIGVudHJ5IGlzIGhhbmRlZCBleGFjdGx5IGl0cyBvd24gc2VyaWVzJyBjb2xvcnMgKHNlcmllc0hleCksIHNvIGEgbG9uZSBiYXJcbiAgLy8gc2VyaWVzIGlzIG9uZSBjb2xvciwgYXMgb24gc2NyZWVuLCByYXRoZXIgdGhhbiBhIGNvbG9yIHBlciBiYXIuXG4gIC8vXG4gIC8vIEJhcnMgc2hhcmUgb25lIGVudHJ5IHBlciB2YWx1ZSBheGlzLCBzaW5jZSBzZXBhcmF0ZSBiYXIgY2hhcnRzIG9uIG9uZSBheGlzXG4gIC8vIG92ZXJsYXAgaW5zdGVhZCBvZiBjbHVzdGVyaW5nLCBhbmQgYXJlYXMgbGlrZXdpc2UsIHNpbmNlIHRoZXkgc3RhY2sgb25seVxuICAvLyBpbnNpZGUgb25lIGFyZWEgY2hhcnQuIEVhY2ggbGluZSBnZXRzIGFuIGVudHJ5IG9mIGl0cyBvd24sIHNvIGl0cyBsaW5lXG4gIC8vIG9wdGlvbnMgYXJlIGl0cyBvd24uIHBwdHhnZW5qcyBjb2xvcnMgYSBsaW5lIGJ5IGl0cyBwbGFjZSBpbiBpdHMgZW50cnkgYnV0XG4gIC8vIGZpbGxzIGl0cyBtYXJrZXJzIGJ5IGl0cyBwbGFjZSBhY3Jvc3MgZXZlcnkgZW50cnkncyBkYXRhLCBhbmQgd2l0aCBhXG4gIC8vIHJhbmRvbSBjb2xvciBwYXN0IHRoZSBlbmQgb2YgdGhlIGxpc3QsIHNvIGEgbGluZSdzIGxpc3QgaXMgaXRzIG9uZSBjb2xvclxuICAvLyB0aGUgd2hvbGUgbGVuZ3RoIG9mIHRoZSBjaGFydCdzIGRhdGEgKHRvdGFsRGF0YSwgd2hpY2ggY291bnRzIHRoZVxuICAvLyBjb25zdGFudCBsaW5lcyBhZnRlciB0aGUgbWVhc3VyZXMgdG9vKS5cbiAgLy9cbiAgLy8gQW4gZW50cnkgb24gdGhlIHNlY29uZCB2YWx1ZSBheGlzIChzZXJpZXNBeGlzSW5kZXhlcykgcGxvdHMgYWdhaW5zdCB0aGVcbiAgLy8gc2Vjb25kIHZhbHVlIGFuZCBjYXRlZ29yeSBheGVzLlxuICAvL1xuICAvLyBBIGxpbmUgZW50cnkgZHJhd3MgaXRzIG1lYXN1cmUncyBsaW5lIHN0eWxlIChQUFRYX0xJTkVfREFTSCkgYW5kIGl0c1xuICAvLyBtYXJrZXJzLCBvciBub25lLiBPbiBhIDEwMCUgc3RhY2tlZCBjaGFydCBvbmx5IHRoZSBzaGFyZSBlbnRyaWVzIHN0YWNrO1xuICAvLyBhIGJhciBvciBhcmVhIGVudHJ5IG9uIHRoZSBzZWNvbmQgYXhpcyBpcyBkcmF3biBzaWRlIGJ5IHNpZGUsIGFzIG9uXG4gIC8vIHNjcmVlbi5cbiAgLy9cbiAgLy8gQSBjaGFydCB0aGF0IHBsb3RzIGEgcHJpb3Igc2VyaWVzIGNvbG9ycyBpdCBhcyB0aGUgc2NyZWVuIGRvZXNcbiAgLy8gKHByaW9yU3R5bGVzKTogaW4gaXRzIGN1cnJlbnQgc2VyaWVzJyBjb2xvciwgYW5kIGRhc2hlZCB3aGVuIGl0IGlzIGEgbGluZVxuICAvLyB3aG9zZSBtZWFzdXJlIG5hbWVzIG5vIGxpbmUgc3R5bGUgb2YgaXRzIG93bi5cbiAgcHJpdmF0ZSBfZW50cnlQbGFuKFxuICAgIGRhdGFUeXBlczogc3RyaW5nW10sXG4gICAgZXh0cmFjdGVkOiBFeHRyYWN0ZWRDaGFydFNlcmllcyxcbiAgICBjb25maWc6IENoYXJ0Q29uZmlnLFxuICAgIGF4aXNJbmRleGVzOiBWYWx1ZUF4aXNJbmRleFtdLFxuICAgIHNoYXJlczogUGVyY2VudFNoYXJlcyB8IG51bGwsXG4gICAgdG90YWxEYXRhOiBudW1iZXIsXG4gICAgcHJpb3JTdHlsZXM6IHsgY29sb3JzOiBzdHJpbmdbXTsgcHJpb3JzOiBib29sZWFuW10gfSB8IG51bGwsXG4gICk6IFBwdHhFbnRyeVtdIHtcbiAgICBjb25zdCBjaGFydFR5cGUgPSBjb25maWcuY2hhcnRUeXBlID8/ICdiYXInO1xuICAgIGlmIChjaGFydFR5cGUgPT09ICdwaWUnIHx8IGNoYXJ0VHlwZSA9PT0gJ2RvbnV0JyB8fCBpc0NvbG9yQnkoY29uZmlnKSkge1xuICAgICAgcmV0dXJuIFt7IHR5cGU6IGRhdGFUeXBlc1swXSwgaW5kZXhlczogWzBdLCBzZWNvbmRhcnk6IGZhbHNlLCBvcHRpb25zOiB7IGNoYXJ0Q29sb3JzOiBSRVBPUlRfQ0hBUlRfQ09MT1JTIH0gfV07XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllczogUHB0eEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBwZXJBeGlzID0gbmV3IE1hcDxzdHJpbmcsIFBwdHhFbnRyeT4oKTtcbiAgICBkYXRhVHlwZXMuZm9yRWFjaCgodHlwZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHNlY29uZGFyeSA9IGF4aXNJbmRleGVzW2luZGV4XSA9PT0gMTtcbiAgICAgIGNvbnN0IGtleSA9IGAke3R5cGV9LSR7c2Vjb25kYXJ5fWA7XG4gICAgICBsZXQgZW50cnkgPSB0eXBlID09PSAnbGluZScgPyB1bmRlZmluZWQgOiBwZXJBeGlzLmdldChrZXkpO1xuXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIGVudHJ5ID0geyB0eXBlLCBpbmRleGVzOiBbXSwgc2Vjb25kYXJ5LCBvcHRpb25zOiB7fSB9O1xuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICBwZXJBeGlzLnNldChrZXksIGVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgZW50cnkuaW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoIWV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdKSB7XG4gICAgICAgIHJldHVybiBSRVBPUlRfQ0hBUlRfQ09MT1JTW2luZGV4ICUgUkVQT1JUX0NIQVJUX0NPTE9SUy5sZW5ndGhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJpb3JTdHlsZXM/LmNvbG9yc1tpbmRleF0gPz8gc2VyaWVzSGV4KGV4dHJhY3RlZC5zZXJpZXNbaW5kZXhdLCBpbmRleCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2hhcnRDb2xvcnM6IGVudHJ5LnR5cGUgPT09ICdsaW5lJ1xuICAgICAgICAgID8gQXJyYXk8c3RyaW5nPih0b3RhbERhdGEpLmZpbGwoaGV4KGVudHJ5LmluZGV4ZXNbMF0pKVxuICAgICAgICAgIDogZW50cnkuaW5kZXhlcy5tYXAoaGV4KSxcbiAgICAgICAgLi4uKGVudHJ5LnR5cGUgPT09ICdsaW5lJ1xuICAgICAgICAgID8gdGhpcy5fbGluZU9wdGlvbnMoZXh0cmFjdGVkLnNlcmllc1tlbnRyeS5pbmRleGVzWzBdXT8ubWVhc3VyZSwgISFwcmlvclN0eWxlcz8ucHJpb3JzW2VudHJ5LmluZGV4ZXNbMF1dKVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oc2hhcmVzICYmIGVudHJ5LnR5cGUgIT09ICdsaW5lJyAmJiAhc2hhcmVzLmhhcyhlbnRyeS5pbmRleGVzWzBdKVxuICAgICAgICAgID8geyBiYXJHcm91cGluZzogZW50cnkudHlwZSA9PT0gJ2FyZWEnID8gJ3N0YW5kYXJkJyA6ICdjbHVzdGVyZWQnIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKGVudHJ5LnNlY29uZGFyeSA/IHsgc2Vjb25kYXJ5VmFsQXhpczogdHJ1ZSwgc2Vjb25kYXJ5Q2F0QXhpczogdHJ1ZSB9IDoge30pLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICAvLyBXaGVyZSBhIGRhdGEgbGFiZWwgc2l0czogUG93ZXJQb2ludCdzIGRMYmxQb3MgY29kZSwgb3IgdW5kZWZpbmVkIHRvIGxlYXZlXG4gIC8vIGl0IG91dCAoX3dpdGhEYXRhTGFiZWxzIHNheXMgd2h5KS5cbiAgcHJpdmF0ZSBfZGF0YUxhYmVsUG9zaXRpb24odHlwZTogc3RyaW5nLCBzdGFja2VkQmFyOiBib29sZWFuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHlwZSA9PT0gJ2xpbmUnKSB7XG4gICAgICByZXR1cm4gJ3QnO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFja2VkQmFyID8gJ2N0cicgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBIGxpbmUgZW50cnkncyBkYXNoIGFuZCBtYXJrZXJzLiBBIHN0eWxlIFBvd2VyUG9pbnQgaGFzIG5vIGRhc2ggZm9yIGlzXG4gIC8vIGRyYXduIHNvbGlkLCBhbmQgYSBwcmlvcidzIGxpbmUgZGFzaGVkIHVubGVzcyBpdHMgbWVhc3VyZSBuYW1lcyBhIHN0eWxlLlxuICBwcml2YXRlIF9saW5lT3B0aW9ucyhtZWFzdXJlOiBDaGFydE1lYXN1cmUgfCB1bmRlZmluZWQsIHByaW9yID0gZmFsc2UpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3Qgc3R5bGUgPSBtZWFzdXJlTGluZVN0eWxlKG1lYXN1cmUpID8/IChwcmlvciA/IFJlcG9ydENoYXJ0TGluZVN0eWxlLkRhc2hlZCA6IHVuZGVmaW5lZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZURhc2g6IHN0eWxlID8gUFBUWF9MSU5FX0RBU0hbc3R5bGVdIDogUFBUWF9MSU5FX0RBU0hbUmVwb3J0Q2hhcnRMaW5lU3R5bGUuU29saWRdLFxuICAgICAgbGluZURhdGFTeW1ib2w6IG1lYXN1cmU/Lm1hcmtlcnMgPT09IGZhbHNlID8gJ25vbmUnIDogJ2NpcmNsZScsXG4gICAgICBsaW5lRGF0YVN5bWJvbFNpemU6IFBQVFhfTElORV9TWU1CT0xfU0laRSxcbiAgICB9O1xuICB9XG5cbiAgLy8gQSB3YXRlcmZhbGwgaXMgYSBzdGFja2VkIGJhciBjaGFydCB3aG9zZSBmaXJzdCBzZXJpZXMgaXMgaW52aXNpYmxlOiBpdFxuICAvLyBsaWZ0cyBlYWNoIGJhciB0byB3aGVyZSBpdHMgc3RlcCBzdGFydHMuIFRoZSBzZXJpZXMgYXJlIGN1dCBkaWZmZXJlbnRseVxuICAvLyBmcm9tIHRoZSBzY3JlZW4nczsgX3dhdGVyZmFsbFNlcmllcyBzYXlzIHdoeS5cbiAgcHJpdmF0ZSBfcmVuZGVyV2F0ZXJmYWxsKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50LFxuICAgIGRhdGE6IENvbXBvbmVudERhdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGNvbXBvbmVudC5jb25maWcgYXMgQ2hhcnRDb25maWc7XG4gICAgY29uc3Qgd2F0ZXJmYWxsID0gZXh0cmFjdFdhdGVyZmFsbChjb21wb25lbnQsIGRhdGEpO1xuICAgIGNvbnN0IG1lYXN1cmUgPSBjb25maWcubWVhc3VyZXM/LlswXTtcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLl9jYXRlZ29yeUxhYmVscyhcbiAgICAgIHdhdGVyZmFsbC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuY2F0ZWdvcnkpLFxuICAgICAgZGF0YS5ncmFudWxhcml0eSxcbiAgICAgIGNvbnRleHQubG9jYWxlLFxuICAgICAgY2hhcnREYXRlTGFiZWwoY29uZmlnKSxcbiAgICApO1xuICAgIGNvbnN0IHNlcmllcyA9IHRoaXMuX3dhdGVyZmFsbFNlcmllcyh3YXRlcmZhbGwuc3RlcHMpO1xuICAgIC8vIFRoZSByZWZlcmVuY2VzIGFyZSBjb25zdGFudCBsaW5lcyBiZXNpZGUgdGhlIHN0YWNrZWQgYmFycywgb24gdGhlIG9uZVxuICAgIC8vIHZhbHVlIGF4aXMuIFdpdGhvdXQgYW55IHRoZSBjaGFydCBpcyB0aGUgb25lIHN0YWNrZWQgYmFyIGNoYXJ0LCB3aXRob3V0XG4gICAgLy8gYSBsZWdlbmQ7IHdpdGggdGhlbSB0aGUgbGVnZW5kIG5hbWVzIHRoZW0gKF9sZWdlbmRQb3NpdGlvbiksIGFzIGl0XG4gICAgLy8gYWxvbmUgY2FuLCBiZXNpZGUgdGhlIHN0ZXBzJyBraW5kcy5cbiAgICBjb25zdCByZWZlcmVuY2VzID0gY2hhcnRSZWZlcmVuY2VzKGNvbmZpZywgZmFsc2UpO1xuICAgIGNvbnN0IGNvbnN0YW50cyA9IHRoaXMuX3JlZmVyZW5jZUxpbmVzKHJlZmVyZW5jZXMpO1xuICAgIGNvbnN0IGxlZ2VuZFBvc2l0aW9uOiBMZWdlbmRQb3NpdGlvbiA9IGNvbnN0YW50cy5sZW5ndGggPyBjb25maWcubGVnZW5kID8/IFBQVFhfQ09OU1RBTlRfTEVHRU5EIDogJ2hpZGRlbic7XG4gICAgY29uc3QgY2hhcnREYXRhID0gW1xuICAgICAgLi4uc2VyaWVzLm1hcCgoZW50cnkpID0+ICh7IG5hbWU6IGVudHJ5Lm5hbWUsIGxhYmVscywgdmFsdWVzOiBlbnRyeS52YWx1ZXMgfSkpLFxuICAgICAgLi4uY29uc3RhbnRzLm1hcCgobGluZSkgPT4gKHsgbmFtZTogbGluZS5uYW1lLCBsYWJlbHMsIHZhbHVlczogbGFiZWxzLm1hcCgoKSA9PiBsaW5lLnZhbHVlKSB9KSksXG4gICAgXTtcbiAgICBjb25zdCBlbnRyaWVzOiBQcHR4RW50cnlbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2JhcicsXG4gICAgICAgIGluZGV4ZXM6IHNlcmllcy5tYXAoKF8sIGluZGV4KSA9PiBpbmRleCksXG4gICAgICAgIHNlY29uZGFyeTogZmFsc2UsXG4gICAgICAgIG9wdGlvbnM6IHsgY2hhcnRDb2xvcnM6IHNlcmllcy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5jb2xvciksIGJhckdyb3VwaW5nOiAnc3RhY2tlZCcgfSxcbiAgICAgIH0sXG4gICAgICAuLi5jb25zdGFudHMubWFwKChsaW5lLCBpbmRleCkgPT4gdGhpcy5fY29uc3RhbnRFbnRyeShsaW5lLCBzZXJpZXMubGVuZ3RoICsgaW5kZXgsIGNoYXJ0RGF0YS5sZW5ndGgpKSxcbiAgICBdO1xuXG4gICAgdGhpcy5fYWRkQ2hhcnQoc2xpZGUsIHsgYmFyOiBwcHR4LkNoYXJ0VHlwZS5iYXIsIGxpbmU6IHBwdHguQ2hhcnRUeXBlLmxpbmUgfSwgZW50cmllcywgY2hhcnREYXRhLCB7XG4gICAgICB4LCB5LCB3LCBoLFxuICAgICAgc2hvd0xlZ2VuZDogbGVnZW5kUG9zaXRpb24gIT09ICdoaWRkZW4nLFxuICAgICAgbGVnZW5kUG9zOiBQUFRYX0xFR0VORF9QT1NbbGVnZW5kUG9zaXRpb25dLFxuICAgICAgbGVnZW5kRm9udFNpemU6IDksXG4gICAgICBiYXJEaXI6IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ2JhcicgOiAnY29sJyxcbiAgICAgIC4uLnRoaXMuX2F4aXNUZXh0T3B0aW9ucyhjb25maWcsIGRhdGEsIGZhbHNlKSxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgICAgLy8gVGhlIGF4aXMgc3BhbnMgdGhlIHJ1bm5pbmcgdG90YWwsIHNvIGl0cyBwZWFrIGlzIHRoZSBmdXJ0aGVzdCBhIHN0ZXBcbiAgICAgIC8vIGVuZHMgZnJvbSB6ZXJvIChvciB0aGUgZnVydGhlc3QgcmVmZXJlbmNlKTsgdGhlIHBpZWNlcyBpdCBpcyBjdXQgaW50b1xuICAgICAgLy8gbmV2ZXIgc3RhY2sgcGFzdCB0aGF0LiBUaGUgb25lIG1lYXN1cmUncyBmb3JtYXQgd3JpdGVzIGl0LCBhcyBvblxuICAgICAgLy8gc2NyZWVuLlxuICAgICAgdmFsQXhpc0xhYmVsRm9ybWF0Q29kZTogdGhpcy5fdmFsdWVBeGlzQ29kZShcbiAgICAgICAgbWVhc3VyZSAmJiBoYXNOdW1iZXJGb3JtYXQobWVhc3VyZSkgPyBtZWFzdXJlIDogbnVsbCxcbiAgICAgICAgW3dhdGVyZmFsbC5zdGVwcy5tYXAoKHN0ZXApID0+IHN0ZXAuc3RhcnQgKyAoc3RlcC5jaGFuZ2UgPz8gMCkpXSxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHJlZmVyZW5jZVBlYWsocmVmZXJlbmNlcywgMCksXG4gICAgICApLFxuICAgICAgLi4udGhpcy5fY2F0ZWdvcnlPcmRlck9wdGlvbnMoY29uZmlnLCBbJ2JhciddKSxcbiAgICAgIC8vIEEgcnVubmluZyB0b3RhbCBjYW4gZ28gYmVsb3cgemVybywgd2hlcmUgdGhlIGNhdGVnb3J5IGF4aXMgY3Jvc3NlcztcbiAgICAgIC8vIGl0cyBsYWJlbHMgc3RheSBhdCB0aGUgcGxvdCdzIGVkZ2UgaW5zdGVhZCBvZiBhY3Jvc3MgdGhlIGJhcnMuXG4gICAgICBjYXRBeGlzTGFiZWxQb3M6ICdsb3cnLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUG93ZXJQb2ludCBzdGFja3MgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcyBhcGFydCwgZWFjaCBmcm9tIHplcm8sIHNvIGFcbiAgLy8gYmFyIGNhbm5vdCBzaW1wbHkgc2l0IG9uIHRoZSB0b3RhbCBiZWZvcmUgaXQgdGhlIHdheSBpdCBkb2VzIG9uIHNjcmVlbi5cbiAgLy8gRWFjaCBzdGVwIGlzIGN1dCBhdCB6ZXJvIGluc3RlYWQ6IHRoZSBpbnZpc2libGUgYmFzZSBjYXJyaWVzIGl0IHRvIGl0cyBlbmRcbiAgLy8gbmVhcmVyIHplcm8sIGFuZCBpdHMga2luZCdzIHNlcmllcyBjYXJyaWVzIHRoZSByZXN0IOKAlCBvbmUgc2VyaWVzIGFib3ZlIHplcm9cbiAgLy8gYW5kIG9uZSBiZWxvdywgYmVjYXVzZSBhIHN0ZXAgdGhhdCBjcm9zc2VzIHplcm8gbmVlZHMgYm90aC4gRXZlcnkgb3RoZXJcbiAgLy8gcG9pbnQgaXMgbGVmdCBibGFuazogYSB6ZXJvIHRoZXJlIHdvdWxkIHN0aWxsIGRyYXcgYSB6ZXJvLWhlaWdodCBiYXIsIHdoaWNoXG4gIC8vIHJlbmRlcnMgYXMgYSBoYWlybGluZS4gQSBraW5kJ3Mgc2VyaWVzIHRoYXQgc3RheXMgYmxhbmsgaXMgZHJvcHBlZC5cbiAgcHJpdmF0ZSBfd2F0ZXJmYWxsU2VyaWVzKHN0ZXBzOiBXYXRlcmZhbGxTdGVwW10pOiBQcHR4Q2hhcnRTZXJpZXNbXSB7XG4gICAgY29uc3QgYmFzZTogUHB0eENoYXJ0U2VyaWVzID0geyBuYW1lOiAnJywgY29sb3I6ICd0cmFuc3BhcmVudCcsIHZhbHVlczogW10gfTtcbiAgICBjb25zdCBraW5kcyA9IE9iamVjdC5rZXlzKFdBVEVSRkFMTF9TRVJJRVNfTkFNRVMpIGFzIFdhdGVyZmFsbFN0ZXBLaW5kW107XG4gICAgY29uc3QgcGllY2UgPSAoa2luZDogV2F0ZXJmYWxsU3RlcEtpbmQpID0+ICh7XG4gICAgICBraW5kLCBuYW1lOiBXQVRFUkZBTExfU0VSSUVTX05BTUVTW2tpbmRdLCBjb2xvcjogUkVQT1JUX1dBVEVSRkFMTF9DT0xPUlNba2luZF0sIHZhbHVlczogW10gYXMgKG51bWJlciB8IG51bGwpW10sXG4gICAgfSk7XG4gICAgY29uc3QgYWJvdmUgPSBraW5kcy5tYXAocGllY2UpO1xuICAgIGNvbnN0IGJlbG93ID0ga2luZHMubWFwKHBpZWNlKTtcbiAgICBjb25zdCBibGFua1plcm8gPSAodmFsdWU6IG51bWJlcikgPT4gKHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlKTtcblxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBzdGVwcykge1xuICAgICAgY29uc3QgZW5kID0gc3RlcC5zdGFydCArIChzdGVwLmNoYW5nZSA/PyAwKTtcbiAgICAgIGNvbnN0IGxvdyA9IE1hdGgubWluKHN0ZXAuc3RhcnQsIGVuZCk7XG4gICAgICBjb25zdCBoaWdoID0gTWF0aC5tYXgoc3RlcC5zdGFydCwgZW5kKTtcblxuICAgICAgYmFzZS52YWx1ZXMucHVzaChibGFua1plcm8obG93ID4gMCA/IGxvdyA6IChoaWdoIDwgMCA/IGhpZ2ggOiAwKSkpO1xuICAgICAgYWJvdmUuZm9yRWFjaCgoZW50cnkpID0+IGVudHJ5LnZhbHVlcy5wdXNoKFxuICAgICAgICBlbnRyeS5raW5kID09PSBzdGVwLmtpbmQgPyBibGFua1plcm8oTWF0aC5tYXgoaGlnaCwgMCkgLSBNYXRoLm1heChsb3csIDApKSA6IG51bGwsXG4gICAgICApKTtcbiAgICAgIGJlbG93LmZvckVhY2goKGVudHJ5KSA9PiBlbnRyeS52YWx1ZXMucHVzaChcbiAgICAgICAgZW50cnkua2luZCA9PT0gc3RlcC5raW5kID8gYmxhbmtaZXJvKE1hdGgubWluKGxvdywgMCkgLSBNYXRoLm1pbihoaWdoLCAwKSkgOiBudWxsLFxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtiYXNlLCAuLi5bLi4uYWJvdmUsIC4uLmJlbG93XS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSBudWxsKSldO1xuICB9XG5cbiAgLy8gQ29tcGFjdCBwZXJpb2QgbGFiZWxzIG1hdGNoIHRoZSBvbi1zY3JlZW4gYXhpcywgaW4gdGhlIHJlcG9ydCdzIGxvY2FsZSBhbmRcbiAgLy8gdGhlIGF4aXMncyBkYXRlIGxhYmVsIHN0eWxlIChhIHNob3J0IGxhYmVsIHRha2VzIGl0cyB5ZWFyIG9ubHkgd2hlbiB0aGVcbiAgLy8gZGF0YSBzcGFucyB5ZWFycyk7IFBvd2VyUG9pbnQgY2FuJ3QgZG8gYSBzdHlsZWQgc2Vjb25kIGxpbmUsIHNvIGl0J3NcbiAgLy8gaW5saW5lLlxuICBwcml2YXRlIF9jYXRlZ29yeUxhYmVscyhcbiAgICBjYXRlZ29yaWVzOiBzdHJpbmdbXSxcbiAgICBncmFudWxhcml0eTogQ2hhcnRHcmFudWxhcml0eSB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgbG9jYWxlOiBSZXBvcnRMb2NhbGVUYWcsXG4gICAgZGF0ZUxhYmVsOiBSZXBvcnRDaGFydERhdGVMYWJlbCxcbiAgKTogc3RyaW5nW10ge1xuICAgIGlmICghZ3JhbnVsYXJpdHkpIHtcbiAgICAgIHJldHVybiBjYXRlZ29yaWVzO1xuICAgIH1cblxuICAgIGNvbnN0IG11bHRpWWVhciA9IHNwYW5zTXVsdGlwbGVZZWFycyhjYXRlZ29yaWVzKTtcblxuICAgIHJldHVybiBjYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IGZvcm1hdFBlcmlvZExhYmVsKGNhdGVnb3J5LCBncmFudWxhcml0eSwgbXVsdGlZZWFyLCBsb2NhbGUsIGRhdGVMYWJlbCkpO1xuICB9XG5cbiAgLy8gVGhlIGF4aXMgbGFiZWwgYW5kIHRpdGxlIHNldHRpbmdzIG9mIGEgY2hhcnQgd2l0aCBvbmUgdmFsdWUgYXhpcywgYW5kIHRoYXRcbiAgLy8gYXhpcydzIHJhbmdlICh2YWx1ZUF4aXMpLiBBIHBpZSBoYXMgbm8gdmFsdWUgYXhpcyB0byB0aXRsZS4gV2l0aG91dCBhXG4gIC8vIHZhbHVlQXhpcy5sYWJlbCB0aGUgdmFsdWUgYXhpcyBpcyB0aXRsZWQgYnkgdGhlIGZpcnN0IG1lYXN1cmUncyBsYWJlbCwgYXNcbiAgLy8gZGVja3MgYWx3YXlzIGhhdmUgYmVlbjsgdGhlIHNjcmVlbiBzaG93cyBvbmx5IGFuIGV4cGxpY2l0IHRpdGxlLiBBblxuICAvLyBleHBsaWNpdCBlbXB0eSBsYWJlbCBzdXBwcmVzc2VzIHRoYXQgZmFsbGJhY2ssIGFzIGl0IGRvZXMgb24gc2NyZWVuLCBhbmRcbiAgLy8gYSAxMDAlIHN0YWNrZWQgY2hhcnQncyBzaGFyZSBheGlzIGlzIG5ldmVyIHRpdGxlZCB3aXRoIG9uZSBzZXJpZXMnIG5hbWUuXG4gIHByaXZhdGUgX2F4aXNUZXh0T3B0aW9ucyhjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhLCBwaWU6IGJvb2xlYW4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLkFYSVNfRk9OVF9TSVpFUyxcbiAgICAgIC4uLnRoaXMuX2NhdGVnb3J5VGl0bGVPcHRpb25zKGNvbmZpZywgZGF0YSksXG4gICAgICAuLi4ocGllXG4gICAgICAgID8geyBzaG93VmFsQXhpc1RpdGxlOiBmYWxzZSB9XG4gICAgICAgIDogdGhpcy5fdmFsdWVBeGlzUmFuZ2VPcHRpb25zKFxuICAgICAgICAgIGNvbmZpZy52YWx1ZUF4aXMsXG4gICAgICAgICAgY29uZmlnLnZhbHVlQXhpcz8ubGFiZWwgPz8gKGNvbmZpZy5wZXJjZW50U3RhY2tlZCA9PT0gdHJ1ZSA/IHVuZGVmaW5lZCA6IGNvbmZpZy5tZWFzdXJlcz8uWzBdPy5sYWJlbCksXG4gICAgICAgICkpLFxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgY2F0ZWdvcnkgYXhpcydzIHRpdGxlLCBhcyB0aGUgc2NyZWVuIGFuZCB0aGUgUERGIG5hbWUgaXRcbiAgLy8gKGNhdGVnb3J5QXhpc1RpdGxlKTogYSBkcmlsbGVkIGNoYXJ0J3MgYXhpcyBuYW1lcyB0aGUgbGV2ZWwgaXQgd2FzIHJlYWRcbiAgLy8gYXQsIGVsc2UgdGhlIGF1dGhvcmVkIHRpdGxlLlxuICBwcml2YXRlIF9jYXRlZ29yeVRpdGxlT3B0aW9ucyhjb25maWc6IENoYXJ0Q29uZmlnLCBkYXRhOiBDb21wb25lbnREYXRhKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IHRpdGxlID0gY2F0ZWdvcnlBeGlzVGl0bGUoY29uZmlnLCBkYXRhKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaG93Q2F0QXhpc1RpdGxlOiAhIXRpdGxlLFxuICAgICAgY2F0QXhpc1RpdGxlOiB0aXRsZSxcbiAgICAgIGNhdEF4aXNUaXRsZUZvbnRTaXplOiAxMCxcbiAgICB9O1xuICB9XG5cbiAgLy8gT25lIHZhbHVlIGF4aXMncyB0aXRsZSBhbmQgdGhlIHJhbmdlIHRoZSBjb25maWcgcGlucyAodmFsdWVBeGlzUmFuZ2UsIGFzXG4gIC8vIG9uIHNjcmVlbikuIEV2ZXJ5IGtleSBpcyBzZXQsIGV2ZW4gd2hlbiBlbXB0eSwgc28gb24gYSB0d28tYXhpcyBjaGFydFxuICAvLyBub3RoaW5nIGlzIGluaGVyaXRlZCBmcm9tIHRoZSBjaGFydCdzIG9wdGlvbnMuXG4gIHByaXZhdGUgX3ZhbHVlQXhpc1JhbmdlT3B0aW9ucyhheGlzOiBDaGFydFZhbHVlQXhpcyB8IHVuZGVmaW5lZCwgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCByYW5nZSA9IHZhbHVlQXhpc1JhbmdlKGF4aXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dWYWxBeGlzVGl0bGU6ICEhdGl0bGUsXG4gICAgICB2YWxBeGlzVGl0bGU6IHRpdGxlIHx8IHVuZGVmaW5lZCxcbiAgICAgIHZhbEF4aXNNaW5WYWw6IHJhbmdlLm1pbixcbiAgICAgIHZhbEF4aXNNYXhWYWw6IHJhbmdlLm1heCxcbiAgICAgIHZhbEF4aXNNYWpvclVuaXQ6IHJhbmdlLmludGVydmFsLFxuICAgIH07XG4gIH1cblxuICAvLyBBIGxpc3QncyB0YWJsZSwgd2l0aG91dCB0aGUgY29sdW1ucyB0aGUgdmlld2VyIGhpZC4gQSB0b3RhbHMgcm93IGNsb3Nlc1xuICAvLyBpdCwgYm9sZCBvbiB0aGUgYm9yZGVyIGdyYXksIGluIGEgcm93IGtlcHQgZnJlZSBmb3IgaXQuXG4gIHByaXZhdGUgX3JlbmRlclRhYmxlKFxuICAgIHNsaWRlOiBhbnksXG4gICAgY29tcG9uZW50OiBSZXBvcnRDb21wb25lbnQsXG4gICAgZGF0YTogQ29tcG9uZW50RGF0YSxcbiAgICBoaWRkZW5Db2x1bW5zOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICB0aW1lem9uZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5zID0gbGlzdENvbHVtbnMoY29tcG9uZW50LCBkYXRhLCBjb250ZXh0LmxvY2FsZSwgaGlkZGVuQ29sdW1ucyk7XG4gICAgY29uc3QgdG90YWxzID0gbGlzdFRvdGFsc1JvdyhkYXRhLCBjb2x1bW5zLCB0aW1lem9uZSwgY29udGV4dCk7XG5cbiAgICBjb25zdCBjYXAgPSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKGggLyBTTElERV9ST1dfSCkgLSAxIC0gKHRvdGFscyA/IDEgOiAwKSk7XG4gICAgY29uc3Qgcm93cyA9IGRhdGEucm93cy5zbGljZSgwLCBjYXApO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IChkYXRhLnBhZ2luZz8udG90YWwgPz8gZGF0YS5yb3dzLmxlbmd0aCkgLSByb3dzLmxlbmd0aDtcblxuICAgIC8vIEEgY29sdW1uIG9mIGZvcm1hdHRlZCBudW1iZXJzIGlzIHJpZ2h0LWFsaWduZWQsIGl0cyBoZWFkaW5nIHRvbywgYXMgb25cbiAgICAvLyBzY3JlZW4uXG4gICAgY29uc3QgYWxpZ24gPSAoaW5kZXg6IG51bWJlcikgPT4gKGNvbHVtbnNbaW5kZXhdPy5udW1lcmljID8geyBhbGlnbjogJ3JpZ2h0JyB9IDoge30pO1xuXG4gICAgY29uc3QgaGVhZGVyID0gbGlzdEhlYWRpbmdzKGNvbXBvbmVudCwgZGF0YSwgY29udGV4dC5sb2NhbGUsIGhpZGRlbkNvbHVtbnMpLm1hcCgoaGVhZGluZywgaW5kZXgpID0+ICh7XG4gICAgICB0ZXh0OiBoZWFkaW5nLFxuICAgICAgb3B0aW9uczogeyBib2xkOiB0cnVlLCBjb2xvcjogJ0ZGRkZGRicsIGZpbGw6IHsgY29sb3I6ICc0RTc5QTcnIH0sIC4uLmFsaWduKGluZGV4KSB9LFxuICAgIH0pKTtcblxuICAgIC8vIEEgZGF0ZSBvciBmb3JtYXR0ZWQtbnVtYmVyIGNlbGwgaXMgYSB2YWx1ZSB3cml0dGVuIGluIHRoZSByZXBvcnQnc1xuICAgIC8vIGxvY2FsZTsgZXZlcnkgb3RoZXIgY2VsbCBwcmludHMgdGhlIHF1ZXJ5J3MgdGV4dCBhcyBpdCBjYW1lLlxuICAgIGNvbnN0IHZhbHVlTG9jYWxlID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gY29sdW1uLm51bWVyaWMgfHwgY29sdW1uLmZvcm1hdCA9PT0gUmVwb3J0TGlzdENvbHVtbkZvcm1hdC5EYXRlID8gY29udGV4dC5sb2NhbGUgOiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGJvZHkgPSByb3dzLm1hcCgocm93KSA9PiBjb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleCkgPT4gKHtcbiAgICAgIHRleHQ6IGV4cG9ydENlbGwocm93W2NvbHVtbi5jb2x1bW5dLCBjb2x1bW4sIHRpbWV6b25lLCBjb250ZXh0LCByb3cpLFxuICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoYWxpZ24oaW5kZXgpLCB2YWx1ZUxvY2FsZShpbmRleCkpLFxuICAgIH0pKSk7XG5cbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgYm9keS5wdXNoKFt7XG4gICAgICAgIHRleHQ6IG1vcmVSb3dzTm90aWNlKHJlbWFpbmluZyksXG4gICAgICAgIG9wdGlvbnM6IHsgY29sc3BhbjogY29sdW1ucy5sZW5ndGgsIGl0YWxpYzogdHJ1ZSwgY29sb3I6IE1VVEVEX0NPTE9SIH0gYXMgYW55LFxuICAgICAgfV0pO1xuICAgIH1cblxuICAgIC8vIFRoZSBsYWJlbCBpcyBpbnRlcmZhY2UgdGV4dCwgc28gaXQga2VlcHMgdGhlIGRlZmF1bHQgcHJvb2ZpbmcgbGFuZ3VhZ2UuXG4gICAgaWYgKHRvdGFscykge1xuICAgICAgY29uc3QgbGFiZWxDb2x1bW4gPSBsaXN0VG90YWxzTGFiZWxDb2x1bW4oY29sdW1ucywgZGF0YS50b3RhbHMpO1xuXG4gICAgICBib2R5LnB1c2godG90YWxzLm1hcCgodGV4dCwgaW5kZXgpID0+ICh7XG4gICAgICAgIHRleHQsXG4gICAgICAgIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKFxuICAgICAgICAgIHsgYm9sZDogdHJ1ZSwgZmlsbDogeyBjb2xvcjogJ0U0RTdFQicgfSwgLi4uYWxpZ24oaW5kZXgpIH0sXG4gICAgICAgICAgY29sdW1uc1tpbmRleF0uY29sdW1uID09PSBsYWJlbENvbHVtbiA/IHVuZGVmaW5lZCA6IHZhbHVlTG9jYWxlKGluZGV4KSxcbiAgICAgICAgKSxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgc2xpZGUuYWRkVGFibGUoW2hlYWRlciwgLi4uYm9keV0sIHtcbiAgICAgIHgsIHksIHcsXG4gICAgICBmb250U2l6ZTogOSxcbiAgICAgIGNvbG9yOiAnMUYyOTMzJyxcbiAgICAgIGJvcmRlcjogeyB0eXBlOiAnc29saWQnLCBwdDogMC41LCBjb2xvcjogJ0U0RTdFQicgfSxcbiAgICAgIGF1dG9QYWdlOiBmYWxzZSxcbiAgICAgIHJvd0g6IFNMSURFX1JPV19ILFxuICAgICAgdmFsaWduOiAnbWlkZGxlJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEEgdGFibGUgdGlsZSBhcyBhIG5hdGl2ZSB0YWJsZSAoZ3JpZEV4cG9ydFRhYmxlKCkpOiBpdHMgaGVhZGluZyByb3dzXG4gIC8vIHNwYW5uZWQgYXMgdGhlIHNjcmVlbidzIGhlYWRlciwgYXMgbWFueSBsaW5lcyBhcyB0aGUgYm94IGhvbGRzIChncm91cHNcbiAgLy8gYW5kIHRvdGFscyBib2xkLCBhIGdyb3VwJ3MgbGFiZWwgc3RlcHBlZCBpbiBieSBpdHMgZGVwdGgpLCB0aGVcbiAgLy8gbW9yZVJvd3NOb3RpY2Ugcm93IGZvciB0aGUgcmVzdCBhbmQgdGhlIHRvdGFsIHJvdy4gQSBudW1iZXIgaXMgd3JpdHRlblxuICAvLyBpbiB0aGUgcmVwb3J0J3MgbG9jYWxlLlxuICBwcml2YXRlIF9yZW5kZXJHcmlkVGFibGUoXG4gICAgc2xpZGU6IGFueSxcbiAgICBpdGVtOiBDb2xsZWN0ZWRDb21wb25lbnQsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZ3JpZEV4cG9ydFRhYmxlKGl0ZW0udGFibGUhKTtcbiAgICBjb25zdCBjZWxsID0gKGV4cG9ydGVkOiBHcmlkRXhwb3J0Q2VsbCwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSkgPT4gKHtcbiAgICAgIHRleHQ6IGAke0dSSURfSU5ERU5ULnJlcGVhdChleHBvcnRlZC5pbmRlbnQpfSR7ZXhwb3J0ZWQudGV4dH1gLFxuICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoe1xuICAgICAgICAuLi4oZXhwb3J0ZWQuY29sU3BhbiA+IDEgPyB7IGNvbHNwYW46IGV4cG9ydGVkLmNvbFNwYW4gfSA6IHt9KSxcbiAgICAgICAgLi4uKGV4cG9ydGVkLnJvd1NwYW4gPiAxID8geyByb3dzcGFuOiBleHBvcnRlZC5yb3dTcGFuIH0gOiB7fSksXG4gICAgICAgIC4uLihleHBvcnRlZC5ib2xkID8geyBib2xkOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIC4uLihleHBvcnRlZC5udW1lcmljID8geyBhbGlnbjogJ3JpZ2h0JyB9IDoge30pLFxuICAgICAgICAuLi4oZXhwb3J0ZWQuc2hhZGVcbiAgICAgICAgICA/IHsgZmlsbDogeyBjb2xvcjogZXhwb3J0ZWQuc2hhZGUuYmFja2dyb3VuZC5yZXBsYWNlKCcjJywgJycpIH0sIGNvbG9yOiBleHBvcnRlZC5zaGFkZS5mb3JlZ3JvdW5kLnJlcGxhY2UoJyMnLCAnJykgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSwgZXhwb3J0ZWQubnVtZXJpYyA/IGNvbnRleHQubG9jYWxlIDogdW5kZWZpbmVkKSxcbiAgICB9KTtcbiAgICBjb25zdCBjYXAgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGggLyBTTElERV9ST1dfSCkgLSB0YWJsZS5oZWFkLmxlbmd0aCAtICh0YWJsZS5mb290ID8gMSA6IDApKTtcbiAgICBjb25zdCBsaW5lcyA9IHRhYmxlLmJvZHkuc2xpY2UoMCwgY2FwKTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0YWJsZS5ib2R5Lmxlbmd0aCAtIGxpbmVzLmxlbmd0aCArIHRhYmxlLm1vcmVSb3dzO1xuXG4gICAgc2xpZGUuYWRkVGFibGUoW1xuICAgICAgLi4udGFibGUuaGVhZC5tYXAoKHJvdykgPT4gcm93Lm1hcCgoaGVhZGluZykgPT4gY2VsbChoZWFkaW5nLCB7IGNvbG9yOiAnRkZGRkZGJywgZmlsbDogeyBjb2xvcjogJzRFNzlBNycgfSB9KSkpLFxuICAgICAgLi4ubGluZXMubWFwKChyb3cpID0+IHJvdy5tYXAoKGxpbmUpID0+IGNlbGwobGluZSkpKSxcbiAgICAgIC4uLihyZW1haW5pbmcgPiAwXG4gICAgICAgID8gW1t7IHRleHQ6IG1vcmVSb3dzTm90aWNlKHJlbWFpbmluZyksIG9wdGlvbnM6IHsgY29sc3BhbjogdGFibGUubnVtZXJpYy5sZW5ndGgsIGl0YWxpYzogdHJ1ZSwgY29sb3I6IE1VVEVEX0NPTE9SIH0gfV1dXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uKHRhYmxlLmZvb3QgPyBbdGFibGUuZm9vdC5tYXAoKHRvdGFsKSA9PiBjZWxsKHRvdGFsLCB7IGJvbGQ6IHRydWUsIGZpbGw6IHsgY29sb3I6ICdFNEU3RUInIH0gfSkpXSA6IFtdKSxcbiAgICBdLCB7XG4gICAgICB4LCB5LCB3LFxuICAgICAgZm9udFNpemU6IDksXG4gICAgICBjb2xvcjogJzFGMjkzMycsXG4gICAgICBib3JkZXI6IHsgdHlwZTogJ3NvbGlkJywgcHQ6IDAuNSwgY29sb3I6ICdFNEU3RUInIH0sXG4gICAgICBhdXRvUGFnZTogZmFsc2UsXG4gICAgICByb3dIOiBTTElERV9ST1dfSCxcbiAgICAgIHZhbGlnbjogJ21pZGRsZScsXG4gICAgfSk7XG4gIH1cblxuICAvLyBBIEtQSSB0aWxlOiB0aGUgY2FyZCB0aGUgc2NyZWVuIGRyYXdzIChrcGktY2FyZC50cyBkZWNpZGVzIGV2ZXJ5IGxpbmUpLFxuICAvLyBhcyBuYXRpdmUgdGV4dCBib3hlcyBhbmQgc2hhcGVzIHN0YWNrZWQgYW5kIGNlbnRlcmVkIGluIHRoZSBib2R5LiBBIGNhcmRcbiAgLy8gd2l0aCBvbmx5IGl0cyB2YWx1ZSBhbmQgbGFiZWwga2VlcHMgdGhlIHRpbGUncyBsb25nLXN0YW5kaW5nIHNpbmdsZSB0ZXh0XG4gIC8vIGJveC5cbiAgcHJpdmF0ZSBfcmVuZGVyS3BpKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGl0ZW06IENvbGxlY3RlZENvbXBvbmVudCxcbiAgICB0aW1lem9uZTogc3RyaW5nLFxuICAgIGNvbnRleHQ6IFJlcG9ydEZvcm1hdENvbnRleHQsXG4gICAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbXBvbmVudC5jb25maWcgYXMgS3BpQ29uZmlnO1xuICAgIGNvbnN0IHZpZXcgPSBrcGlDYXJkVmlldyhjb25maWcsIGl0ZW0uZGF0YSwgeyBmb3JtYXQ6IGNvbnRleHQsIHRpbWV6b25lIH0pO1xuICAgIGNvbnN0IG5vdGVzID0gZXhwb3J0Tm90ZUxpbmVzKGl0ZW0sIHRpbWV6b25lLCBjb250ZXh0LmxvY2FsZSk7XG5cbiAgICBpZiAoIWtwaUNhcmRIYXNFeHRyYXModmlldywgbm90ZXMpKSB7XG4gICAgICBzbGlkZS5hZGRUZXh0KFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHZpZXcudmFsdWUsXG4gICAgICAgICAgb3B0aW9uczogcHB0eFJ1bk9wdGlvbnMoeyBmb250U2l6ZTogMjgsIGJvbGQ6IHRydWUsIGNvbG9yOiAnMUYyOTMzJywgYnJlYWtMaW5lOiB0cnVlIH0sIGNvbnRleHQubG9jYWxlKSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0ZXh0OiB2aWV3LmxhYmVsLCBvcHRpb25zOiB7IGZvbnRTaXplOiAxMCwgY29sb3I6IE1VVEVEX0NPTE9SIH0gfSxcbiAgICAgIF0sIHtcbiAgICAgICAgeCwgeSwgdywgaCxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLFxuICAgICAgICB2YWxpZ246ICdtaWRkbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBIHRpbGUgdG9vIHNob3J0IGZvciB0aGUgY2FyZCdzIGxpbmVzIHNocmlua3MgdGhlbSBhbGwgYWxpa2UuXG4gICAgY29uc3QgcGFydHMgPSBrcGlFeHBvcnRQYXJ0cyh2aWV3LCBub3RlcywgaCwgS1BJX0hFSUdIVFMpO1xuICAgIGNvbnN0IGhlaWdodHMgPSBzY2FsZWRLcGlIZWlnaHRzKEtQSV9IRUlHSFRTLCBwYXJ0cy5zY2FsZSk7XG4gICAgY29uc3QgbGluZUZvbnRTaXplID0gS1BJX0xJTkVfRk9OVF9TSVpFICogcGFydHMuc2NhbGU7XG4gICAgbGV0IHRvcCA9IHkgKyBNYXRoLm1heCgwLCAoaCAtIGtwaUV4cG9ydEhlaWdodCh2aWV3LCBwYXJ0cywgaGVpZ2h0cykpIC8gMik7XG4gICAgY29uc3QgbGluZSA9IChydW5zOiBhbnlbXSB8IHN0cmluZywgcm93SDogbnVtYmVyLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgc2xpZGUuYWRkVGV4dChydW5zLCB7XG4gICAgICAgIHgsIHk6IHRvcCwgdywgaDogcm93SCxcbiAgICAgICAgYWxpZ246ICdjZW50ZXInLCB2YWxpZ246ICdtaWRkbGUnLCBtYXJnaW46IDAsIGZpdDogJ25vbmUnLCAuLi5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgICB0b3AgKz0gcm93SDtcbiAgICB9O1xuXG4gICAgbGluZShcbiAgICAgIFt7IHRleHQ6IHZpZXcudmFsdWUsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHsgYm9sZDogdHJ1ZSwgY29sb3I6ICcxRjI5MzMnIH0sIGNvbnRleHQubG9jYWxlKSB9XSxcbiAgICAgIGhlaWdodHMudmFsdWUsXG4gICAgICB7IGZvbnRTaXplOiAyOCAqIHBhcnRzLnNjYWxlIH0sXG4gICAgKTtcblxuICAgIGlmICh2aWV3LmxhYmVsKSB7XG4gICAgICBsaW5lKHZpZXcubGFiZWwsIGhlaWdodHMubGFiZWwsIHsgZm9udFNpemU6IDEwICogcGFydHMuc2NhbGUsIGNvbG9yOiBNVVRFRF9DT0xPUiB9KTtcbiAgICB9XG5cbiAgICBpZiAocGFydHMuZGVsdGEgJiYgdmlldy5kZWx0YSkge1xuICAgICAgdGhpcy5fa3BpRGVsdGEocHB0eCwgc2xpZGUsIHZpZXcuZGVsdGEsIGNvbnRleHQsIHgsIHRvcCwgdywgcGFydHMuc2NhbGUpO1xuICAgICAgdG9wICs9IGhlaWdodHMuZGVsdGE7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLndpbmRvdykge1xuICAgICAgY29uc3QgZGF5cyA9IHRoaXMuX2ZpdEVzdGltYXRlKHZpZXcud2luZG93LCBsaW5lRm9udFNpemUsIHcpO1xuXG4gICAgICBsaW5lKFt7IHRleHQ6IGRheXMsIG9wdGlvbnM6IHBwdHhSdW5PcHRpb25zKHt9LCBjb250ZXh0LmxvY2FsZSkgfV0sIGhlaWdodHMud2luZG93LCB7XG4gICAgICAgIGZvbnRTaXplOiBsaW5lRm9udFNpemUsIGNvbG9yOiBNVVRFRF9DT0xPUixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwYXJ0cy50YXJnZXQgJiYgdmlldy50YXJnZXQpIHtcbiAgICAgIHRoaXMuX2twaVRhcmdldChwcHR4LCBzbGlkZSwgdmlldy50YXJnZXQsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy50YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLnNwYXJrbGluZSAmJiB2aWV3LnNwYXJrbGluZSkge1xuICAgICAgdGhpcy5fa3BpU3BhcmtsaW5lKHBwdHgsIHNsaWRlLCBpdGVtLCB2aWV3LnNwYXJrbGluZS52YWx1ZXMsIHZpZXcubGFiZWwsIHgsIHRvcCwgdyk7XG4gICAgICB0b3AgKz0gaGVpZ2h0cy5zcGFya2xpbmU7XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLm5vdGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZml0dGVkID0gcGFydHMubm90ZXMubWFwKChub3RlKSA9PiB0aGlzLl9maXRFc3RpbWF0ZShub3RlLCBTTUFMTF9GT05UX1NJWkUsIHcpKTtcblxuICAgICAgbGluZSh0aGlzLl9saW5lUnVucyhmaXR0ZWQsIHsgaXRhbGljOiB0cnVlIH0pLCBwYXJ0cy5ub3Rlcy5sZW5ndGggKiBoZWlnaHRzLm5vdGUsIHtcbiAgICAgICAgZm9udFNpemU6IFNNQUxMX0ZPTlRfU0laRSwgY29sb3I6IE1VVEVEX0NPTE9SLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGRlbHRhIHJvdzogdGhlIGNoYW5nZSBpbiB0aGUgY29sb3Igb2Ygd2hhdCBpdCBtZWFucyBhbmQgd2hhdCBpdCBpc1xuICAvLyBjb21wYXJlZCB3aXRoIGluIGdyZXksIGFzIG9uZSBjZW50ZXJlZCB0ZXh0IGJveCwgd2l0aCBhIHRyaWFuZ2xlIGJlc2lkZVxuICAvLyBpdCBwb2ludGluZyB0aGUgd2F5IHRoZSB2YWx1ZSBtb3ZlZCAobm9uZSB3aGVuIHRoZSBzaG93biBjaGFuZ2Ugcm91bmRzIHRvXG4gIC8vIHplcm8pLiBQb3dlclBvaW50IGxheXMgdGhlIHRleHQgb3V0IGl0c2VsZiwgc28gdGhlIHRyaWFuZ2xlIHNpdHMgd2hlcmVcbiAgLy8gdGhlIHRleHQncyBlc3RpbWF0ZWQgd2lkdGggcHV0cyBpdHMgc3RhcnQuXG4gIHByaXZhdGUgX2twaURlbHRhKFxuICAgIHBwdHg6IGFueSxcbiAgICBzbGlkZTogYW55LFxuICAgIGRlbHRhOiBLcGlDYXJkRGVsdGEsXG4gICAgY29udGV4dDogUmVwb3J0Rm9ybWF0Q29udGV4dCxcbiAgICB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsXG4gICAgc2NhbGUgPSAxLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb2xvciA9IFJFUE9SVF9LUElfQ0hBTkdFX0NPTE9SU1tkZWx0YS50b25lXTtcbiAgICBjb25zdCBmb250U2l6ZSA9IEtQSV9MSU5FX0ZPTlRfU0laRSAqIHNjYWxlO1xuICAgIGNvbnN0IHJvd0ggPSBLUElfSEVJR0hUUy5kZWx0YSAqIHNjYWxlO1xuICAgIGNvbnN0IHNpZGUgPSBLUElfQVJST1cgKiBzY2FsZTtcbiAgICBjb25zdCBhcnJvdyA9IGRlbHRhLnRyZW5kID09PSBSZXBvcnRLcGlUcmVuZC5GbGF0ID8gMCA6IHNpZGUgKyBLUElfQVJST1dfR0FQICogc2NhbGU7XG4gICAgY29uc3QgY2hhbmdlVyA9IHRoaXMuX2VzdGltYXRlZFdpZHRoKGRlbHRhLnRleHQsIGZvbnRTaXplKTtcbiAgICBjb25zdCBjb21wYXJlZCA9IGRlbHRhLmNvbXBhcmVkXG4gICAgICA/IHRoaXMuX2ZpdEVzdGltYXRlKGAgJHtkZWx0YS5jb21wYXJlZH1gLCBmb250U2l6ZSwgdyAtIGFycm93IC0gY2hhbmdlVylcbiAgICAgIDogJyc7XG4gICAgY29uc3QgdGV4dFcgPSBNYXRoLm1pbih3IC0gYXJyb3csIGNoYW5nZVcgKyB0aGlzLl9lc3RpbWF0ZWRXaWR0aChjb21wYXJlZCwgZm9udFNpemUpKTtcbiAgICBjb25zdCBydW5zID0gW1xuICAgICAgeyB0ZXh0OiBkZWx0YS50ZXh0LCBvcHRpb25zOiBwcHR4UnVuT3B0aW9ucyh7IGJvbGQ6IHRydWUsIGNvbG9yIH0sIGNvbnRleHQubG9jYWxlKSB9LFxuICAgICAgLi4uKGNvbXBhcmVkID8gW3sgdGV4dDogY29tcGFyZWQsIG9wdGlvbnM6IHsgY29sb3I6IE1VVEVEX0NPTE9SIH0gfV0gOiBbXSksXG4gICAgXTtcblxuICAgIHNsaWRlLmFkZFRleHQocnVucywge1xuICAgICAgeDogeCArIGFycm93LCB5OiB0b3AsIHc6IE1hdGgubWF4KDAuMSwgdyAtIGFycm93KSwgaDogcm93SCxcbiAgICAgIGZvbnRTaXplLCBhbGlnbjogJ2NlbnRlcicsIHZhbGlnbjogJ21pZGRsZScsIG1hcmdpbjogMCwgZml0OiAnbm9uZScsXG4gICAgfSk7XG5cbiAgICBpZiAoYXJyb3cpIHtcbiAgICAgIHNsaWRlLmFkZFNoYXBlKHBwdHguU2hhcGVUeXBlLnRyaWFuZ2xlLCB7XG4gICAgICAgIHg6IE1hdGgubWF4KHgsIHggKyAodyAtIGFycm93IC0gdGV4dFcpIC8gMiksXG4gICAgICAgIHk6IHRvcCArIChyb3dIIC0gc2lkZSkgLyAyLFxuICAgICAgICB3OiBzaWRlLFxuICAgICAgICBoOiBzaWRlLFxuICAgICAgICBmaWxsOiB7IGNvbG9yIH0sXG4gICAgICAgIGxpbmU6IHsgY29sb3IsIHdpZHRoOiAwIH0sXG4gICAgICAgIGZsaXBWOiBkZWx0YS50cmVuZCA9PT0gUmVwb3J0S3BpVHJlbmQuRG93bixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFib3V0IGhvdyB3aWRlIGEgbGluZSBvZiB0ZXh0IHJ1bnMsIGluY2hlczogUG93ZXJQb2ludCBsYXlzIGl0IG91dCwgc29cbiAgLy8gb25seSBhbiBlc3RpbWF0ZSBmcm9tIGl0cyBhdmVyYWdlIGNoYXJhY3RlciB3aWR0aCBpcyB0byBoYW5kLlxuICBwcml2YXRlIF9lc3RpbWF0ZWRXaWR0aCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAqIGZvbnRTaXplICogUFBUWF9DSEFSX1dJRFRIIC8gNzI7XG4gIH1cblxuICAvLyBUaGUgdGV4dCBjdXQgd2l0aCBhbiBlbGxpcHNpcyB0byBhYm91dCB0aGUgd2lkdGgsIHNvIGEgbGluZSB0aGF0IHdvdWxkXG4gIC8vIHdyYXAgcGFzdCBpdHMgcm93IHN0YXlzIG9uZSBsaW5lLlxuICBwcml2YXRlIF9maXRFc3RpbWF0ZSh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIsIHdpZHRoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9lc3RpbWF0ZWRXaWR0aCh0ZXh0LCBmb250U2l6ZSkgPD0gd2lkdGgpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih3aWR0aCAqIDcyIC8gKGZvbnRTaXplICogUFBUWF9DSEFSX1dJRFRIKSkgLSAxKTtcblxuICAgIHJldHVybiBjaGFycyA/IGAke3RleHQuc2xpY2UoMCwgY2hhcnMpLnRyaW1FbmQoKX3igKZgIDogJyc7XG4gIH1cblxuICAvLyBUaGUgdGFyZ2V0IGxpbmUgKCdHb2FsOiAkMSwwMDAgwrcgNTYlIG9mIHRhcmdldCcpIGFuZCwgd2hlbiB0aGUgc2VydmVyIHNlbnRcbiAgLy8gdGhlIHByb2dyZXNzLCBhIGJhciBmaWxsZWQgdGhhdCBmYXI6IGdyZWVuIG9uY2UgdGhlIHRhcmdldCBpcyBtZXQuXG4gIHByaXZhdGUgX2twaVRhcmdldChwcHR4OiBhbnksIHNsaWRlOiBhbnksIHRhcmdldDogS3BpQ2FyZFRhcmdldCwgeDogbnVtYmVyLCB0b3A6IG51bWJlciwgdzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGV4dCA9IHRhcmdldC5wcm9ncmVzcyA/IGAke3RhcmdldC50ZXh0fSDCtyAke3RhcmdldC5wcm9ncmVzc31gIDogdGFyZ2V0LnRleHQ7XG5cbiAgICBzbGlkZS5hZGRUZXh0KHRoaXMuX2ZpdEVzdGltYXRlKHRleHQsIEtQSV9MSU5FX0ZPTlRfU0laRSwgdyksIHtcbiAgICAgIHgsIHk6IHRvcCwgdywgaDogS1BJX1RBUkdFVF9URVhUX0gsXG4gICAgICBmb250U2l6ZTogS1BJX0xJTkVfRk9OVF9TSVpFLCBjb2xvcjogTVVURURfQ09MT1IsIGFsaWduOiAnY2VudGVyJywgdmFsaWduOiAnbWlkZGxlJywgbWFyZ2luOiAwLCBmaXQ6ICdub25lJyxcbiAgICB9KTtcblxuICAgIGlmICh0YXJnZXQuZmlsbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhclcgPSBNYXRoLm1pbih3ICogMC42LCBLUElfQkFSX1cpO1xuICAgIGNvbnN0IGJhclggPSB4ICsgKHcgLSBiYXJXKSAvIDI7XG4gICAgY29uc3QgYmFyWSA9IHRvcCArIEtQSV9UQVJHRVRfVEVYVF9IICsgS1BJX0JBUl9HQVA7XG4gICAgY29uc3QgYmFyID0gKHdpZHRoOiBudW1iZXIsIGNvbG9yOiBzdHJpbmcpID0+IHNsaWRlLmFkZFNoYXBlKHBwdHguU2hhcGVUeXBlLnJlY3QsIHtcbiAgICAgIHg6IGJhclgsIHk6IGJhclksIHc6IHdpZHRoLCBoOiBLUElfQkFSX0gsIGZpbGw6IHsgY29sb3IgfSwgbGluZTogeyBjb2xvciwgd2lkdGg6IDAgfSxcbiAgICB9KTtcblxuICAgIGJhcihiYXJXLCBLUElfVFJBQ0tfQ09MT1IpO1xuXG4gICAgaWYgKHRhcmdldC5maWxsID4gMCkge1xuICAgICAgYmFyKGJhclcgKiB0YXJnZXQuZmlsbCwgUkVQT1JUX0tQSV9DSEFOR0VfQ09MT1JTW3RhcmdldC50b25lXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIHNwYXJrbGluZSBhcyBhIG5hdGl2ZSBsaW5lIGNoYXJ0IHdpdGggaXRzIGF4ZXMsIGdyaWRsaW5lcyBhbmQgbGVnZW5kXG4gIC8vIGhpZGRlbiwgc2NhbGVkIGZyb20gaXRzIGxvd2VzdCB2YWx1ZSB0byBpdHMgaGlnaGVzdCBhcyBvbiBzY3JlZW4sIGl0c1xuICAvLyBwZXJpb2RzIGFuZCB2YWx1ZXMgaW4gdGhlIGNoYXJ0J3MgZGF0YSBzaGVldC4gQSBnYXAgc3RheXMgYSBnYXAuIE1hcmtlcnNcbiAgLy8gc2hvdyBvbmx5IHdoZW4gYSB2YWx1ZSBzdGFuZHMgYWxvbmUgYmV0d2VlbiBnYXBzICh0aGUgbGFzdCBvbmUgdG9vKSxcbiAgLy8gd2hpY2ggYSBsaW5lIGNhbm5vdCBkcmF3LlxuICBwcml2YXRlIF9rcGlTcGFya2xpbmUoXG4gICAgcHB0eDogYW55LFxuICAgIHNsaWRlOiBhbnksXG4gICAgaXRlbTogQ29sbGVjdGVkQ29tcG9uZW50LFxuICAgIHZhbHVlczogKG51bWJlciB8IG51bGwpW10sXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICB4OiBudW1iZXIsIHRvcDogbnVtYmVyLCB3OiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG51bWJlcnMgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIG51bWJlciA9PiB2YWx1ZSAhPT0gbnVsbCk7XG4gICAgY29uc3QgbG93ID0gTWF0aC5taW4oLi4ubnVtYmVycyk7XG4gICAgY29uc3QgaGlnaCA9IE1hdGgubWF4KC4uLm51bWJlcnMpO1xuICAgIGNvbnN0IHBhZCA9IGhpZ2ggPT09IGxvdyA/IE1hdGgubWF4KDEsIE1hdGguYWJzKGhpZ2gpKSA6IDA7XG4gICAgY29uc3QgYm94VyA9IE1hdGgubWluKHcgKiAwLjcsIEtQSV9TUEFSS0xJTkVfVyk7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBrcGlTcGFya2xpbmVHZW9tZXRyeSh2YWx1ZXMsIGZhbHNlKTtcbiAgICAvLyBrcGlTcGFya2xpbmVHZW9tZXRyeSBrZWVwcyB0aGUgbGFzdCBwb2ludCBvdXQgb2YgdGhlIGRvdHMsIGFzIHRoZVxuICAgIC8vIHNjcmVlbiBtYXJrcyBpdCBhcGFydDsgYSBsYXN0IHZhbHVlIGFmdGVyIGEgZ2FwIGlzIGEgbG9uZSBwb2ludCB0b28uXG4gICAgY29uc3QgbGFzdFN0YW5kc0Fsb25lID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXSAhPT0gbnVsbFxuICAgICAgJiYgKHZhbHVlcy5sZW5ndGggPT09IDEgfHwgdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAyXSA9PT0gbnVsbCk7XG4gICAgY29uc3QgcGVyaW9kcyA9IGl0ZW0uZGF0YT8ua3BpPy5zcGFya2xpbmU/LnBvaW50cz8ubWFwKChwb2ludCkgPT4gcG9pbnQucGVyaW9kKSA/PyBbXTtcbiAgICBjb25zdCBjb2xvciA9IFJFUE9SVF9LUElfU1BBUktMSU5FX0NPTE9SO1xuXG4gICAgdGhpcy5fYWRkQ2hhcnQoc2xpZGUsIHsgbGluZTogcHB0eC5DaGFydFR5cGUubGluZSB9LCBbe1xuICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgaW5kZXhlczogWzBdLFxuICAgICAgc2Vjb25kYXJ5OiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2hhcnRDb2xvcnM6IFtjb2xvcl0sXG4gICAgICAgIGxpbmVTaXplOiAxLjUsXG4gICAgICAgIGxpbmVEYXRhU3ltYm9sOiBnZW9tZXRyeS5kb3RzLmxlbmd0aCB8fCBsYXN0U3RhbmRzQWxvbmUgPyAnY2lyY2xlJyA6ICdub25lJyxcbiAgICAgICAgbGluZURhdGFTeW1ib2xTaXplOiA0LFxuICAgICAgfSxcbiAgICB9XSwgW3tcbiAgICAgIG5hbWU6IGxhYmVsIHx8IEtQSV9TUEFSS0xJTkVfTkFNRSxcbiAgICAgIGxhYmVsczogdmFsdWVzLm1hcCgoXywgaW5kZXgpID0+IHBlcmlvZHNbaW5kZXhdID8/IFN0cmluZyhpbmRleCArIDEpKSxcbiAgICAgIHZhbHVlcyxcbiAgICB9XSwge1xuICAgICAgeDogeCArICh3IC0gYm94VykgLyAyLCB5OiB0b3AsIHc6IGJveFcsIGg6IEtQSV9IRUlHSFRTLnNwYXJrbGluZSxcbiAgICAgIHNob3dMZWdlbmQ6IGZhbHNlLFxuICAgICAgc2hvd1RpdGxlOiBmYWxzZSxcbiAgICAgIGNhdEF4aXNIaWRkZW46IHRydWUsXG4gICAgICB2YWxBeGlzSGlkZGVuOiB0cnVlLFxuICAgICAgY2F0QXhpc0xpbmVTaG93OiBmYWxzZSxcbiAgICAgIHZhbEF4aXNMaW5lU2hvdzogZmFsc2UsXG4gICAgICBzaG93Q2F0QXhpc1RpdGxlOiBmYWxzZSxcbiAgICAgIHNob3dWYWxBeGlzVGl0bGU6IGZhbHNlLFxuICAgICAgdmFsR3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9LFxuICAgICAgY2F0R3JpZExpbmU6IHsgc3R5bGU6ICdub25lJyB9LFxuICAgICAgdmFsQXhpc01pblZhbDogbG93IC0gcGFkLFxuICAgICAgdmFsQXhpc01heFZhbDogaGlnaCArIHBhZCxcbiAgICAgIC4uLkJMQU5LU19BU19HQVBTLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2x1ZyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldKy9nLCAnLScpLnJlcGxhY2UoL14tK3wtKyQvZywgJycpIHx8ICdyZXBvcnQnO1xuICB9XG59XG5cbi8vIEdpdmVzIGEgdGV4dCB0YWJsZSdzIGNlbGwgdGhlIGdyaWQgc2xvdHMgaXQgY292ZXJzIGZyb20gaXRzIHRvcCBsZWZ0OiBhc1xuLy8gbWFueSBjb2x1bW5zIGFzIGFyZSBmcmVlIGluIGl0cyB0b3Agcm93LCBhbmQgYXMgbWFueSByb3dzIGRvd24gYXMgYXJlIGZyZWVcbi8vIGFjcm9zcyB0aG9zZSBjb2x1bW5zLCBhdCBtb3N0IGl0cyBvd24gc3BhbnMuIEEgc2xvdCBpcyBmcmVlIHVudGlsIGEgY2VsbFxuLy8gcGxhY2VkIGJlZm9yZSBpdCBob2xkcyBpdCwgYW5kIHRoZSBncmlkIGhvbGRzIG9ubHkgdGhlIGtlcHQgcm93cy4gU28gYSBzcGFuXG4vLyB0aGUgYm94IGN1dHMgZW5kcyBhdCB0aGUgbGFzdCBrZXB0IHJvdywgYW5kIG9uZSB0aGUgaHRtbCBtYWtlcyBvdmVybGFwXG4vLyBhbm90aGVyIGNlbGwgKHdoaWNoIGEgYnJvd3NlciBkcmF3cyBvbiB0b3Agb2YgaXQpIGVuZHMgd2hlcmUgdGhleSBtZWV0LlxuZnVuY3Rpb24gY2xhaW1TbG90cyhzbG90czogKFRleHRUYWJsZUNlbGwgfCBudWxsKVtdW10sIGNlbGw6IFRleHRUYWJsZUNlbGwpOiB2b2lkIHtcbiAgY29uc3QgZnJlZSA9IChyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIpID0+IHJvdyA8IHNsb3RzLmxlbmd0aCAmJiBjb2x1bW4gPCBzbG90c1tyb3ddLmxlbmd0aCAmJiAhc2xvdHNbcm93XVtjb2x1bW5dO1xuICBjb25zdCBjb2x1bW5zID0gKGNvdW50OiBudW1iZXIpID0+IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sIChfLCBvZmZzZXQpID0+IGNlbGwuY29sdW1uICsgb2Zmc2V0KTtcbiAgbGV0IGNvbFNwYW4gPSAwO1xuICBsZXQgcm93U3BhbiA9IDA7XG5cbiAgd2hpbGUgKGNvbFNwYW4gPCBjZWxsLmNvbFNwYW4gJiYgZnJlZShjZWxsLnJvdywgY2VsbC5jb2x1bW4gKyBjb2xTcGFuKSkge1xuICAgIGNvbFNwYW4rKztcbiAgfVxuICB3aGlsZSAoY29sU3BhbiAmJiByb3dTcGFuIDwgY2VsbC5yb3dTcGFuICYmIGNvbHVtbnMoY29sU3BhbikuZXZlcnkoKGNvbHVtbikgPT4gZnJlZShjZWxsLnJvdyArIHJvd1NwYW4sIGNvbHVtbikpKSB7XG4gICAgcm93U3BhbisrO1xuICB9XG5cbiAgY29uc3QgY2xhaW1lZCA9IHsgLi4uY2VsbCwgY29sU3Bhbiwgcm93U3BhbiB9O1xuICBmb3IgKGxldCByb3cgPSBjZWxsLnJvdzsgcm93IDwgY2VsbC5yb3cgKyByb3dTcGFuOyByb3crKykge1xuICAgIHNsb3RzW3Jvd10uZmlsbChjbGFpbWVkLCBjZWxsLmNvbHVtbiwgY2VsbC5jb2x1bW4gKyBjb2xTcGFuKTtcbiAgfVxufVxuIl19