@discordeno/gateway 21.0.1-next.f6ea699 → 21.0.1-next.fca0b40

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.
@@ -276,7 +276,6 @@ let DiscordenoShard = class DiscordenoShard {
276
276
  }, true);
277
277
  return await new Promise((resolve)=>{
278
278
  this.resolves.set('READY', ()=>{
279
- this.events.identified?.(this);
280
279
  resolve();
281
280
  });
282
281
  // When identifying too fast, Discord sends an invalid session payload.
@@ -575,6 +574,7 @@ let DiscordenoShard = class DiscordenoShard {
575
574
  case 'READY':
576
575
  {
577
576
  const payload = packet.d;
577
+ this.events.ready?.(this);
578
578
  // Important for future resumes.
579
579
  this.resumeGatewayUrl = payload.resume_gateway_url;
580
580
  this.sessionId = payload.session_id;
@@ -688,4 +688,4 @@ let DiscordenoShard = class DiscordenoShard {
688
688
  }
689
689
  const _default = DiscordenoShard;
690
690
 
691
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcidcbmltcG9ydCB7IGNyZWF0ZUluZmxhdGUsIHR5cGUgSW5mbGF0ZSwgaW5mbGF0ZVN5bmMsIGNvbnN0YW50cyBhcyB6bGliQ29uc3RhbnRzIH0gZnJvbSAnbm9kZTp6bGliJ1xuaW1wb3J0IHR5cGUgeyBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIERpc2NvcmRIZWxsbywgRGlzY29yZFJlYWR5LCBEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBjYW1lbGl6ZSwgZGVsYXksIExlYWt5QnVja2V0LCBsb2dnZXIgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB0eXBlIHsgRGVjb21wcmVzcyBhcyBac3RkRGVjb21wcmVzcyB9IGZyb20gJ2Z6c3RkJ1xuaW1wb3J0IE5vZGVXZWJTb2NrZXQgZnJvbSAnd3MnXG5pbXBvcnQge1xuICB0eXBlIFNoYXJkRXZlbnRzLFxuICB0eXBlIFNoYXJkR2F0ZXdheUNvbmZpZyxcbiAgdHlwZSBTaGFyZEhlYXJ0LFxuICBTaGFyZFNvY2tldENsb3NlQ29kZXMsXG4gIHR5cGUgU2hhcmRTb2NrZXRSZXF1ZXN0LFxuICBTaGFyZFN0YXRlLFxuICBUcmFuc3BvcnRDb21wcmVzc2lvbixcbn0gZnJvbSAnLi90eXBlcy5qcydcblxuY29uc3QgWkxJQl9TWU5DX0ZMVVNIID0gbmV3IFVpbnQ4QXJyYXkoWzB4MCwgMHgwLCAweGZmLCAweGZmXSlcblxubGV0IGZ6c3RkOiB0eXBlb2YgaW1wb3J0KCdmenN0ZCcpXG5cbi8qKiBTaW5jZSBmenN0ZCBpcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5LCB3ZSBuZWVkIHRvIGltcG9ydCBpdCBsYXppbHkuICovXG5hc3luYyBmdW5jdGlvbiBnZXRGWlN0ZCgpIHtcbiAgcmV0dXJuIChmenN0ZCA/Pz0gYXdhaXQgaW1wb3J0KCdmenN0ZCcpKVxufVxuXG5leHBvcnQgY2xhc3MgRGlzY29yZGVub1NoYXJkIHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgc2hhcmQuICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGNvbmZpZyBkZXRhaWxzIHRoYXQgdGhpcyBzaGFyZCB3aWxsIHVzZWQgdG8gY29ubmVjdCB0byBkaXNjb3JkLiAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoaXMgY29udGFpbnMgYWxsIHRoZSBoZWFydGJlYXQgaW5mb3JtYXRpb24gKi9cbiAgaGVhcnQ6IFNoYXJkSGVhcnRcbiAgLyoqIFRoZSBtYXhpbXVtIG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBiZSBzZW5kIHRvIGRpc2NvcmQgcGVyIHJhdGUgbGltaXQgdGljay4gVHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqL1xuICBtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2s6IG51bWJlciA9IDEyMFxuICAvKiogVGhlIHByZXZpb3VzIHBheWxvYWQgc2VxdWVuY2UgbnVtYmVyLiAqL1xuICBwcmV2aW91c1NlcXVlbmNlTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAvKiogSW4gd2hpY2ggaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgdGhlIGdhdGV3YXkgcmVzZXRzIGl0J3MgcmF0ZSBsaW1pdC4gKi9cbiAgcmF0ZUxpbWl0UmVzZXRJbnRlcnZhbDogbnVtYmVyID0gNjAwMDBcbiAgLyoqIEN1cnJlbnQgc2Vzc2lvbiBpZCBvZiB0aGUgc2hhcmQgaWYgcHJlc2VudC4gKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nXG4gIC8qKiBUaGlzIGNvbnRhaW5zIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB0byBEaXNjb3JkLCBpZiBjdXJyZW50bHkgY29ubmVjdGVkLiAqL1xuICBzb2NrZXQ/OiBXZWJTb2NrZXRcbiAgLyoqIEN1cnJlbnQgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHRoaXMuICovXG4gIHN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIC8qKiBUaGUgdXJsIHByb3ZpZGVkIGJ5IGRpc2NvcmQgdG8gdXNlIHdoZW4gcmVzdW1pbmcgYSBjb25uZWN0aW9uIGZvciB0aGlzIHRoaXMuICovXG4gIHJlc3VtZUdhdGV3YXlVcmw6IHN0cmluZyA9ICcnXG4gIC8qKiBUaGUgc2hhcmQgcmVsYXRlZCBldmVudCBoYW5kbGVycy4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50cyA9IHt9XG4gIC8qKiBDYWNoZSBmb3IgcGVuZGluZyBnYXRld2F5IHJlcXVlc3RzIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gc2VuZCB3aGlsZSB0aGUgZ2F0ZXdheSB3ZW50IG9mZmxpbmUuICovXG4gIG9mZmxpbmVTZW5kUXVldWU6ICgoKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqIFJlc29sdmUgaW50ZXJuYWwgd2FpdGluZyBzdGF0ZXMuIE1hcHBlZCBieSBTZWxlY3RlZEV2ZW50cyA9PiBSZXNvbHZlRnVuY3Rpb24gKi9cbiAgcmVzb2x2ZXMgPSBuZXcgTWFwPCdSRUFEWScgfCAnUkVTVU1FRCcgfCAnSU5WQUxJRF9TRVNTSU9OJywgKHBheWxvYWQ6IERpc2NvcmRHYXRld2F5UGF5bG9hZCkgPT4gdm9pZD4oKVxuICAvKiogU2hhcmQgYnVja2V0LiBPbmx5IGFjY2VzcyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gQnVja2V0IGZvciBoYW5kbGluZyBzaGFyZCByZXF1ZXN0IHJhdGUgbGltaXRzLiAqL1xuICBidWNrZXQ6IExlYWt5QnVja2V0XG4gIC8qKiBMb2dnZXIgZm9yIHRoZSBidWNrZXQuICovXG4gIGxvZ2dlcjogUGljazx0eXBlb2YgbG9nZ2VyLCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdmYXRhbCc+XG4gIC8qKlxuICAgKiBJcyB0aGUgc2hhcmQgZ29pbmcgb2ZmbGluZT9cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyB3aWxsIGJlIHRydWUgaWYgdGhlIGNsb3NlIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBlaXRoZXIgMTAwMCBvciAxMDAxXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgZ29pbmdPZmZsaW5lID0gZmFsc2VcbiAgLyoqIFRleHQgZGVjb2RlciB1c2VkIGZvciBjb21wcmVzc2VkIHBheWxvYWRzLiAqL1xuICB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIC8qKiBaTGliIEluZmxhdGUgaW5zdGFuY2UgZm9yIFpMaWItc3RyZWFtIHRyYW5zcG9ydCBwYXlsb2Fkcy4gKi9cbiAgaW5mbGF0ZT86IEluZmxhdGVcbiAgLyoqIFpMaWIgaW5mbGF0ZSBidWZmZXIuICovXG4gIGluZmxhdGVCdWZmZXI6IFVpbnQ4QXJyYXkgfCBudWxsID0gbnVsbFxuICAvKiogWlN0ZCBEZWNvbXByZXNzIGluc3RhbmNlIGZvciBaU3RkLXN0cmVhbSB0cmFuc3BvcnQgcGF5bG9hZHMuICovXG4gIHpzdGREZWNvbXByZXNzPzogWnN0ZERlY29tcHJlc3NcbiAgLyoqIFF1ZXVlIGZvciBjb21wcmVzc2VkIHBheWxvYWRzIGZvciBac3RkIERlY29tcHJlc3MgKi9cbiAgZGVjb21wcmVzc2lvblByb21pc2VzUXVldWU6ICgoZGF0YTogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGFuZCBoYW5kbGVDbG9zZSgpIGhhcyBmaW5pc2hlZCB1cGRhdGluZyBpbnRlcm5hbCBzdGF0ZXMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgcmVzb2x2ZUFmdGVyQ2xvc2U/OiAoY2xvc2U6IENsb3NlRXZlbnQpID0+IHZvaWRcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFyZENyZWF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZFxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG9wdGlvbnMuY29ubmVjdGlvblxuICAgIHRoaXMuZXZlbnRzID0gb3B0aW9ucy5ldmVudHNcbiAgICB0aGlzLmxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlclxuXG4gICAgdGhpcy5oZWFydCA9IHtcbiAgICAgIGFja25vd2xlZGdlZDogZmFsc2UsXG4gICAgICBpbnRlcnZhbDogNDUwMDAsXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdElkZW50aWZ5KSB0aGlzLnJlcXVlc3RJZGVudGlmeSA9IG9wdGlvbnMucmVxdWVzdElkZW50aWZ5XG4gICAgaWYgKG9wdGlvbnMubWFrZVByZXNlbmNlKSB0aGlzLm1ha2VQcmVzZW5jZSA9IG9wdGlvbnMubWFrZVByZXNlbmNlXG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBMZWFreUJ1Y2tldCh7XG4gICAgICBtYXg6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxBbW91bnQ6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH0pXG4gIH1cblxuICAvKiogVGhlIGdhdGV3YXkgY29uZmlndXJhdGlvbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZC4gKi9cbiAgZ2V0IGdhdGV3YXlDb25maWcoKTogU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uXG4gIH1cblxuICAvKiogVGhlIHVybCB0byBjb25uZWN0IHRvLiBJbml0aWFsbHkgdGhpcyBpcyB0aGUgZGlzY29yZCBnYXRld2F5IHVybCwgYW5kIHRoZW4gaXMgc3dpdGNoZWQgdG8gcmVzdW1lIGdhdGV3YXkgdXJsIG9uY2UgYSBSRUFEWSBpcyByZWNlaXZlZC4gKi9cbiAgZ2V0IGNvbm5lY3Rpb25VcmwoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgfHwgYW5kIG5vdCA/PyBoZXJlLiA/PyB3aWxsIGNhdXNlIGEgYnVnLlxuICAgIHJldHVybiB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgfHwgdGhpcy5nYXRld2F5Q29uZmlnLnVybFxuICB9XG5cbiAgLyoqIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBzYWZlbHkgYmUgbWFkZSBwZXIgcmF0ZSBsaW1pdCBpbnRlcnZhbCwgYmVmb3JlIHRoZSBnYXRld2F5IGdldHMgZGlzY29ubmVjdGVkIGR1ZSB0byBhbiBleGNlZWRlZCByYXRlIGxpbWl0LiAqL1xuICBjYWxjdWxhdGVTYWZlUmVxdWVzdHMoKTogbnVtYmVyIHtcbiAgICAvLyAqIDIgYWRkcyBleHRyYSBzYWZldHkgbGF5ZXIgZm9yIGRpc2NvcmRzIE9QIDEgcmVxdWVzdHMgdGhhdCB3ZSBuZWVkIHRvIHJlc3BvbmQgdG9cbiAgICBjb25zdCBzYWZlUmVxdWVzdHMgPSB0aGlzLm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayAtIE1hdGguY2VpbCh0aGlzLnJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwgLyB0aGlzLmhlYXJ0LmludGVydmFsKSAqIDJcblxuICAgIHJldHVybiBzYWZlUmVxdWVzdHMgPCAwID8gMCA6IHNhZmVSZXF1ZXN0c1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgLy8gSGlnaGVyIHByaW9yaXR5IHJlcXVlc3RzIGdldCBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS5cbiAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICBlbHNlIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5wdXNoKHJlc29sdmUpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgc29ja2V0IGNvbm5lY3Rpb24gdG8gZGlzY29yZCBpZiBwcmVzZW50LiAqL1xuICBhc3luYyBjbG9zZShjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVxdWVzdCBmb3IgU2hhcmQgIyR7dGhpcy5pZH0gdG8gY2xvc2UgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgaWYgKHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlICE9PSBOb2RlV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9J3MgcmVhZHkgc3RhdGUgaXMgJHt0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZX0sIFVuYWJsZSB0byBjbG9zZS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5nb2luZ09mZmxpbmUgPSBjb2RlID09PSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vcm1hbENsb3N1cmUgfHwgY29kZSA9PT0gR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Hb2luZ0F3YXlcblxuICAgIC8vIFRoaXMgaGFzIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbCB0byBzb2NrZXQuY2xvc2UgYXMgZm9yIGV4YW1wbGUgQnVuIGNhbGxzIHNvY2tldC5vbmNsb3NlIGltbWVkaWF0ZWx5IG9uIHRoZSAuY2xvc2UoKSBjYWxsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gZW5kXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlID0gcmVzb2x2ZVxuICAgIH0pXG5cbiAgICB0aGlzLnNvY2tldC5jbG9zZShjb2RlLCByZWFzb24pXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBXYWl0aW5nIGZvciBTaGFyZCAjJHt0aGlzLmlkfSB0byBjbG9zZSB0aGUgc29ja2V0IHdpdGggY29kZSAke2NvZGV9LmApXG5cbiAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgZnVsbHkgY2xvc2VkLCBvdGhlcndpc2UgdGhlcmUnbGwgYmUgcmFjZSBjb25kaXRpb24gaXNzdWVzIGlmIHdlIHRyeSB0byBjb25uZWN0IGFnYWluLCByZXN1bHRpbmcgaW4gdW5leHBlY3RlZCBiZWhhdmlvci5cbiAgICBhd2FpdCBwcm9taXNlXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgLy8gUmVzZXQgdGhlIHJlc29sdmVBZnRlckNsb3NlIGZ1bmN0aW9uIGFmdGVyIGl0IGhhcyBiZWVuIHJlc29sdmVkLlxuICAgIHRoaXMucmVzb2x2ZUFmdGVyQ2xvc2UgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8RGlzY29yZGVub1NoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gQ29ubmVjdGluZyBTaGFyZCAjJHt0aGlzLmlkfSBzb2NrZXQuYClcblxuICAgIHRoaXMuZXZlbnRzLmNvbm5lY3Rpbmc/Lih0aGlzKVxuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmNvbm5lY3Rpb25VcmwpXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCB0aGlzLmdhdGV3YXlDb25maWcudmVyc2lvbi50b1N0cmluZygpKVxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdlbmNvZGluZycsICdqc29uJylcblxuICAgIC8vIFNldCB0aGUgY29tcHJlc3MgdXJsIHBhcmFtIGFuZCBpbml0aWFsaXplIHRoZSBkZWNvbXByZXNzaW9uIGNvbnRleHRzXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbikge1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvbXByZXNzJywgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56bGliKSB7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcbiAgICAgICAgdGhpcy5pbmZsYXRlID0gY3JlYXRlSW5mbGF0ZSh7XG4gICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWJDb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgIGNodW5rU2l6ZTogNjQgKiAxMDI0LFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdUaGUgd2FzIGFuIGVycm9yIGluIGRlY29tcHJlc3NpbmcgYSBaTGliIGNvbXByZXNzZWQgcGF5bG9hZCcsIGUpXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5pbmZsYXRlLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHJldHVyblxuXG4gICAgICAgICAgaWYgKHRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGggKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICBuZXdCdWZmZXIuc2V0KHRoaXMuaW5mbGF0ZUJ1ZmZlcilcbiAgICAgICAgICAgIG5ld0J1ZmZlci5zZXQoZGF0YSwgdGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBuZXdCdWZmZXJcblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gZGF0YVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56c3RkKSB7XG4gICAgICAgIGNvbnN0IGZ6c3RkID0gYXdhaXQgZ2V0RlpTdGQoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBcImZ6c3RkXCIgaXMgbm90IGluc3RhbGxlZC4gRGlzYWJsZWQgdHJhbnNwb3J0IGNvbXByZXNzaW9uLicpXG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ2NvbXByZXNzJylcblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGZ6c3RkKSB7XG4gICAgICAgICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IG5ldyBmenN0ZC5EZWNvbXByZXNzKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKGRhdGEpXG4gICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICAgICAgICAgIHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUuc2hpZnQoKT8uKHBhcnNlZERhdGEpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MgJiYgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFBheWxvYWQgY29tcHJlc3Npb24gaGFzIGJlZW4gZGlzYWJsZWQgc2luY2UgdHJhbnNwb3J0IGNvbXByZXNzaW9uIGlzIGVuYWJsZWQgYXMgd2VsbC4nKVxuICAgICAgdGhpcy5nYXRld2F5Q29uZmlnLmNvbXByZXNzID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBXZSBjaGVjayBmb3IgYnVpbHQtaW4gV2ViU29ja2V0IGltcGxlbWVudGF0aW9ucyBpbiBCdW4gb3IgRGVubywgTm9kZUpTIHYyMiBoYXMgYW4gaW1wbGVtZW50YXRpb24gdG9vIGJ1dCBpdCBzZWVtcyB0byBiZSBsZXNzIG9wdGltaXplZCBzbyBmb3Igbm93IGl0IGlzIGJldHRlciB0byB1c2UgdGhlIHdzIG5wbSBwYWNrYWdlXG4gICAgY29uc3Qgc2hvdWxkVXNlQnVpbHRpbiA9IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdXZWJTb2NrZXQnKSAmJiAoUmVmbGVjdC5oYXMoZ2xvYmFsVGhpcywgJ0J1bicpIHx8IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdEZW5vJykpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVXZWJTb2NrZXQgZG9lc24ndCBzdXBwb3J0IFwiZGlzcGF0Y2hFdmVudFwiLCBhbmQgd2hpbGUgd2UgZG9uJ3QgdXNlIGl0LCBpdCBpcyByZXF1aXJlZCBvbiB0aGUgXCJXZWJTb2NrZXRcIiB0eXBlXG4gICAgY29uc3Qgc29ja2V0OiBXZWJTb2NrZXQgPSBzaG91bGRVc2VCdWlsdGluID8gbmV3IFdlYlNvY2tldCh1cmwpIDogbmV3IE5vZGVXZWJTb2NrZXQodXJsKVxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG5cbiAgICAvLyBCeSBkZWZhdWx0IFdlYlNvY2tldCB3aWxsIGdpdmUgdXMgYSBCbG9iLCB0aGlzIGNoYW5nZXMgaXQgc28gdGhhdCBpdCBnaXZlcyB1cyBhbiBBcnJheUJ1ZmZlclxuICAgIHNvY2tldC5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJ1xuXG4gICAgc29ja2V0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXZlbnQpXG4gICAgc29ja2V0Lm9uY2xvc2UgPSAoY2xvc2VFdmVudCkgPT4gdGhpcy5oYW5kbGVDbG9zZShjbG9zZUV2ZW50KVxuICAgIHNvY2tldC5vbm1lc3NhZ2UgPSAobWVzc2FnZUV2ZW50KSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UobWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQgdG8gYFVuaWRlbnRpZmllZGAgc3RhdGUgaWYgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkb2VzIG5vdCBjb21lIGZyb20gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgaWYgKCFbU2hhcmRTdGF0ZS5JZGVudGlmeWluZywgU2hhcmRTdGF0ZS5SZXN1bWluZ10uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHNvY2tldCBjb25uZWN0ZWQuYClcblxuICAgICAgICB0aGlzLmV2ZW50cy5jb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJlc29sdmUodGhpcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZ5IHRoZSBzaGFyZCB0byB0aGUgZ2F0ZXdheS4gSWYgbm90IGNvbm5lY3RlZCwgdGhpcyB3aWxsIGFsc28gY29ubmVjdCB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuXG4gICAqIEBwYXJhbSBieXBhc3NSZXF1ZXN0IC0gV2hldGhlciB0byBieXBhc3MgdGhlIHJlcXVlc3RJZGVudGlmeSBoYW5kbGVyIGFuZCBpZGVudGlmeSBpbW1lZGlhdGVseS4gVGhpcyBzaG91bGQgYmUgdXNlZCBjYXJlZnVsbHkgYXMgaXQgY2FuIGNhdXNlIGludmFsaWQgc2Vzc2lvbnMuXG4gICAqL1xuICBhc3luYyBpZGVudGlmeShieXBhc3NSZXF1ZXN0ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIG5ldyBpZGVudGlmeSBoYXMgYmVlbiByZXF1ZXN0ZWQgZXZlbiB0aG91Z2ggdGhlcmUgaXMgYWxyZWFkeSBhIGNvbm5lY3Rpb24gb3Blbi5cbiAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBjbG9zZSB0aGUgb2xkIGNvbm5lY3Rpb24gYW5kIGhlYXJ0YmVhdGluZyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBJZGVudGlmeWluZyBvcGVuIFNoYXJkICMke3RoaXMuaWR9LCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uYClcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKCFieXBhc3NSZXF1ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RJZGVudGlmeSgpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2VuZGluZyBJZGVudGlmeSBwYXlsb2FkIGZvciBTaGFyZCAjJHt0aGlzLmlkfS5gKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZSgpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVBRFknLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmlkZW50aWZpZWQ/Lih0aGlzKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0pXG4gICAgICAvLyBXaGVuIGlkZW50aWZ5aW5nIHRvbyBmYXN0LCBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkLlxuICAgICAgLy8gVGhpcyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgdGhvdWdoIGFuZCB0aGUgc2hhcmQgc3RhcnRzIGEgbmV3IGlkZW50aWZ5IGFjdGlvbi5cbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIENoZWNrIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdG8gRGlzY29yZCBpcyBjdXJyZW50bHkgb3Blbi4gKi9cbiAgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZSA9PT0gTm9kZVdlYlNvY2tldC5PUEVOXG4gIH1cblxuICAvKiogQXR0ZW1wdCB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNoYXJkcyBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZXN1bWluZyBTaGFyZCAjJHt0aGlzLmlkfWApXG5cbiAgICAvLyBJdCBoYXMgYmVlbiByZXF1ZXN0ZWQgdG8gcmVzdW1lIHRoZSBTaGFyZHMgc2Vzc2lvbi5cbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHNoYXJkIGlzIHN0aWxsIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5IHRoZXJlZm9yZSB3ZSBuZWVkIHRvIGZvcmNlZnVsbHkgY2xvc2UgaXQuXG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIG9wZW4gU2hhcmQgIyR7dGhpcy5pZH0sIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb25gKVxuICAgICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24sICdSZWNvbm5lY3RpbmcgdGhlIHNoYXJkLCBjbG9zaW5nIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgLy8gU2hhcmQgaGFzIG5ldmVyIGlkZW50aWZpZWQsIHNvIHdlIGNhbm5vdCByZXN1bWUuXG4gICAgaWYgKCF0aGlzLnNlc3Npb25JZCkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gVHJ5aW5nIHRvIHJlc3VtZSBTaGFyZCAjJHt0aGlzLmlkfSB3aXRob3V0IHRoZSBzZXNzaW9uIGlkLiBJZGVudGlmeWluZyB0aGUgc2hhcmQgaW5zdGVhZC5gKVxuXG4gICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlJlc3VtaW5nXG5cbiAgICAvLyBCZWZvcmUgd2UgY2FuIHJlc3VtZSwgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiB3aXRoIERpc2NvcmQncyBnYXRld2F5LlxuICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZXN1bWluZyBTaGFyZCAjJHt0aGlzLmlkfSBjb25uZWN0ZWQuIFNlc3Npb24gaWQ6ICR7dGhpcy5zZXNzaW9uSWR9IHwgU2VxdWVuY2U6ICR7dGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyfWApXG5cbiAgICB0aGlzLnNlbmQoXG4gICAgICB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5SZXN1bWUsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIHNlc3Npb25faWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgIHNlcTogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyID8/IDAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdSRVNVTUVEJywgKCkgPT4gcmVzb2x2ZSgpKVxuXG4gICAgICAvLyBJZiBpdCBpcyBhdHRlbXB0ZWQgdG8gcmVzdW1lIHdpdGggYW4gaW52YWxpZCBzZXNzaW9uIGlkLCBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkXG4gICAgICAvLyBOb3QgZXJyb3JpbmcgaGVyZSBzaW5jZSBpdCBpcyBlYXN5IHRoYXQgdGhpcyBoYXBwZW5zLCBhbHNvIGl0IHdvdWxkIGJlIG5vdCBjYXRjaGFibGVcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRVNVTUVEJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIG1lc3NhZ2UgdG8gRGlzY29yZC5cbiAgICogQHBhcmFtIGhpZ2hQcmlvcml0eSAtIFdoZXRoZXIgdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW5kIGFzYXAuXG4gICAqL1xuICBhc3luYyBzZW5kKG1lc3NhZ2U6IFNoYXJkU29ja2V0UmVxdWVzdCwgaGlnaFByaW9yaXR5OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBCZWZvcmUgYWNxdWlyaW5nIGEgdG9rZW4gZnJvbSB0aGUgYnVja2V0LCBjaGVjayB3aGV0aGVyIHRoZSBzaGFyZCBpcyBjdXJyZW50bHkgb2ZmbGluZSBvciBub3QuXG4gICAgLy8gRWxzZSBidWNrZXQgYW5kIHRva2VuIHdhaXQgdGltZSBqdXN0IGdldCB3YXN0ZWQuXG4gICAgYXdhaXQgdGhpcy5jaGVja09mZmxpbmUoaGlnaFByaW9yaXR5KVxuXG4gICAgYXdhaXQgdGhpcy5idWNrZXQuYWNxdWlyZShoaWdoUHJpb3JpdHkpXG5cbiAgICAvLyBJdCdzIHBvc3NpYmxlLCB0aGF0IHRoZSBzaGFyZCB3ZW50IG9mZmxpbmUgYWZ0ZXIgYSB0b2tlbiBoYXMgYmVlbiBhY3F1aXJlZCBmcm9tIHRoZSBidWNrZXQuXG4gICAgYXdhaXQgdGhpcy5jaGVja09mZmxpbmUoaGlnaFByaW9yaXR5KVxuXG4gICAgdGhpcy5zb2NrZXQ/LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXG4gIH1cblxuICAvKiogU2h1dGRvd24gdGhlIHRoaXMuIEZvcmNlZnVsbHkgZGlzY29ubmVjdCB0aGUgc2hhcmQgZnJvbSBEaXNjb3JkLiBUaGUgc2hhcmQgbWF5IG5vdCBhdHRlbXB0IHRvIHJlY29ubmVjdCB3aXRoIERpc2NvcmQuICovXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlNodXRkb3duLCAnU2hhcmQgc2h1dHRpbmcgZG93bi4nKVxuICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgfVxuXG4gIC8qKiBIYW5kbGUgYSBnYXRld2F5IGNvbm5lY3Rpb24gZXJyb3IgKi9cbiAgaGFuZGxlRXJyb3IoZXJyb3I6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IoYFtTaGFyZF0gVGhlcmUgd2FzIGFuIGVycm9yIGNvbm5lY3RpbmcgU2hhcmQgIyR7dGhpcy5pZH0uYCwgZXJyb3IpXG4gIH1cblxuICAvKiogSGFuZGxlIGEgZ2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlLiAqL1xuICBhc3luYyBoYW5kbGVDbG9zZShjbG9zZTogQ2xvc2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc29ja2V0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5zdG9wSGVhcnRiZWF0aW5nKClcblxuICAgIC8vIENsZWFyIHRoZSB6bGliL3pzdGQgZGF0YVxuICAgIHRoaXMuaW5mbGF0ZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuenN0ZERlY29tcHJlc3MgPSB1bmRlZmluZWRcbiAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBudWxsXG4gICAgdGhpcy5kZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZSA9IFtdXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgd2l0aCBjb2RlICR7Y2xvc2UuY29kZX0ke2Nsb3NlLnJlYXNvbiA/IGAsIGFuZCByZWFzb246ICR7Y2xvc2UucmVhc29ufWAgOiAnJ30uYClcblxuICAgIC8vIFJlc29sdmUgdGhlIGNsb3NlIHByb21pc2UgaWYgaXQgZXhpc3RzXG4gICAgdGhpcy5yZXNvbHZlQWZ0ZXJDbG9zZT8uKGNsb3NlKVxuXG4gICAgc3dpdGNoIChjbG9zZS5jb2RlKSB7XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5UZXN0aW5nRmluaXNoZWQ6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gT24gdGhlc2UgY29kZXMgYSBtYW51YWwgc3RhcnQgd2lsbCBiZSBkb25lLlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd246XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZUlkZW50aWZ5aW5nOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzaGFyZGVkOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb246IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuRGlzY29ubmVjdGVkXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBXaGVuIHRoZXNlIGNvZGVzIGFyZSByZWNlaXZlZCBzb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcuXG4gICAgICAvLyBPbiB0aG9zZSB3ZSBjYW5ub3Qgc3RhcnQgYSByZWNvbm5lY3QgYXR0ZW1wdC5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5BdXRoZW50aWNhdGlvbkZhaWxlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2hhcmQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2hhcmRpbmdSZXF1aXJlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkQXBpVmVyc2lvbjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkSW50ZW50czpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5EaXNhbGxvd2VkSW50ZW50czoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNsb3NlLnJlYXNvbiB8fCAnRGlzY29yZCBnYXZlIG5vIHJlYXNvbiEgR0chIFlvdSBicm9rZSBEaXNjb3JkIScpXG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIHdoaWNoIHJlcXVpcmUgYSBuZXcgaWRlbnRpZnkuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuTm90QXV0aGVudGljYXRlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2VxOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlNlc3Npb25UaW1lZE91dDoge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgcmVxdWlyaW5nIHJlLWlkZW50aWZ5LmApXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLklkZW50aWZ5aW5nXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gTk9URTogVGhpcyBjYXNlIG11c3QgYWx3YXlzIGJlIHJpZ2h0IGFib3ZlIHRoZSBjYXNlcyB0aGF0IHJ1bnMgd2l0aCBkZWZhdWx0IGNhc2UgYmVjYXVzZSBvZiBob3cgc3dpdGNoIHdvcmtzIHdoZW4geW91IGRvbid0IGJyZWFrIC8gcmV0dXJuLCBtb3JlIGluZm8gYmVsb3cuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuTm9ybWFsQ2xvc3VyZTpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Hb2luZ0F3YXk6IHtcbiAgICAgICAgLy8gSWYgdGhlIHNoYXJkIGlzIG1hcmtlZCBhcyBnb2luZ09mZmxpbmUsIGl0IHN0YXlzIGRpc2Nvbm5lY3RlZC5cbiAgICAgICAgaWYgKHRoaXMuZ29pbmdPZmZsaW5lKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuRGlzY29ubmVjdGVkXG4gICAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICAgIHRoaXMuZ29pbmdPZmZsaW5lID0gZmFsc2VcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3YW50IHRoZSBzaGFyZCB0byBnbyB0aHJvdWdoIHRoZSBkZWZhdWx0IGNhc2Ugd2hlcmUgaXQgZ2V0cyByZXN1bWVkLCBhcyBpdCBtaWdodCBiZSBhbiB1bmV4cGVjdGVkIGNsb3N1cmUgZnJvbSBEaXNjb3JkIG9yIENsb3VkZmxhcmUgZm9yIGV4YW1wbGUsIHNvIHdlIGRvbid0IHVzZSBicmVhayAvIHJldHVybiBoZXJlLlxuICAgICAgfVxuICAgICAgLy8gR2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlcyBvbiB3aGljaCBhIHJlc3VtZSBpcyBhbGxvd2VkLlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlVua25vd25FcnJvcjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Vbmtub3duT3Bjb2RlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRlY29kZUVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlJhdGVMaW1pdGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkFscmVhZHlBdXRoZW50aWNhdGVkOlxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2hlcmUgd2UgcmVzdW1lIGZvcmV2ZXIsIHNvIGlmIHdlIHdlcmUgYWxyZWFkeSByZXN1bWluZyB3ZSBpZGVudGlmeSBpbnN0ZWFkXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlID09PSBTaGFyZFN0YXRlLlJlc3VtaW5nID8gU2hhcmRTdGF0ZS5JZGVudGlmeWluZyA6IFNoYXJkU3RhdGUuUmVzdW1pbmdcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kbGUgYW4gaW5jb21pbmcgZ2F0ZXdheSBtZXNzYWdlLiAqL1xuICBhc3luYyBoYW5kbGVNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRoZSB3cyBucG0gcGFja2FnZSB3aWxsIHVzZSBhIEJ1ZmZlciwgd2hpbGUgdGhlIGdsb2JhbCBidWlsdC1pbiB3aWxsIHVzZSBBcnJheUJ1ZmZlclxuICAgIGNvbnN0IGlzQ29tcHJlc3NlZCA9IG1lc3NhZ2UuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IG1lc3NhZ2UuZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlclxuXG4gICAgY29uc3QgZGF0YSA9IGlzQ29tcHJlc3NlZCA/IGF3YWl0IHRoaXMuZGVjb21wcmVzc1BhY2tldChtZXNzYWdlLmRhdGEpIDogKEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKSBhcyBEaXNjb3JkR2F0ZXdheVBheWxvYWQpXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgZGVjb21wcmVzc2lvbiB3YXMgbm90IHN1Y2Nlc3NmdWxcbiAgICBpZiAoIWRhdGEpIHJldHVyblxuXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVEaXNjb3JkUGFja2V0KGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogRGVjb21wcmVzcyBhIHpsaWIvenN0ZCBjb21wcmVzc2VkIHBhY2tldFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgZGVjb21wcmVzc1BhY2tldChkYXRhOiBBcnJheUJ1ZmZlciB8IEJ1ZmZlcik6IFByb21pc2U8RGlzY29yZEdhdGV3YXlQYXlsb2FkIHwgbnVsbD4ge1xuICAgIC8vIEEgYnVmZmVyIGlzIGEgVWludDhBcnJheSB1bmRlciB0aGUgaG9vZC4gQW4gQXJyYXlCdWZmZXIgaXMgZ2VuZXJpYywgc28gd2UgbmVlZCB0byBjcmVhdGUgdGhlIFVpbnQ4QXJyYXkgdGhhdCB1c2VzIHRoZSB3aG9sZSBBcnJheUJ1ZmZlclxuICAgIGNvbnN0IGNvbXByZXNzZWREYXRhOiBVaW50OEFycmF5ID0gZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlciA/IGRhdGEgOiBuZXcgVWludDhBcnJheShkYXRhKVxuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbiA9PT0gVHJhbnNwb3J0Q29tcHJlc3Npb24uemxpYikge1xuICAgICAgaWYgKCF0aGlzLmluZmxhdGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZmF0YWwoJ1tTaGFyZF0gemxpYi1zdHJlYW0gdHJhbnNwb3J0IGNvbXByZXNzaW9uIHdhcyBlbmFibGVkIGJ1dCBubyBpbnN0YW5jZSBvZiBJbmZsYXRlIHdhcyBmb3VuZC4nKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICAvLyBBbGlhcywgdXNlZCB0byBhdm9pZCBzb21lIG51bGwgY2hlY2tzIGluIHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yXG4gICAgICBjb25zdCBpbmZsYXRlID0gdGhpcy5pbmZsYXRlXG5cbiAgICAgIGNvbnN0IHdyaXRlUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaW5mbGF0ZS53cml0ZShjb21wcmVzc2VkRGF0YSwgJ2JpbmFyeScsIChlcnJvcikgPT4gKGVycm9yID8gcmVqZWN0KGVycm9yKSA6IHJlc29sdmUoKSkpXG4gICAgICB9KVxuXG4gICAgICBpZiAoIWVuZHNXaXRoTWFya2VyKGNvbXByZXNzZWREYXRhLCBaTElCX1NZTkNfRkxVU0gpKSByZXR1cm4gbnVsbFxuXG4gICAgICBhd2FpdCB3cml0ZVByb21pc2VcblxuICAgICAgaWYgKCF0aGlzLmluZmxhdGVCdWZmZXIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBUaGUgWkxpYiBpbmZsYXRlIGJ1ZmZlciB3YXMgY2xlYXJlZCBhdCBhbiB1bmV4cGVjdGVkIG1vbWVudC4nKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKHRoaXMuaW5mbGF0ZUJ1ZmZlcilcbiAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcblxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZERhdGEpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbiA9PT0gVHJhbnNwb3J0Q29tcHJlc3Npb24uenN0ZCkge1xuICAgICAgaWYgKCF0aGlzLnpzdGREZWNvbXByZXNzKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmZhdGFsKCdbU2hhcmRdIHpzdGQtc3RyZWFtIHRyYW5zcG9ydCBjb21wcmVzc2lvbiB3YXMgZW5hYmxlZCBidXQgbm8gaW5zdGFuY2Ugb2YgRGVjb21wcmVzcyB3YXMgZm91bmQuJylcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgdGhpcy56c3RkRGVjb21wcmVzcy5wdXNoKGNvbXByZXNzZWREYXRhKVxuXG4gICAgICBjb25zdCBkZWNvbXByZXNzaW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPERpc2NvcmRHYXRld2F5UGF5bG9hZD4oKHIpID0+IHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUucHVzaChyKSlcbiAgICAgIHJldHVybiBhd2FpdCBkZWNvbXByZXNzaW9uUHJvbWlzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MpIHtcbiAgICAgIGNvbnN0IGRlY29tcHJlc3NlZCA9IGluZmxhdGVTeW5jKGNvbXByZXNzZWREYXRhKVxuICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLnRleHREZWNvZGVyLmRlY29kZShkZWNvbXByZXNzZWQpXG5cbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZWREYXRhKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKiogSGFuZGxlcyBhIGluY29taW5nIGdhdGV3YXkgcGFja2V0LiAqL1xuICBhc3luYyBoYW5kbGVEaXNjb3JkUGFja2V0KHBhY2tldDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRWRnZSBjYXNlIHN0YXJ0OiBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vL2lzc3Vlcy8yMzExXG4gICAgdGhpcy5oZWFydC5sYXN0QWNrID0gRGF0ZS5ub3coKVxuICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gdHJ1ZVxuICAgIC8vIEVkZ2UgY2FzZSBlbmQhXG5cbiAgICBzd2l0Y2ggKHBhY2tldC5vcCkge1xuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQ6IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgICAvLyBEaXNjb3JkIHJhbmRvbWx5IHNlbmRzIHRoaXMgcmVxdWlyaW5nIGFuIGltbWVkaWF0ZSBoZWFydGJlYXQgYmFjay5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlbGxvOiB7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gKHBhY2tldC5kIGFzIERpc2NvcmRIZWxsbykuaGVhcnRiZWF0X2ludGVydmFsXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHJlY2VpdmVkIEhlbGxvYClcbiAgICAgICAgdGhpcy5zdGFydEhlYXJ0YmVhdGluZyhpbnRlcnZhbClcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRRdWV1ZSA9IFsuLi50aGlzLmJ1Y2tldC5xdWV1ZV1cbiAgICAgICAgICAvLyBIRUxMTyBoYXMgYmVlbiBzZW5kIG9uIGEgbm9uIHJlc3VtZSBhY3Rpb24uXG4gICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzaGFyZCBzdGFydHMgYSBuZXcgc2Vzc2lvbixcbiAgICAgICAgICAvLyB0aGVyZWZvcmUgdGhlIHJhdGUgbGltaXQgaW50ZXJ2YWwgaGFzIGJlZW4gcmVzZXQgdG9vLlxuICAgICAgICAgIHRoaXMuYnVja2V0ID0gbmV3IExlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogdGhpcy5jYWxjdWxhdGVTYWZlUmVxdWVzdHMoKSxcbiAgICAgICAgICAgIHJlZmlsbEludGVydmFsOiA2MDAwMCxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogdGhpcy5jYWxjdWxhdGVTYWZlUmVxdWVzdHMoKSxcbiAgICAgICAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIC8vIFF1ZXVlIHNob3VsZCBub3QgYmUgbG9zdCBvbiBhIHJlLWlkZW50aWZ5LlxuICAgICAgICAgIHRoaXMuYnVja2V0LnF1ZXVlLnVuc2hpZnQoLi4uY3VycmVudFF1ZXVlKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHMuaGVsbG8/Lih0aGlzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdEFDSzoge1xuICAgICAgICAvLyBNYW51YWxseSBjYWxjdWxhdGluZyB0aGUgcm91bmQgdHJpcCB0aW1lIGZvciB1c2VycyB3aG8gbmVlZCBpdC5cbiAgICAgICAgaWYgKHRoaXMuaGVhcnQubGFzdEJlYXQpIHtcbiAgICAgICAgICB0aGlzLmhlYXJ0LnJ0dCA9IHRoaXMuaGVhcnQubGFzdEFjayAtIHRoaXMuaGVhcnQubGFzdEJlYXRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdEFjaz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuUmVjb25uZWN0OiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlY2VpdmVkIGEgUmVjb25uZWN0IGZvciBTaGFyZCAjJHt0aGlzLmlkfWApXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlcXVlc3RlZFJlY29ubmVjdD8uKHRoaXMpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkludmFsaWRTZXNzaW9uOiB7XG4gICAgICAgIGNvbnN0IHJlc3VtYWJsZSA9IHBhY2tldC5kIGFzIGJvb2xlYW5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVjZWl2ZWQgSW52YWxpZCBTZXNzaW9uIGZvciBTaGFyZCAjJHt0aGlzLmlkfSB3aXRoIHJlc3VtYWJsZSBhcyAke3Jlc3VtYWJsZX1gKVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmludmFsaWRTZXNzaW9uPy4odGhpcywgcmVzdW1hYmxlKVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgYSByYW5kb20gYW1vdW50IG9mIHRpbWUgYmV0d2VlbiAxIGFuZCA1XG4gICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVzdW1pbmdcbiAgICAgICAgYXdhaXQgZGVsYXkoTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDQgKyAxKSAqIDEwMDApKVxuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdJTlZBTElEX1NFU1NJT04nKT8uKHBhY2tldClcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ0lOVkFMSURfU0VTU0lPTicpXG5cbiAgICAgICAgLy8gV2hlbiByZXN1bWFibGUgaXMgZmFsc2Ugd2UgbmVlZCB0byByZS1pZGVudGlmeVxuICAgICAgICBpZiAoIXJlc3VtYWJsZSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBzZXNzaW9uIGlzIGludmFsaWQgYnV0IGFwcGFyZW50bHkgaXQgaXMgcmVzdW1hYmxlXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKClcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAocGFja2V0LnQpIHtcbiAgICAgIGNhc2UgJ1JFU1VNRUQnOlxuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWRcbiAgICAgICAgdGhpcy5ldmVudHMucmVzdW1lZD8uKHRoaXMpXG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gcmVjZWl2ZWQgUkVTVU1FRGApXG5cbiAgICAgICAgLy8gQ29udGludWUgdGhlIHJlcXVlc3RzIHdoaWNoIGhhdmUgYmVlbiBxdWV1ZWQgc2luY2UgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZS5cbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmZvckVhY2goKHJlc29sdmUpID0+IHJlc29sdmUoKSlcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAgd2lsbCBkZWxldGUgdGhlIGVsZW1lbnRzIGluIGl0XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5sZW5ndGggPSAwXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ1JFU1VNRUQnKT8uKHBhY2tldClcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFU1VNRUQnKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnUkVBRFknOiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBwYWNrZXQuZCBhcyBEaXNjb3JkUmVhZHlcblxuICAgICAgICAvLyBJbXBvcnRhbnQgZm9yIGZ1dHVyZSByZXN1bWVzLlxuICAgICAgICB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgPSBwYXlsb2FkLnJlc3VtZV9nYXRld2F5X3VybFxuICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHBheWxvYWQuc2Vzc2lvbl9pZFxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHJlY2VpdmVkIFJFQURZYClcblxuICAgICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgICAvLyBJbXBvcnRhbnQgd2hlbiB0aGlzIGlzIGEgcmUtaWRlbnRpZnlcbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmZvckVhY2goKHJlc29sdmUpID0+IHJlc29sdmUoKSlcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAgd2lsbCBkZWxldGUgdGhlIGVsZW1lbnRzIGluIGl0XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5sZW5ndGggPSAwXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ1JFQURZJyk/LihwYWNrZXQpXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgaXQgaXMgcHJlc2VudFxuICAgIC8vIGBzYCBjYW4gYmUgZWl0aGVyIGBudWxsYCBvciBhIGBudW1iZXJgLlxuICAgIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdXBkYXRlIG1pc3NlcyB3aGVuIGBzYCBpcyBgMGAgd2UgY2hlY2sgYWdhaW5zdCBudWxsLlxuICAgIGlmIChwYWNrZXQucyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyID0gcGFja2V0LnNcbiAgICB9XG5cbiAgICB0aGlzLmZvcndhcmRUb0JvdChwYWNrZXQpXG4gIH1cblxuICBmb3J3YXJkVG9Cb3QocGFja2V0OiBEaXNjb3JkR2F0ZXdheVBheWxvYWQpOiB2b2lkIHtcbiAgICAvLyBUaGUgbmVjZXNzYXJ5IGhhbmRsaW5nIHJlcXVpcmVkIGZvciB0aGUgU2hhcmRzIGNvbm5lY3Rpb24gaGFzIGJlZW4gZmluaXNoZWQuXG4gICAgLy8gTm93IHRoZSBldmVudCBjYW4gYmUgc2FmZWx5IGZvcndhcmRlZC5cbiAgICB0aGlzLmV2ZW50cy5tZXNzYWdlPy4odGhpcywgY2FtZWxpemUocGFja2V0KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBpbiBvcmRlciB0byBtYWtlIHRoZSBzaGFyZHMgcHJlc2VuY2UuXG4gICAqIGFzeW5jIGluIGNhc2UgZGV2cyBjcmVhdGUgdGhlIHByZXNlbmNlIGJhc2VkIG9uIGVnLiBkYXRhYmFzZSB2YWx1ZXMuXG4gICAqIFBhc3NpbmcgdGhlIHNoYXJkJ3MgaWQgdGhlcmUgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBkZXYgdG8gdXNlIHRoaXMgZnVuY3Rpb24uXG4gICAqL1xuICBhc3luYyBtYWtlUHJlc2VuY2UoKTogUHJvbWlzZTxEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbW11bmljYXRlcyB3aXRoIHRoZSBtYW5hZ2VtZW50IHByb2Nlc3MsIGluIG9yZGVyIHRvIGtub3cgd2hldGhlciBpdHMgZnJlZSB0byBpZGVudGlmeS5cbiAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJlc29sdmVzLCB0aGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIGlzIGFsbG93ZWQgdG8gc2VuZCBhbiBpZGVudGlmeSBwYXlsb2FkIHRvIGRpc2NvcmQuXG4gICAqL1xuICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoKTogUHJvbWlzZTx2b2lkPiB7fVxuXG4gIC8qKiBTdGFydCBzZW5kaW5nIGhlYXJ0YmVhdCBwYXlsb2FkcyB0byBEaXNjb3JkIGluIHRoZSBwcm92aWRlZCBpbnRlcnZhbC4gKi9cbiAgc3RhcnRIZWFydGJlYXRpbmcoaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFN0YXJ0IGhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfWApXG5cbiAgICAvLyBJZiBvbGQgaGVhcnRiZWFzdCBleGlzdCBsaWtlIGFmdGVyIHJlc3VtZSwgY2xlYXIgdGhlIG9sZCBvbmVzLlxuICAgIHRoaXMuc3RvcEhlYXJ0YmVhdGluZygpXG5cbiAgICB0aGlzLmhlYXJ0LmludGVydmFsID0gaW50ZXJ2YWxcblxuICAgIC8vIE9ubHkgc2V0IHRoZSBzaGFyZCdzIHN0YXRlIHRvIGBVbmlkZW50aWZpZWRgXG4gICAgLy8gaWYgaGVhcnRiZWF0aW5nIGhhcyBub3QgYmVlbiBzdGFydGVkIGR1ZSB0byBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmIChbU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWQsIFNoYXJkU3RhdGUuT2ZmbGluZV0uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkIGlzIGRpc2Nvbm5lY3RlZCBvciBvZmZsaW5lIGJ1dCB0aGUgaGVhcnRiZWF0IHdhcyBzdGFydGVkICMke3RoaXMuaWR9YClcbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlVuaWRlbnRpZmllZFxuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBoZWFydGJlYXQgbmVlZHMgdG8gYmUgc2VuZCB3aXRoIGEgcmFuZG9tIGRlbGF5IGJldHdlZW4gYDBgIGFuZCBgaW50ZXJ2YWxgXG4gICAgLy8gVXNpbmcgYSBgc2V0VGltZW91dChfLCBqaXR0ZXIpYCBoZXJlIHRvIGFjY29tcGxpc2ggdGhhdC5cbiAgICAvLyBgTWF0aC5yYW5kb20oKWAgY2FuIGJlIGAwYCBzbyB3ZSB1c2UgYDAuNWAgaWYgdGhpcyBoYXBwZW5zXG4gICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmdcbiAgICBjb25zdCBqaXR0ZXIgPSBNYXRoLmNlaWwodGhpcy5oZWFydC5pbnRlcnZhbCAqIChNYXRoLnJhbmRvbSgpIHx8IDAuNSkpXG5cbiAgICB0aGlzLmhlYXJ0LnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gQmVnaW5uaW5nIGhlYXJ0YmVhdGluZyBwcm9jZXNzIGZvciBTaGFyZCAjJHt0aGlzLmlkfWApXG5cbiAgICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfS4gUHJldmlvdXMgc2VxdWVuY2UgbnVtYmVyOiAke3RoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcn1gKVxuXG4gICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgfSksXG4gICAgICApXG5cbiAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEFmdGVyIHRoZSByYW5kb20gaGVhcnRiZWF0IGppdHRlciB3ZSBjYW4gc3RhcnQgYSBub3JtYWwgaW50ZXJ2YWwuXG4gICAgICB0aGlzLmhlYXJ0LmludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGlzIG5vdCBvcGVuLCBidXQgYXR0ZW1wdGVkIGhlYXJ0YmVhdCwgaWdub3JpbmcuYClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBTaGFyZCBkaWQgbm90IHJlY2VpdmUgYSBoZWFydGJlYXQgQUNLIGZyb20gRGlzY29yZCBpbiB0aW1lLFxuICAgICAgICAvLyB0aGVyZWZvcmUgd2UgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgY29ubmVjdGlvbiBoYXMgZmFpbGVkIG9yIGdvdCBcInpvbWJpZWRcIi5cbiAgICAgICAgLy8gVGhlIFNoYXJkIG5lZWRzIHRvIHN0YXJ0IGEgcmUtaWRlbnRpZnkgYWN0aW9uIGFjY29yZGluZ2x5LlxuICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I2hlYXJ0YmVhdGluZy1leGFtcGxlLWdhdGV3YXktaGVhcnRiZWF0LWFja1xuICAgICAgICBpZiAoIXRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0IG5vdCBhY2tub3dsZWRnZWQgZm9yIFNoYXJkICMke3RoaXMuaWR9LiBBc3N1bWluZyB6b21iaWVkIGNvbm5lY3Rpb24uYClcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5ab21iaWVkQ29ubmVjdGlvbiwgJ1pvbWJpZWQgY29ubmVjdGlvbiwgZGlkIG5vdCByZWNlaXZlIGFuIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0aW5nIG9uIFNoYXJkICMke3RoaXMuaWR9LiBQcmV2aW91cyBzZXF1ZW5jZSBudW1iZXI6ICR7dGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyfWApXG5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gZmFsc2VcblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuICAgICAgfSwgdGhpcy5oZWFydC5pbnRlcnZhbClcbiAgICB9LCBqaXR0ZXIpXG4gIH1cblxuICAvKiogU3RvcCB0aGUgaGVhcnRiZWF0aW5nIHByb2Nlc3Mgd2l0aCBkaXNjb3JkLiAqL1xuICBzdG9wSGVhcnRiZWF0aW5nKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHRoZSByZWd1bGFyIGhlYXJ0YmVhdCBpbnRlcnZhbC5cbiAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnQuaW50ZXJ2YWxJZClcbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIFNoYXJkIGdvdCBjbG9zZWQgYmVmb3JlIHRoZSBmaXJzdCBqaXR0ZXJlZCBoZWFydGJlYXQuXG4gICAgLy8gVG8gZ28gc2FmZSB3ZSBzaG91bGQgY2xlYXIgdGhlIHJlbGF0ZWQgdGltZW91dCB0b28uXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnQudGltZW91dElkKVxuICB9XG59XG5cbi8qKiBDaGVjayBpZiB0aGUgYnVmZmVyIGVuZHMgd2l0aCB0aGUgbWFya2VyICovXG5mdW5jdGlvbiBlbmRzV2l0aE1hcmtlcihidWZmZXI6IFVpbnQ4QXJyYXksIG1hcmtlcjogVWludDhBcnJheSkge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA8IG1hcmtlci5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2VyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gbWFya2VyLmxlbmd0aCArIGldICE9PSBtYXJrZXJbaV0pIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZENyZWF0ZU9wdGlvbnMge1xuICAvKiogVGhlIHNoYXJkIGlkICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGRldGFpbHMgKi9cbiAgY29ubmVjdGlvbjogU2hhcmRHYXRld2F5Q29uZmlnXG4gIC8qKiBUaGUgZXZlbnQgaGFuZGxlcnMgZm9yIGV2ZW50cyBvbiB0aGUgc2hhcmQuICovXG4gIGV2ZW50czogU2hhcmRFdmVudHNcbiAgLyoqIFRoZSBsb2dnZXIgZm9yIHRoZSBzaGFyZCAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqIFRoZSBoYW5kbGVyIHRvIHJlcXVlc3QgYSBzcGFjZSB0byBtYWtlIGFuIGlkZW50aWZ5IHJlcXVlc3QuICovXG4gIHJlcXVlc3RJZGVudGlmeT86ICgpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYm90IHN0YXR1cyB0byBzZW5kIG9uIElkZW50aWZ5IHJlcXVlc3RzICovXG4gIG1ha2VQcmVzZW5jZT86ICgpID0+IFByb21pc2U8RGlzY29yZFVwZGF0ZVByZXNlbmNlIHwgdW5kZWZpbmVkPlxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXNjb3JkZW5vU2hhcmRcbiJdLCJuYW1lcyI6WyJEaXNjb3JkZW5vU2hhcmQiLCJaTElCX1NZTkNfRkxVU0giLCJVaW50OEFycmF5IiwiZnpzdGQiLCJnZXRGWlN0ZCIsIm9wdGlvbnMiLCJtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2siLCJwcmV2aW91c1NlcXVlbmNlTnVtYmVyIiwicmF0ZUxpbWl0UmVzZXRJbnRlcnZhbCIsInN0YXRlIiwiU2hhcmRTdGF0ZSIsIk9mZmxpbmUiLCJyZXN1bWVHYXRld2F5VXJsIiwiZXZlbnRzIiwib2ZmbGluZVNlbmRRdWV1ZSIsInJlc29sdmVzIiwiTWFwIiwiZ29pbmdPZmZsaW5lIiwidGV4dERlY29kZXIiLCJUZXh0RGVjb2RlciIsImluZmxhdGVCdWZmZXIiLCJkZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZSIsImlkIiwiY29ubmVjdGlvbiIsImxvZ2dlciIsImhlYXJ0IiwiYWNrbm93bGVkZ2VkIiwiaW50ZXJ2YWwiLCJyZXF1ZXN0SWRlbnRpZnkiLCJtYWtlUHJlc2VuY2UiLCJidWNrZXQiLCJMZWFreUJ1Y2tldCIsIm1heCIsImNhbGN1bGF0ZVNhZmVSZXF1ZXN0cyIsInJlZmlsbEFtb3VudCIsInJlZmlsbEludGVydmFsIiwiZ2F0ZXdheUNvbmZpZyIsImNvbm5lY3Rpb25VcmwiLCJ1cmwiLCJzYWZlUmVxdWVzdHMiLCJNYXRoIiwiY2VpbCIsImNoZWNrT2ZmbGluZSIsImhpZ2hQcmlvcml0eSIsImlzT3BlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwidW5zaGlmdCIsInB1c2giLCJjbG9zZSIsImNvZGUiLCJyZWFzb24iLCJkZWJ1ZyIsInNvY2tldCIsInJlYWR5U3RhdGUiLCJOb2RlV2ViU29ja2V0IiwiT1BFTiIsIkdhdGV3YXlDbG9zZUV2ZW50Q29kZXMiLCJOb3JtYWxDbG9zdXJlIiwiR29pbmdBd2F5IiwicHJvbWlzZSIsInJlc29sdmVBZnRlckNsb3NlIiwidW5kZWZpbmVkIiwiY29ubmVjdCIsIklkZW50aWZ5aW5nIiwiUmVzdW1pbmciLCJpbmNsdWRlcyIsIkNvbm5lY3RpbmciLCJjb25uZWN0aW5nIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwic2V0IiwidmVyc2lvbiIsInRvU3RyaW5nIiwidHJhbnNwb3J0Q29tcHJlc3Npb24iLCJUcmFuc3BvcnRDb21wcmVzc2lvbiIsInpsaWIiLCJpbmZsYXRlIiwiY3JlYXRlSW5mbGF0ZSIsImZpbmlzaEZsdXNoIiwiemxpYkNvbnN0YW50cyIsIlpfU1lOQ19GTFVTSCIsImNodW5rU2l6ZSIsIm9uIiwiZSIsImVycm9yIiwiZGF0YSIsIm5ld0J1ZmZlciIsImJ5dGVMZW5ndGgiLCJ6c3RkIiwiY2F0Y2giLCJ3YXJuIiwiZGVsZXRlIiwienN0ZERlY29tcHJlc3MiLCJEZWNvbXByZXNzIiwiZGVjb2RlZERhdGEiLCJkZWNvZGUiLCJwYXJzZWREYXRhIiwiSlNPTiIsInBhcnNlIiwic2hpZnQiLCJjb21wcmVzcyIsInNob3VsZFVzZUJ1aWx0aW4iLCJSZWZsZWN0IiwiaGFzIiwiZ2xvYmFsVGhpcyIsIldlYlNvY2tldCIsImJpbmFyeVR5cGUiLCJvbmVycm9yIiwiZXZlbnQiLCJoYW5kbGVFcnJvciIsIm9uY2xvc2UiLCJjbG9zZUV2ZW50IiwiaGFuZGxlQ2xvc2UiLCJvbm1lc3NhZ2UiLCJtZXNzYWdlRXZlbnQiLCJoYW5kbGVNZXNzYWdlIiwib25vcGVuIiwiVW5pZGVudGlmaWVkIiwiY29ubmVjdGVkIiwiaWRlbnRpZnkiLCJieXBhc3NSZXF1ZXN0IiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIiwiUmVJZGVudGlmeWluZyIsImlkZW50aWZ5aW5nIiwic2VuZCIsIm9wIiwiR2F0ZXdheU9wY29kZXMiLCJJZGVudGlmeSIsImQiLCJ0b2tlbiIsInByb3BlcnRpZXMiLCJpbnRlbnRzIiwic2hhcmQiLCJ0b3RhbFNoYXJkcyIsInByZXNlbmNlIiwiaWRlbnRpZmllZCIsInJlc3VtZSIsIlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uIiwic2Vzc2lvbklkIiwiUmVzdW1lIiwic2Vzc2lvbl9pZCIsInNlcSIsIm1lc3NhZ2UiLCJhY3F1aXJlIiwic3RyaW5naWZ5Iiwic2h1dGRvd24iLCJTaHV0ZG93biIsInN0b3BIZWFydGJlYXRpbmciLCJUZXN0aW5nRmluaXNoZWQiLCJkaXNjb25uZWN0ZWQiLCJSZXNoYXJkZWQiLCJEaXNjb25uZWN0ZWQiLCJBdXRoZW50aWNhdGlvbkZhaWxlZCIsIkludmFsaWRTaGFyZCIsIlNoYXJkaW5nUmVxdWlyZWQiLCJJbnZhbGlkQXBpVmVyc2lvbiIsIkludmFsaWRJbnRlbnRzIiwiRGlzYWxsb3dlZEludGVudHMiLCJFcnJvciIsIk5vdEF1dGhlbnRpY2F0ZWQiLCJJbnZhbGlkU2VxIiwiU2Vzc2lvblRpbWVkT3V0IiwiVW5rbm93bkVycm9yIiwiVW5rbm93bk9wY29kZSIsIkRlY29kZUVycm9yIiwiUmF0ZUxpbWl0ZWQiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsImlzQ29tcHJlc3NlZCIsIkFycmF5QnVmZmVyIiwiQnVmZmVyIiwiZGVjb21wcmVzc1BhY2tldCIsImhhbmRsZURpc2NvcmRQYWNrZXQiLCJjb21wcmVzc2VkRGF0YSIsImZhdGFsIiwid3JpdGVQcm9taXNlIiwicmVqZWN0Iiwid3JpdGUiLCJlbmRzV2l0aE1hcmtlciIsImRlY29tcHJlc3Npb25Qcm9taXNlIiwiciIsImRlY29tcHJlc3NlZCIsImluZmxhdGVTeW5jIiwicGFja2V0IiwibGFzdEFjayIsIkRhdGUiLCJub3ciLCJIZWFydGJlYXQiLCJsYXN0QmVhdCIsImhlYXJ0YmVhdCIsIkhlbGxvIiwiaGVhcnRiZWF0X2ludGVydmFsIiwic3RhcnRIZWFydGJlYXRpbmciLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImhlbGxvIiwiSGVhcnRiZWF0QUNLIiwicnR0IiwiaGVhcnRiZWF0QWNrIiwiUmVjb25uZWN0IiwicmVxdWVzdGVkUmVjb25uZWN0IiwiSW52YWxpZFNlc3Npb24iLCJyZXN1bWFibGUiLCJpbnZhbGlkU2Vzc2lvbiIsImRlbGF5IiwiZmxvb3IiLCJyYW5kb20iLCJnZXQiLCJ0IiwiQ29ubmVjdGVkIiwicmVzdW1lZCIsImZvckVhY2giLCJsZW5ndGgiLCJwYXlsb2FkIiwicmVzdW1lX2dhdGV3YXlfdXJsIiwicyIsImZvcndhcmRUb0JvdCIsImNhbWVsaXplIiwiaml0dGVyIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImludGVydmFsSWQiLCJzZXRJbnRlcnZhbCIsIlpvbWJpZWRDb25uZWN0aW9uIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImJ1ZmZlciIsIm1hcmtlciIsImkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBMEJhQTtlQUFBQTs7UUFtekJiO2VBQUE7Ozs0QkE3MEJ1QjswQkFDOEQ7dUJBRTlCO3VCQUNGOzJEQUUzQjt3QkFTbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVAsTUFBTUMsa0JBQWtCLElBQUlDLFdBQVc7SUFBQztJQUFLO0lBQUs7SUFBTTtDQUFLO0FBRTdELElBQUlDO0FBRUosd0VBQXdFLEdBQ3hFLGVBQWVDO0lBQ2IsT0FBUUQsVUFBVSxNQUFNLG1FQUFBLFFBQU87QUFDakM7QUFFTyxJQUFBLEFBQU1ILGtCQUFOLE1BQU1BO0lBMkRYLFlBQVlLLE9BQTJCLENBQUU7UUFwRHpDLDBIQUEwSCxRQUMxSEMsOEJBQXNDO1FBQ3RDLDBDQUEwQyxRQUMxQ0MseUJBQXdDO1FBQ3hDLDRFQUE0RSxRQUM1RUMseUJBQWlDO1FBS2pDLHdDQUF3QyxRQUN4Q0MsUUFBUUMsa0JBQVUsQ0FBQ0MsT0FBTztRQUMxQixpRkFBaUYsUUFDakZDLG1CQUEyQjtRQUMzQixzQ0FBc0MsUUFDdENDLFNBQXNCLENBQUM7UUFDdkIsbUdBQW1HLFFBQ25HQyxtQkFBbUMsRUFBRTtRQUNyQyxpRkFBaUYsUUFDakZDLFdBQVcsSUFBSUM7UUFLZjs7Ozs7Ozs7R0FRQyxRQUNEQyxlQUFlO1FBQ2YsK0NBQStDLFFBQy9DQyxjQUFjLElBQUlDO1FBR2xCLHlCQUF5QixRQUN6QkMsZ0JBQW1DO1FBR25DLHNEQUFzRCxRQUN0REMsNkJBQXdFLEVBQUU7UUFVeEUsSUFBSSxDQUFDQyxFQUFF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
691
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcidcbmltcG9ydCB7IGNyZWF0ZUluZmxhdGUsIHR5cGUgSW5mbGF0ZSwgaW5mbGF0ZVN5bmMsIGNvbnN0YW50cyBhcyB6bGliQ29uc3RhbnRzIH0gZnJvbSAnbm9kZTp6bGliJ1xuaW1wb3J0IHR5cGUgeyBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIERpc2NvcmRIZWxsbywgRGlzY29yZFJlYWR5LCBEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBjYW1lbGl6ZSwgZGVsYXksIExlYWt5QnVja2V0LCBsb2dnZXIgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB0eXBlIHsgRGVjb21wcmVzcyBhcyBac3RkRGVjb21wcmVzcyB9IGZyb20gJ2Z6c3RkJ1xuaW1wb3J0IE5vZGVXZWJTb2NrZXQgZnJvbSAnd3MnXG5pbXBvcnQge1xuICB0eXBlIFNoYXJkRXZlbnRzLFxuICB0eXBlIFNoYXJkR2F0ZXdheUNvbmZpZyxcbiAgdHlwZSBTaGFyZEhlYXJ0LFxuICBTaGFyZFNvY2tldENsb3NlQ29kZXMsXG4gIHR5cGUgU2hhcmRTb2NrZXRSZXF1ZXN0LFxuICBTaGFyZFN0YXRlLFxuICBUcmFuc3BvcnRDb21wcmVzc2lvbixcbn0gZnJvbSAnLi90eXBlcy5qcydcblxuY29uc3QgWkxJQl9TWU5DX0ZMVVNIID0gbmV3IFVpbnQ4QXJyYXkoWzB4MCwgMHgwLCAweGZmLCAweGZmXSlcblxubGV0IGZ6c3RkOiB0eXBlb2YgaW1wb3J0KCdmenN0ZCcpXG5cbi8qKiBTaW5jZSBmenN0ZCBpcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5LCB3ZSBuZWVkIHRvIGltcG9ydCBpdCBsYXppbHkuICovXG5hc3luYyBmdW5jdGlvbiBnZXRGWlN0ZCgpIHtcbiAgcmV0dXJuIChmenN0ZCA/Pz0gYXdhaXQgaW1wb3J0KCdmenN0ZCcpKVxufVxuXG5leHBvcnQgY2xhc3MgRGlzY29yZGVub1NoYXJkIHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgc2hhcmQuICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGNvbmZpZyBkZXRhaWxzIHRoYXQgdGhpcyBzaGFyZCB3aWxsIHVzZWQgdG8gY29ubmVjdCB0byBkaXNjb3JkLiAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoaXMgY29udGFpbnMgYWxsIHRoZSBoZWFydGJlYXQgaW5mb3JtYXRpb24gKi9cbiAgaGVhcnQ6IFNoYXJkSGVhcnRcbiAgLyoqIFRoZSBtYXhpbXVtIG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBiZSBzZW5kIHRvIGRpc2NvcmQgcGVyIHJhdGUgbGltaXQgdGljay4gVHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqL1xuICBtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2s6IG51bWJlciA9IDEyMFxuICAvKiogVGhlIHByZXZpb3VzIHBheWxvYWQgc2VxdWVuY2UgbnVtYmVyLiAqL1xuICBwcmV2aW91c1NlcXVlbmNlTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAvKiogSW4gd2hpY2ggaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgdGhlIGdhdGV3YXkgcmVzZXRzIGl0J3MgcmF0ZSBsaW1pdC4gKi9cbiAgcmF0ZUxpbWl0UmVzZXRJbnRlcnZhbDogbnVtYmVyID0gNjAwMDBcbiAgLyoqIEN1cnJlbnQgc2Vzc2lvbiBpZCBvZiB0aGUgc2hhcmQgaWYgcHJlc2VudC4gKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nXG4gIC8qKiBUaGlzIGNvbnRhaW5zIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB0byBEaXNjb3JkLCBpZiBjdXJyZW50bHkgY29ubmVjdGVkLiAqL1xuICBzb2NrZXQ/OiBXZWJTb2NrZXRcbiAgLyoqIEN1cnJlbnQgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHRoaXMuICovXG4gIHN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIC8qKiBUaGUgdXJsIHByb3ZpZGVkIGJ5IGRpc2NvcmQgdG8gdXNlIHdoZW4gcmVzdW1pbmcgYSBjb25uZWN0aW9uIGZvciB0aGlzIHRoaXMuICovXG4gIHJlc3VtZUdhdGV3YXlVcmw6IHN0cmluZyA9ICcnXG4gIC8qKiBUaGUgc2hhcmQgcmVsYXRlZCBldmVudCBoYW5kbGVycy4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50cyA9IHt9XG4gIC8qKiBDYWNoZSBmb3IgcGVuZGluZyBnYXRld2F5IHJlcXVlc3RzIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gc2VuZCB3aGlsZSB0aGUgZ2F0ZXdheSB3ZW50IG9mZmxpbmUuICovXG4gIG9mZmxpbmVTZW5kUXVldWU6ICgoKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqIFJlc29sdmUgaW50ZXJuYWwgd2FpdGluZyBzdGF0ZXMuIE1hcHBlZCBieSBTZWxlY3RlZEV2ZW50cyA9PiBSZXNvbHZlRnVuY3Rpb24gKi9cbiAgcmVzb2x2ZXMgPSBuZXcgTWFwPCdSRUFEWScgfCAnUkVTVU1FRCcgfCAnSU5WQUxJRF9TRVNTSU9OJywgKHBheWxvYWQ6IERpc2NvcmRHYXRld2F5UGF5bG9hZCkgPT4gdm9pZD4oKVxuICAvKiogU2hhcmQgYnVja2V0LiBPbmx5IGFjY2VzcyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gQnVja2V0IGZvciBoYW5kbGluZyBzaGFyZCByZXF1ZXN0IHJhdGUgbGltaXRzLiAqL1xuICBidWNrZXQ6IExlYWt5QnVja2V0XG4gIC8qKiBMb2dnZXIgZm9yIHRoZSBidWNrZXQuICovXG4gIGxvZ2dlcjogUGljazx0eXBlb2YgbG9nZ2VyLCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdmYXRhbCc+XG4gIC8qKlxuICAgKiBJcyB0aGUgc2hhcmQgZ29pbmcgb2ZmbGluZT9cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyB3aWxsIGJlIHRydWUgaWYgdGhlIGNsb3NlIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBlaXRoZXIgMTAwMCBvciAxMDAxXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgZ29pbmdPZmZsaW5lID0gZmFsc2VcbiAgLyoqIFRleHQgZGVjb2RlciB1c2VkIGZvciBjb21wcmVzc2VkIHBheWxvYWRzLiAqL1xuICB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIC8qKiBaTGliIEluZmxhdGUgaW5zdGFuY2UgZm9yIFpMaWItc3RyZWFtIHRyYW5zcG9ydCBwYXlsb2Fkcy4gKi9cbiAgaW5mbGF0ZT86IEluZmxhdGVcbiAgLyoqIFpMaWIgaW5mbGF0ZSBidWZmZXIuICovXG4gIGluZmxhdGVCdWZmZXI6IFVpbnQ4QXJyYXkgfCBudWxsID0gbnVsbFxuICAvKiogWlN0ZCBEZWNvbXByZXNzIGluc3RhbmNlIGZvciBaU3RkLXN0cmVhbSB0cmFuc3BvcnQgcGF5bG9hZHMuICovXG4gIHpzdGREZWNvbXByZXNzPzogWnN0ZERlY29tcHJlc3NcbiAgLyoqIFF1ZXVlIGZvciBjb21wcmVzc2VkIHBheWxvYWRzIGZvciBac3RkIERlY29tcHJlc3MgKi9cbiAgZGVjb21wcmVzc2lvblByb21pc2VzUXVldWU6ICgoZGF0YTogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGFuZCBoYW5kbGVDbG9zZSgpIGhhcyBmaW5pc2hlZCB1cGRhdGluZyBpbnRlcm5hbCBzdGF0ZXMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgcmVzb2x2ZUFmdGVyQ2xvc2U/OiAoY2xvc2U6IENsb3NlRXZlbnQpID0+IHZvaWRcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFyZENyZWF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZFxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG9wdGlvbnMuY29ubmVjdGlvblxuICAgIHRoaXMuZXZlbnRzID0gb3B0aW9ucy5ldmVudHNcbiAgICB0aGlzLmxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlclxuXG4gICAgdGhpcy5oZWFydCA9IHtcbiAgICAgIGFja25vd2xlZGdlZDogZmFsc2UsXG4gICAgICBpbnRlcnZhbDogNDUwMDAsXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdElkZW50aWZ5KSB0aGlzLnJlcXVlc3RJZGVudGlmeSA9IG9wdGlvbnMucmVxdWVzdElkZW50aWZ5XG4gICAgaWYgKG9wdGlvbnMubWFrZVByZXNlbmNlKSB0aGlzLm1ha2VQcmVzZW5jZSA9IG9wdGlvbnMubWFrZVByZXNlbmNlXG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBMZWFreUJ1Y2tldCh7XG4gICAgICBtYXg6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxBbW91bnQ6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH0pXG4gIH1cblxuICAvKiogVGhlIGdhdGV3YXkgY29uZmlndXJhdGlvbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZC4gKi9cbiAgZ2V0IGdhdGV3YXlDb25maWcoKTogU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uXG4gIH1cblxuICAvKiogVGhlIHVybCB0byBjb25uZWN0IHRvLiBJbml0aWFsbHkgdGhpcyBpcyB0aGUgZGlzY29yZCBnYXRld2F5IHVybCwgYW5kIHRoZW4gaXMgc3dpdGNoZWQgdG8gcmVzdW1lIGdhdGV3YXkgdXJsIG9uY2UgYSBSRUFEWSBpcyByZWNlaXZlZC4gKi9cbiAgZ2V0IGNvbm5lY3Rpb25VcmwoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgfHwgYW5kIG5vdCA/PyBoZXJlLiA/PyB3aWxsIGNhdXNlIGEgYnVnLlxuICAgIHJldHVybiB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgfHwgdGhpcy5nYXRld2F5Q29uZmlnLnVybFxuICB9XG5cbiAgLyoqIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBzYWZlbHkgYmUgbWFkZSBwZXIgcmF0ZSBsaW1pdCBpbnRlcnZhbCwgYmVmb3JlIHRoZSBnYXRld2F5IGdldHMgZGlzY29ubmVjdGVkIGR1ZSB0byBhbiBleGNlZWRlZCByYXRlIGxpbWl0LiAqL1xuICBjYWxjdWxhdGVTYWZlUmVxdWVzdHMoKTogbnVtYmVyIHtcbiAgICAvLyAqIDIgYWRkcyBleHRyYSBzYWZldHkgbGF5ZXIgZm9yIGRpc2NvcmRzIE9QIDEgcmVxdWVzdHMgdGhhdCB3ZSBuZWVkIHRvIHJlc3BvbmQgdG9cbiAgICBjb25zdCBzYWZlUmVxdWVzdHMgPSB0aGlzLm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayAtIE1hdGguY2VpbCh0aGlzLnJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwgLyB0aGlzLmhlYXJ0LmludGVydmFsKSAqIDJcblxuICAgIHJldHVybiBzYWZlUmVxdWVzdHMgPCAwID8gMCA6IHNhZmVSZXF1ZXN0c1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgLy8gSGlnaGVyIHByaW9yaXR5IHJlcXVlc3RzIGdldCBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS5cbiAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICBlbHNlIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5wdXNoKHJlc29sdmUpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgc29ja2V0IGNvbm5lY3Rpb24gdG8gZGlzY29yZCBpZiBwcmVzZW50LiAqL1xuICBhc3luYyBjbG9zZShjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVxdWVzdCBmb3IgU2hhcmQgIyR7dGhpcy5pZH0gdG8gY2xvc2UgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgaWYgKHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlICE9PSBOb2RlV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9J3MgcmVhZHkgc3RhdGUgaXMgJHt0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZX0sIFVuYWJsZSB0byBjbG9zZS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5nb2luZ09mZmxpbmUgPSBjb2RlID09PSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vcm1hbENsb3N1cmUgfHwgY29kZSA9PT0gR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Hb2luZ0F3YXlcblxuICAgIC8vIFRoaXMgaGFzIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbCB0byBzb2NrZXQuY2xvc2UgYXMgZm9yIGV4YW1wbGUgQnVuIGNhbGxzIHNvY2tldC5vbmNsb3NlIGltbWVkaWF0ZWx5IG9uIHRoZSAuY2xvc2UoKSBjYWxsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gZW5kXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlID0gcmVzb2x2ZVxuICAgIH0pXG5cbiAgICB0aGlzLnNvY2tldC5jbG9zZShjb2RlLCByZWFzb24pXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBXYWl0aW5nIGZvciBTaGFyZCAjJHt0aGlzLmlkfSB0byBjbG9zZSB0aGUgc29ja2V0IHdpdGggY29kZSAke2NvZGV9LmApXG5cbiAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgZnVsbHkgY2xvc2VkLCBvdGhlcndpc2UgdGhlcmUnbGwgYmUgcmFjZSBjb25kaXRpb24gaXNzdWVzIGlmIHdlIHRyeSB0byBjb25uZWN0IGFnYWluLCByZXN1bHRpbmcgaW4gdW5leHBlY3RlZCBiZWhhdmlvci5cbiAgICBhd2FpdCBwcm9taXNlXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgLy8gUmVzZXQgdGhlIHJlc29sdmVBZnRlckNsb3NlIGZ1bmN0aW9uIGFmdGVyIGl0IGhhcyBiZWVuIHJlc29sdmVkLlxuICAgIHRoaXMucmVzb2x2ZUFmdGVyQ2xvc2UgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8RGlzY29yZGVub1NoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gQ29ubmVjdGluZyBTaGFyZCAjJHt0aGlzLmlkfSBzb2NrZXQuYClcblxuICAgIHRoaXMuZXZlbnRzLmNvbm5lY3Rpbmc/Lih0aGlzKVxuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmNvbm5lY3Rpb25VcmwpXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCB0aGlzLmdhdGV3YXlDb25maWcudmVyc2lvbi50b1N0cmluZygpKVxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdlbmNvZGluZycsICdqc29uJylcblxuICAgIC8vIFNldCB0aGUgY29tcHJlc3MgdXJsIHBhcmFtIGFuZCBpbml0aWFsaXplIHRoZSBkZWNvbXByZXNzaW9uIGNvbnRleHRzXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbikge1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvbXByZXNzJywgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56bGliKSB7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcbiAgICAgICAgdGhpcy5pbmZsYXRlID0gY3JlYXRlSW5mbGF0ZSh7XG4gICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWJDb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgIGNodW5rU2l6ZTogNjQgKiAxMDI0LFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdUaGUgd2FzIGFuIGVycm9yIGluIGRlY29tcHJlc3NpbmcgYSBaTGliIGNvbXByZXNzZWQgcGF5bG9hZCcsIGUpXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5pbmZsYXRlLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHJldHVyblxuXG4gICAgICAgICAgaWYgKHRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGggKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICBuZXdCdWZmZXIuc2V0KHRoaXMuaW5mbGF0ZUJ1ZmZlcilcbiAgICAgICAgICAgIG5ld0J1ZmZlci5zZXQoZGF0YSwgdGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBuZXdCdWZmZXJcblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gZGF0YVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56c3RkKSB7XG4gICAgICAgIGNvbnN0IGZ6c3RkID0gYXdhaXQgZ2V0RlpTdGQoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBcImZ6c3RkXCIgaXMgbm90IGluc3RhbGxlZC4gRGlzYWJsZWQgdHJhbnNwb3J0IGNvbXByZXNzaW9uLicpXG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ2NvbXByZXNzJylcblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGZ6c3RkKSB7XG4gICAgICAgICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IG5ldyBmenN0ZC5EZWNvbXByZXNzKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKGRhdGEpXG4gICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICAgICAgICAgIHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUuc2hpZnQoKT8uKHBhcnNlZERhdGEpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MgJiYgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFBheWxvYWQgY29tcHJlc3Npb24gaGFzIGJlZW4gZGlzYWJsZWQgc2luY2UgdHJhbnNwb3J0IGNvbXByZXNzaW9uIGlzIGVuYWJsZWQgYXMgd2VsbC4nKVxuICAgICAgdGhpcy5nYXRld2F5Q29uZmlnLmNvbXByZXNzID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBXZSBjaGVjayBmb3IgYnVpbHQtaW4gV2ViU29ja2V0IGltcGxlbWVudGF0aW9ucyBpbiBCdW4gb3IgRGVubywgTm9kZUpTIHYyMiBoYXMgYW4gaW1wbGVtZW50YXRpb24gdG9vIGJ1dCBpdCBzZWVtcyB0byBiZSBsZXNzIG9wdGltaXplZCBzbyBmb3Igbm93IGl0IGlzIGJldHRlciB0byB1c2UgdGhlIHdzIG5wbSBwYWNrYWdlXG4gICAgY29uc3Qgc2hvdWxkVXNlQnVpbHRpbiA9IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdXZWJTb2NrZXQnKSAmJiAoUmVmbGVjdC5oYXMoZ2xvYmFsVGhpcywgJ0J1bicpIHx8IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdEZW5vJykpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVXZWJTb2NrZXQgZG9lc24ndCBzdXBwb3J0IFwiZGlzcGF0Y2hFdmVudFwiLCBhbmQgd2hpbGUgd2UgZG9uJ3QgdXNlIGl0LCBpdCBpcyByZXF1aXJlZCBvbiB0aGUgXCJXZWJTb2NrZXRcIiB0eXBlXG4gICAgY29uc3Qgc29ja2V0OiBXZWJTb2NrZXQgPSBzaG91bGRVc2VCdWlsdGluID8gbmV3IFdlYlNvY2tldCh1cmwpIDogbmV3IE5vZGVXZWJTb2NrZXQodXJsKVxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG5cbiAgICAvLyBCeSBkZWZhdWx0IFdlYlNvY2tldCB3aWxsIGdpdmUgdXMgYSBCbG9iLCB0aGlzIGNoYW5nZXMgaXQgc28gdGhhdCBpdCBnaXZlcyB1cyBhbiBBcnJheUJ1ZmZlclxuICAgIHNvY2tldC5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJ1xuXG4gICAgc29ja2V0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXZlbnQpXG4gICAgc29ja2V0Lm9uY2xvc2UgPSAoY2xvc2VFdmVudCkgPT4gdGhpcy5oYW5kbGVDbG9zZShjbG9zZUV2ZW50KVxuICAgIHNvY2tldC5vbm1lc3NhZ2UgPSAobWVzc2FnZUV2ZW50KSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UobWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQgdG8gYFVuaWRlbnRpZmllZGAgc3RhdGUgaWYgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkb2VzIG5vdCBjb21lIGZyb20gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgaWYgKCFbU2hhcmRTdGF0ZS5JZGVudGlmeWluZywgU2hhcmRTdGF0ZS5SZXN1bWluZ10uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHNvY2tldCBjb25uZWN0ZWQuYClcblxuICAgICAgICB0aGlzLmV2ZW50cy5jb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJlc29sdmUodGhpcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZ5IHRoZSBzaGFyZCB0byB0aGUgZ2F0ZXdheS4gSWYgbm90IGNvbm5lY3RlZCwgdGhpcyB3aWxsIGFsc28gY29ubmVjdCB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuXG4gICAqIEBwYXJhbSBieXBhc3NSZXF1ZXN0IC0gV2hldGhlciB0byBieXBhc3MgdGhlIHJlcXVlc3RJZGVudGlmeSBoYW5kbGVyIGFuZCBpZGVudGlmeSBpbW1lZGlhdGVseS4gVGhpcyBzaG91bGQgYmUgdXNlZCBjYXJlZnVsbHkgYXMgaXQgY2FuIGNhdXNlIGludmFsaWQgc2Vzc2lvbnMuXG4gICAqL1xuICBhc3luYyBpZGVudGlmeShieXBhc3NSZXF1ZXN0ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIG5ldyBpZGVudGlmeSBoYXMgYmVlbiByZXF1ZXN0ZWQgZXZlbiB0aG91Z2ggdGhlcmUgaXMgYWxyZWFkeSBhIGNvbm5lY3Rpb24gb3Blbi5cbiAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBjbG9zZSB0aGUgb2xkIGNvbm5lY3Rpb24gYW5kIGhlYXJ0YmVhdGluZyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBJZGVudGlmeWluZyBvcGVuIFNoYXJkICMke3RoaXMuaWR9LCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uYClcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKCFieXBhc3NSZXF1ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RJZGVudGlmeSgpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2VuZGluZyBJZGVudGlmeSBwYXlsb2FkIGZvciBTaGFyZCAjJHt0aGlzLmlkfS5gKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZSgpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVBRFknLCAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICAgIC8vIFdoZW4gaWRlbnRpZnlpbmcgdG9vIGZhc3QsIERpc2NvcmQgc2VuZHMgYW4gaW52YWxpZCBzZXNzaW9uIHBheWxvYWQuXG4gICAgICAvLyBUaGlzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCB0aG91Z2ggYW5kIHRoZSBzaGFyZCBzdGFydHMgYSBuZXcgaWRlbnRpZnkgYWN0aW9uLlxuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ0lOVkFMSURfU0VTU0lPTicsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFQURZJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogQ2hlY2sgd2hldGhlciB0aGUgY29ubmVjdGlvbiB0byBEaXNjb3JkIGlzIGN1cnJlbnRseSBvcGVuLiAqL1xuICBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlID09PSBOb2RlV2ViU29ja2V0Lk9QRU5cbiAgfVxuXG4gIC8qKiBBdHRlbXB0IHRvIHJlc3VtZSB0aGUgcHJldmlvdXMgc2hhcmRzIHNlc3Npb24gd2l0aCB0aGUgZ2F0ZXdheS4gKi9cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIFNoYXJkICMke3RoaXMuaWR9YClcblxuICAgIC8vIEl0IGhhcyBiZWVuIHJlcXVlc3RlZCB0byByZXN1bWUgdGhlIFNoYXJkcyBzZXNzaW9uLlxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2hhcmQgaXMgc3RpbGwgY29ubmVjdGVkIHdpdGggRGlzY29yZCdzIGdhdGV3YXkgdGhlcmVmb3JlIHdlIG5lZWQgdG8gZm9yY2VmdWxseSBjbG9zZSBpdC5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVzdW1pbmcgb3BlbiBTaGFyZCAjJHt0aGlzLmlkfSwgY2xvc2luZyB0aGUgY29ubmVjdGlvbmApXG4gICAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiwgJ1JlY29ubmVjdGluZyB0aGUgc2hhcmQsIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24uJylcbiAgICB9XG5cbiAgICAvLyBTaGFyZCBoYXMgbmV2ZXIgaWRlbnRpZmllZCwgc28gd2UgY2Fubm90IHJlc3VtZS5cbiAgICBpZiAoIXRoaXMuc2Vzc2lvbklkKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBUcnlpbmcgdG8gcmVzdW1lIFNoYXJkICMke3RoaXMuaWR9IHdpdGhvdXQgdGhlIHNlc3Npb24gaWQuIElkZW50aWZ5aW5nIHRoZSBzaGFyZCBpbnN0ZWFkLmApXG5cbiAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuUmVzdW1pbmdcblxuICAgIC8vIEJlZm9yZSB3ZSBjYW4gcmVzdW1lLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHdpdGggRGlzY29yZCdzIGdhdGV3YXkuXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0KClcblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIFNoYXJkICMke3RoaXMuaWR9IGNvbm5lY3RlZC4gU2Vzc2lvbiBpZDogJHt0aGlzLnNlc3Npb25JZH0gfCBTZXF1ZW5jZTogJHt0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJ9YClcblxuICAgIHRoaXMuc2VuZChcbiAgICAgIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlJlc3VtZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIHRva2VuOiBgQm90ICR7dGhpcy5nYXRld2F5Q29uZmlnLnRva2VufWAsXG4gICAgICAgICAgc2Vzc2lvbl9pZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgc2VxOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIgPz8gMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgIClcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ1JFU1VNRUQnLCAoKSA9PiByZXNvbHZlKCkpXG5cbiAgICAgIC8vIElmIGl0IGlzIGF0dGVtcHRlZCB0byByZXN1bWUgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gaWQsIERpc2NvcmQgc2VuZHMgYW4gaW52YWxpZCBzZXNzaW9uIHBheWxvYWRcbiAgICAgIC8vIE5vdCBlcnJvcmluZyBoZXJlIHNpbmNlIGl0IGlzIGVhc3kgdGhhdCB0aGlzIGhhcHBlbnMsIGFsc28gaXQgd291bGQgYmUgbm90IGNhdGNoYWJsZVxuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ0lOVkFMSURfU0VTU0lPTicsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFU1VNRUQnKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZSB0byBEaXNjb3JkLlxuICAgKiBAcGFyYW0gaGlnaFByaW9yaXR5IC0gV2hldGhlciB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbmQgYXNhcC5cbiAgICovXG4gIGFzeW5jIHNlbmQobWVzc2FnZTogU2hhcmRTb2NrZXRSZXF1ZXN0LCBoaWdoUHJpb3JpdHk6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEJlZm9yZSBhY3F1aXJpbmcgYSB0b2tlbiBmcm9tIHRoZSBidWNrZXQsIGNoZWNrIHdoZXRoZXIgdGhlIHNoYXJkIGlzIGN1cnJlbnRseSBvZmZsaW5lIG9yIG5vdC5cbiAgICAvLyBFbHNlIGJ1Y2tldCBhbmQgdG9rZW4gd2FpdCB0aW1lIGp1c3QgZ2V0IHdhc3RlZC5cbiAgICBhd2FpdCB0aGlzLmNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHkpXG5cbiAgICBhd2FpdCB0aGlzLmJ1Y2tldC5hY3F1aXJlKGhpZ2hQcmlvcml0eSlcblxuICAgIC8vIEl0J3MgcG9zc2libGUsIHRoYXQgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZSBhZnRlciBhIHRva2VuIGhhcyBiZWVuIGFjcXVpcmVkIGZyb20gdGhlIGJ1Y2tldC5cbiAgICBhd2FpdCB0aGlzLmNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHkpXG5cbiAgICB0aGlzLnNvY2tldD8uc2VuZChKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcbiAgfVxuXG4gIC8qKiBTaHV0ZG93biB0aGUgdGhpcy4gRm9yY2VmdWxseSBkaXNjb25uZWN0IHRoZSBzaGFyZCBmcm9tIERpc2NvcmQuIFRoZSBzaGFyZCBtYXkgbm90IGF0dGVtcHQgdG8gcmVjb25uZWN0IHdpdGggRGlzY29yZC4gKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd24sICdTaGFyZCBzaHV0dGluZyBkb3duLicpXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGdhdGV3YXkgY29ubmVjdGlvbiBlcnJvciAqL1xuICBoYW5kbGVFcnJvcihlcnJvcjogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5lcnJvcihgW1NoYXJkXSBUaGVyZSB3YXMgYW4gZXJyb3IgY29ubmVjdGluZyBTaGFyZCAjJHt0aGlzLmlkfS5gLCBlcnJvcilcbiAgfVxuXG4gIC8qKiBIYW5kbGUgYSBnYXRld2F5IGNvbm5lY3Rpb24gY2xvc2UuICovXG4gIGFzeW5jIGhhbmRsZUNsb3NlKGNsb3NlOiBDbG9zZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zb2NrZXQgPSB1bmRlZmluZWRcbiAgICB0aGlzLnN0b3BIZWFydGJlYXRpbmcoKVxuXG4gICAgLy8gQ2xlYXIgdGhlIHpsaWIvenN0ZCBkYXRhXG4gICAgdGhpcy5pbmZsYXRlID0gdW5kZWZpbmVkXG4gICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcbiAgICB0aGlzLmRlY29tcHJlc3Npb25Qcm9taXNlc1F1ZXVlID0gW11cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGNsb3NlZCB3aXRoIGNvZGUgJHtjbG9zZS5jb2RlfSR7Y2xvc2UucmVhc29uID8gYCwgYW5kIHJlYXNvbjogJHtjbG9zZS5yZWFzb259YCA6ICcnfS5gKVxuXG4gICAgLy8gUmVzb2x2ZSB0aGUgY2xvc2UgcHJvbWlzZSBpZiBpdCBleGlzdHNcbiAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlPy4oY2xvc2UpXG5cbiAgICBzd2l0Y2ggKGNsb3NlLmNvZGUpIHtcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlRlc3RpbmdGaW5pc2hlZDoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBPbiB0aGVzZSBjb2RlcyBhIG1hbnVhbCBzdGFydCB3aWxsIGJlIGRvbmUuXG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5TaHV0ZG93bjpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmc6XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXNoYXJkZWQ6XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbjoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWRcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIFdoZW4gdGhlc2UgY29kZXMgYXJlIHJlY2VpdmVkIHNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZy5cbiAgICAgIC8vIE9uIHRob3NlIHdlIGNhbm5vdCBzdGFydCBhIHJlY29ubmVjdCBhdHRlbXB0LlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkF1dGhlbnRpY2F0aW9uRmFpbGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRTaGFyZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5TaGFyZGluZ1JlcXVpcmVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRBcGlWZXJzaW9uOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRJbnRlbnRzOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRpc2FsbG93ZWRJbnRlbnRzOiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2xvc2UucmVhc29uIHx8ICdEaXNjb3JkIGdhdmUgbm8gcmVhc29uISBHRyEgWW91IGJyb2tlIERpc2NvcmQhJylcbiAgICAgIH1cbiAgICAgIC8vIEdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZXMgd2hpY2ggcmVxdWlyZSBhIG5ldyBpZGVudGlmeS5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3RBdXRoZW50aWNhdGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRTZXE6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2Vzc2lvblRpbWVkT3V0OiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGNsb3NlZCByZXF1aXJpbmcgcmUtaWRlbnRpZnkuYClcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBUaGlzIGNhc2UgbXVzdCBhbHdheXMgYmUgcmlnaHQgYWJvdmUgdGhlIGNhc2VzIHRoYXQgcnVucyB3aXRoIGRlZmF1bHQgY2FzZSBiZWNhdXNlIG9mIGhvdyBzd2l0Y2ggd29ya3Mgd2hlbiB5b3UgZG9uJ3QgYnJlYWsgLyByZXR1cm4sIG1vcmUgaW5mbyBiZWxvdy5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3JtYWxDbG9zdXJlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkdvaW5nQXdheToge1xuICAgICAgICAvLyBJZiB0aGUgc2hhcmQgaXMgbWFya2VkIGFzIGdvaW5nT2ZmbGluZSwgaXQgc3RheXMgZGlzY29ubmVjdGVkLlxuICAgICAgICBpZiAodGhpcy5nb2luZ09mZmxpbmUpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWRcbiAgICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgICAgdGhpcy5nb2luZ09mZmxpbmUgPSBmYWxzZVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdGhlIHNoYXJkIHRvIGdvIHRocm91Z2ggdGhlIGRlZmF1bHQgY2FzZSB3aGVyZSBpdCBnZXRzIHJlc3VtZWQsIGFzIGl0IG1pZ2h0IGJlIGFuIHVuZXhwZWN0ZWQgY2xvc3VyZSBmcm9tIERpc2NvcmQgb3IgQ2xvdWRmbGFyZSBmb3IgZXhhbXBsZSwgc28gd2UgZG9uJ3QgdXNlIGJyZWFrIC8gcmV0dXJuIGhlcmUuXG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIG9uIHdoaWNoIGEgcmVzdW1lIGlzIGFsbG93ZWQuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuVW5rbm93bkVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlVua25vd25PcGNvZGU6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuRGVjb2RlRXJyb3I6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuUmF0ZUxpbWl0ZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuQWxyZWFkeUF1dGhlbnRpY2F0ZWQ6XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCB3aGVyZSB3ZSByZXN1bWUgZm9yZXZlciwgc28gaWYgd2Ugd2VyZSBhbHJlYWR5IHJlc3VtaW5nIHdlIGlkZW50aWZ5IGluc3RlYWRcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUgPT09IFNoYXJkU3RhdGUuUmVzdW1pbmcgPyBTaGFyZFN0YXRlLklkZW50aWZ5aW5nIDogU2hhcmRTdGF0ZS5SZXN1bWluZ1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBTaGFyZFN0YXRlLlJlc3VtaW5nKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhbiBpbmNvbWluZyBnYXRld2F5IG1lc3NhZ2UuICovXG4gIGFzeW5jIGhhbmRsZU1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVGhlIHdzIG5wbSBwYWNrYWdlIHdpbGwgdXNlIGEgQnVmZmVyLCB3aGlsZSB0aGUgZ2xvYmFsIGJ1aWx0LWluIHdpbGwgdXNlIEFycmF5QnVmZmVyXG4gICAgY29uc3QgaXNDb21wcmVzc2VkID0gbWVzc2FnZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgbWVzc2FnZS5kYXRhIGluc3RhbmNlb2YgQnVmZmVyXG5cbiAgICBjb25zdCBkYXRhID0gaXNDb21wcmVzc2VkID8gYXdhaXQgdGhpcy5kZWNvbXByZXNzUGFja2V0KG1lc3NhZ2UuZGF0YSkgOiAoSlNPTi5wYXJzZShtZXNzYWdlLmRhdGEpIGFzIERpc2NvcmRHYXRld2F5UGF5bG9hZClcblxuICAgIC8vIENoZWNrIGlmIHRoZSBkZWNvbXByZXNzaW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bFxuICAgIGlmICghZGF0YSkgcmV0dXJuXG5cbiAgICBhd2FpdCB0aGlzLmhhbmRsZURpc2NvcmRQYWNrZXQoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXByZXNzIGEgemxpYi96c3RkIGNvbXByZXNzZWQgcGFja2V0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBkZWNvbXByZXNzUGFja2V0KGRhdGE6IEFycmF5QnVmZmVyIHwgQnVmZmVyKTogUHJvbWlzZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQgfCBudWxsPiB7XG4gICAgLy8gQSBidWZmZXIgaXMgYSBVaW50OEFycmF5IHVuZGVyIHRoZSBob29kLiBBbiBBcnJheUJ1ZmZlciBpcyBnZW5lcmljLCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgVWludDhBcnJheSB0aGF0IHVzZXMgdGhlIHdob2xlIEFycmF5QnVmZmVyXG4gICAgY29uc3QgY29tcHJlc3NlZERhdGE6IFVpbnQ4QXJyYXkgPSBkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IG5ldyBVaW50OEFycmF5KGRhdGEpXG5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56bGliKSB7XG4gICAgICBpZiAoIXRoaXMuaW5mbGF0ZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5mYXRhbCgnW1NoYXJkXSB6bGliLXN0cmVhbSB0cmFuc3BvcnQgY29tcHJlc3Npb24gd2FzIGVuYWJsZWQgYnV0IG5vIGluc3RhbmNlIG9mIEluZmxhdGUgd2FzIGZvdW5kLicpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIC8vIEFsaWFzLCB1c2VkIHRvIGF2b2lkIHNvbWUgbnVsbCBjaGVja3MgaW4gdGhlIFByb21pc2UgY29uc3RydWN0b3JcbiAgICAgIGNvbnN0IGluZmxhdGUgPSB0aGlzLmluZmxhdGVcblxuICAgICAgY29uc3Qgd3JpdGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpbmZsYXRlLndyaXRlKGNvbXByZXNzZWREYXRhLCAnYmluYXJ5JywgKGVycm9yKSA9PiAoZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZSgpKSlcbiAgICAgIH0pXG5cbiAgICAgIGlmICghZW5kc1dpdGhNYXJrZXIoY29tcHJlc3NlZERhdGEsIFpMSUJfU1lOQ19GTFVTSCkpIHJldHVybiBudWxsXG5cbiAgICAgIGF3YWl0IHdyaXRlUHJvbWlzZVxuXG4gICAgICBpZiAoIXRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFRoZSBaTGliIGluZmxhdGUgYnVmZmVyIHdhcyBjbGVhcmVkIGF0IGFuIHVuZXhwZWN0ZWQgbW9tZW50LicpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUodGhpcy5pbmZsYXRlQnVmZmVyKVxuICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gbnVsbFxuXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56c3RkKSB7XG4gICAgICBpZiAoIXRoaXMuenN0ZERlY29tcHJlc3MpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZmF0YWwoJ1tTaGFyZF0genN0ZC1zdHJlYW0gdHJhbnNwb3J0IGNvbXByZXNzaW9uIHdhcyBlbmFibGVkIGJ1dCBubyBpbnN0YW5jZSBvZiBEZWNvbXByZXNzIHdhcyBmb3VuZC4nKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICB0aGlzLnpzdGREZWNvbXByZXNzLnB1c2goY29tcHJlc3NlZERhdGEpXG5cbiAgICAgIGNvbnN0IGRlY29tcHJlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2U8RGlzY29yZEdhdGV3YXlQYXlsb2FkPigocikgPT4gdGhpcy5kZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZS5wdXNoKHIpKVxuICAgICAgcmV0dXJuIGF3YWl0IGRlY29tcHJlc3Npb25Qcm9taXNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcykge1xuICAgICAgY29uc3QgZGVjb21wcmVzc2VkID0gaW5mbGF0ZVN5bmMoY29tcHJlc3NlZERhdGEpXG4gICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKGRlY29tcHJlc3NlZClcblxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZERhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGEgaW5jb21pbmcgZ2F0ZXdheSBwYWNrZXQuICovXG4gIGFzeW5jIGhhbmRsZURpc2NvcmRQYWNrZXQocGFja2V0OiBEaXNjb3JkR2F0ZXdheVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBFZGdlIGNhc2Ugc3RhcnQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8vaXNzdWVzLzIzMTFcbiAgICB0aGlzLmhlYXJ0Lmxhc3RBY2sgPSBEYXRlLm5vdygpXG4gICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSB0cnVlXG4gICAgLy8gRWRnZSBjYXNlIGVuZCFcblxuICAgIHN3aXRjaCAocGFja2V0Lm9wKSB7XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdDoge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHJldHVyblxuXG4gICAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICAgIC8vIERpc2NvcmQgcmFuZG9tbHkgc2VuZHMgdGhpcyByZXF1aXJpbmcgYW4gaW1tZWRpYXRlIGhlYXJ0YmVhdCBiYWNrLlxuICAgICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgICB0aGlzLnNvY2tldD8uc2VuZChcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgICAgZDogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdD8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSGVsbG86IHtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSAocGFja2V0LmQgYXMgRGlzY29yZEhlbGxvKS5oZWFydGJlYXRfaW50ZXJ2YWxcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gcmVjZWl2ZWQgSGVsbG9gKVxuICAgICAgICB0aGlzLnN0YXJ0SGVhcnRiZWF0aW5nKGludGVydmFsKVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTaGFyZFN0YXRlLlJlc3VtaW5nKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFF1ZXVlID0gWy4uLnRoaXMuYnVja2V0LnF1ZXVlXVxuICAgICAgICAgIC8vIEhFTExPIGhhcyBiZWVuIHNlbmQgb24gYSBub24gcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIHN0YXJ0cyBhIG5ldyBzZXNzaW9uLFxuICAgICAgICAgIC8vIHRoZXJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpbnRlcnZhbCBoYXMgYmVlbiByZXNldCB0b28uXG4gICAgICAgICAgdGhpcy5idWNrZXQgPSBuZXcgTGVha3lCdWNrZXQoe1xuICAgICAgICAgICAgbWF4OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgICAgICAgcmVmaWxsSW50ZXJ2YWw6IDYwMDAwLFxuICAgICAgICAgICAgcmVmaWxsQW1vdW50OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gUXVldWUgc2hvdWxkIG5vdCBiZSBsb3N0IG9uIGEgcmUtaWRlbnRpZnkuXG4gICAgICAgICAgdGhpcy5idWNrZXQucXVldWUudW5zaGlmdCguLi5jdXJyZW50UXVldWUpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWxsbz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0QUNLOiB7XG4gICAgICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0aW5nIHRoZSByb3VuZCB0cmlwIHRpbWUgZm9yIHVzZXJzIHdobyBuZWVkIGl0LlxuICAgICAgICBpZiAodGhpcy5oZWFydC5sYXN0QmVhdCkge1xuICAgICAgICAgIHRoaXMuaGVhcnQucnR0ID0gdGhpcy5oZWFydC5sYXN0QWNrIC0gdGhpcy5oZWFydC5sYXN0QmVhdFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0QWNrPy4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5SZWNvbm5lY3Q6IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVjZWl2ZWQgYSBSZWNvbm5lY3QgZm9yIFNoYXJkICMke3RoaXMuaWR9YClcbiAgICAgICAgdGhpcy5ldmVudHMucmVxdWVzdGVkUmVjb25uZWN0Py4odGhpcylcblxuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSW52YWxpZFNlc3Npb246IHtcbiAgICAgICAgY29uc3QgcmVzdW1hYmxlID0gcGFja2V0LmQgYXMgYm9vbGVhblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZWNlaXZlZCBJbnZhbGlkIFNlc3Npb24gZm9yIFNoYXJkICMke3RoaXMuaWR9IHdpdGggcmVzdW1hYmxlIGFzICR7cmVzdW1hYmxlfWApXG5cbiAgICAgICAgdGhpcy5ldmVudHMuaW52YWxpZFNlc3Npb24/Lih0aGlzLCByZXN1bWFibGUpXG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB3YWl0IGZvciBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIDEgYW5kIDVcbiAgICAgICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNyZXN1bWluZ1xuICAgICAgICBhd2FpdCBkZWxheShNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogNCArIDEpICogMTAwMCkpXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ0lOVkFMSURfU0VTU0lPTicpPy4ocGFja2V0KVxuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnSU5WQUxJRF9TRVNTSU9OJylcblxuICAgICAgICAvLyBXaGVuIHJlc3VtYWJsZSBpcyBmYWxzZSB3ZSBuZWVkIHRvIHJlLWlkZW50aWZ5XG4gICAgICAgIGlmICghcmVzdW1hYmxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHNlc3Npb24gaXMgaW52YWxpZCBidXQgYXBwYXJlbnRseSBpdCBpcyByZXN1bWFibGVcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChwYWNrZXQudCkge1xuICAgICAgY2FzZSAnUkVTVU1FRCc6XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuICAgICAgICB0aGlzLmV2ZW50cy5yZXN1bWVkPy4odGhpcylcblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSByZWNlaXZlZCBSRVNVTUVEYClcblxuICAgICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUuZm9yRWFjaCgocmVzb2x2ZSkgPT4gcmVzb2x2ZSgpKVxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBsZW5ndGggdG8gMCB3aWxsIGRlbGV0ZSB0aGUgZWxlbWVudHMgaW4gaXRcbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmxlbmd0aCA9IDBcblxuICAgICAgICB0aGlzLnJlc29sdmVzLmdldCgnUkVTVU1FRCcpPy4ocGFja2V0KVxuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVTVU1FRCcpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdSRUFEWSc6IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHBhY2tldC5kIGFzIERpc2NvcmRSZWFkeVxuICAgICAgICB0aGlzLmV2ZW50cy5yZWFkeT8uKHRoaXMpXG5cbiAgICAgICAgLy8gSW1wb3J0YW50IGZvciBmdXR1cmUgcmVzdW1lcy5cbiAgICAgICAgdGhpcy5yZXN1bWVHYXRld2F5VXJsID0gcGF5bG9hZC5yZXN1bWVfZ2F0ZXdheV91cmxcbiAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBwYXlsb2FkLnNlc3Npb25faWRcblxuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWRcblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSByZWNlaXZlZCBSRUFEWWApXG5cbiAgICAgICAgLy8gQ29udGludWUgdGhlIHJlcXVlc3RzIHdoaWNoIGhhdmUgYmVlbiBxdWV1ZWQgc2luY2UgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZS5cbiAgICAgICAgLy8gSW1wb3J0YW50IHdoZW4gdGhpcyBpcyBhIHJlLWlkZW50aWZ5XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5mb3JFYWNoKChyZXNvbHZlKSA9PiByZXNvbHZlKCkpXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGxlbmd0aCB0byAwIHdpbGwgZGVsZXRlIHRoZSBlbGVtZW50cyBpbiBpdFxuICAgICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUubGVuZ3RoID0gMFxuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdSRUFEWScpPy4ocGFja2V0KVxuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVBRFknKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIGl0IGlzIHByZXNlbnRcbiAgICAvLyBgc2AgY2FuIGJlIGVpdGhlciBgbnVsbGAgb3IgYSBgbnVtYmVyYC5cbiAgICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHVwZGF0ZSBtaXNzZXMgd2hlbiBgc2AgaXMgYDBgIHdlIGNoZWNrIGFnYWluc3QgbnVsbC5cbiAgICBpZiAocGFja2V0LnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlciA9IHBhY2tldC5zXG4gICAgfVxuXG4gICAgdGhpcy5mb3J3YXJkVG9Cb3QocGFja2V0KVxuICB9XG5cbiAgZm9yd2FyZFRvQm90KHBhY2tldDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKTogdm9pZCB7XG4gICAgLy8gVGhlIG5lY2Vzc2FyeSBoYW5kbGluZyByZXF1aXJlZCBmb3IgdGhlIFNoYXJkcyBjb25uZWN0aW9uIGhhcyBiZWVuIGZpbmlzaGVkLlxuICAgIC8vIE5vdyB0aGUgZXZlbnQgY2FuIGJlIHNhZmVseSBmb3J3YXJkZWQuXG4gICAgdGhpcy5ldmVudHMubWVzc2FnZT8uKHRoaXMsIGNhbWVsaXplKHBhY2tldCkpXG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgaW4gb3JkZXIgdG8gbWFrZSB0aGUgc2hhcmRzIHByZXNlbmNlLlxuICAgKiBhc3luYyBpbiBjYXNlIGRldnMgY3JlYXRlIHRoZSBwcmVzZW5jZSBiYXNlZCBvbiBlZy4gZGF0YWJhc2UgdmFsdWVzLlxuICAgKiBQYXNzaW5nIHRoZSBzaGFyZCdzIGlkIHRoZXJlIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0aGUgZGV2IHRvIHVzZSB0aGlzIGZ1bmN0aW9uLlxuICAgKi9cbiAgYXN5bmMgbWFrZVByZXNlbmNlKCk6IFByb21pc2U8RGlzY29yZFVwZGF0ZVByZXNlbmNlIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgbWFuYWdlbWVudCBwcm9jZXNzLCBpbiBvcmRlciB0byBrbm93IHdoZXRoZXIgaXRzIGZyZWUgdG8gaWRlbnRpZnkuXG4gICAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXNvbHZlcywgdGhpcyBtZWFucyB0aGF0IHRoZSBzaGFyZCBpcyBhbGxvd2VkIHRvIHNlbmQgYW4gaWRlbnRpZnkgcGF5bG9hZCB0byBkaXNjb3JkLlxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdElkZW50aWZ5KCk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKiogU3RhcnQgc2VuZGluZyBoZWFydGJlYXQgcGF5bG9hZHMgdG8gRGlzY29yZCBpbiB0aGUgcHJvdmlkZWQgaW50ZXJ2YWwuICovXG4gIHN0YXJ0SGVhcnRiZWF0aW5nKGludGVydmFsOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTdGFydCBoZWFydGJlYXRpbmcgb24gU2hhcmQgIyR7dGhpcy5pZH1gKVxuXG4gICAgLy8gSWYgb2xkIGhlYXJ0YmVhc3QgZXhpc3QgbGlrZSBhZnRlciByZXN1bWUsIGNsZWFyIHRoZSBvbGQgb25lcy5cbiAgICB0aGlzLnN0b3BIZWFydGJlYXRpbmcoKVxuXG4gICAgdGhpcy5oZWFydC5pbnRlcnZhbCA9IGludGVydmFsXG5cbiAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQncyBzdGF0ZSB0byBgVW5pZGVudGlmaWVkYFxuICAgIC8vIGlmIGhlYXJ0YmVhdGluZyBoYXMgbm90IGJlZW4gc3RhcnRlZCBkdWUgdG8gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICBpZiAoW1NoYXJkU3RhdGUuRGlzY29ubmVjdGVkLCBTaGFyZFN0YXRlLk9mZmxpbmVdLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCBpcyBkaXNjb25uZWN0ZWQgb3Igb2ZmbGluZSBidXQgdGhlIGhlYXJ0YmVhdCB3YXMgc3RhcnRlZCAjJHt0aGlzLmlkfWApXG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICB9XG5cbiAgICAvLyBUaGUgZmlyc3QgaGVhcnRiZWF0IG5lZWRzIHRvIGJlIHNlbmQgd2l0aCBhIHJhbmRvbSBkZWxheSBiZXR3ZWVuIGAwYCBhbmQgYGludGVydmFsYFxuICAgIC8vIFVzaW5nIGEgYHNldFRpbWVvdXQoXywgaml0dGVyKWAgaGVyZSB0byBhY2NvbXBsaXNoIHRoYXQuXG4gICAgLy8gYE1hdGgucmFuZG9tKClgIGNhbiBiZSBgMGAgc28gd2UgdXNlIGAwLjVgIGlmIHRoaXMgaGFwcGVuc1xuICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjaGVhcnRiZWF0aW5nXG4gICAgY29uc3Qgaml0dGVyID0gTWF0aC5jZWlsKHRoaXMuaGVhcnQuaW50ZXJ2YWwgKiAoTWF0aC5yYW5kb20oKSB8fCAwLjUpKVxuXG4gICAgdGhpcy5oZWFydC50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEJlZ2lubmluZyBoZWFydGJlYXRpbmcgcHJvY2VzcyBmb3IgU2hhcmQgIyR7dGhpcy5pZH1gKVxuXG4gICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHJldHVyblxuXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBIZWFydGJlYXRpbmcgb24gU2hhcmQgIyR7dGhpcy5pZH0uIFByZXZpb3VzIHNlcXVlbmNlIG51bWJlcjogJHt0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJ9YClcblxuICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgIH0pLFxuICAgICAgKVxuXG4gICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSBmYWxzZVxuXG4gICAgICAvLyBBZnRlciB0aGUgcmFuZG9tIGhlYXJ0YmVhdCBqaXR0ZXIgd2UgY2FuIHN0YXJ0IGEgbm9ybWFsIGludGVydmFsLlxuICAgICAgdGhpcy5oZWFydC5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBpcyBub3Qgb3BlbiwgYnV0IGF0dGVtcHRlZCBoZWFydGJlYXQsIGlnbm9yaW5nLmApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgU2hhcmQgZGlkIG5vdCByZWNlaXZlIGEgaGVhcnRiZWF0IEFDSyBmcm9tIERpc2NvcmQgaW4gdGltZSxcbiAgICAgICAgLy8gdGhlcmVmb3JlIHdlIGhhdmUgdG8gYXNzdW1lIHRoYXQgdGhlIGNvbm5lY3Rpb24gaGFzIGZhaWxlZCBvciBnb3QgXCJ6b21iaWVkXCIuXG4gICAgICAgIC8vIFRoZSBTaGFyZCBuZWVkcyB0byBzdGFydCBhIHJlLWlkZW50aWZ5IGFjdGlvbiBhY2NvcmRpbmdseS5cbiAgICAgICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmctZXhhbXBsZS1nYXRld2F5LWhlYXJ0YmVhdC1hY2tcbiAgICAgICAgaWYgKCF0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEhlYXJ0YmVhdCBub3QgYWNrbm93bGVkZ2VkIGZvciBTaGFyZCAjJHt0aGlzLmlkfS4gQXNzdW1pbmcgem9tYmllZCBjb25uZWN0aW9uLmApXG4gICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuWm9tYmllZENvbm5lY3Rpb24sICdab21iaWVkIGNvbm5lY3Rpb24sIGRpZCBub3QgcmVjZWl2ZSBhbiBoZWFydGJlYXQgQUNLIGluIHRpbWUuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfS4gUHJldmlvdXMgc2VxdWVuY2UgbnVtYmVyOiAke3RoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcn1gKVxuXG4gICAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IGZhbHNlXG5cbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0Py4odGhpcylcbiAgICAgIH0sIHRoaXMuaGVhcnQuaW50ZXJ2YWwpXG4gICAgfSwgaml0dGVyKVxuICB9XG5cbiAgLyoqIFN0b3AgdGhlIGhlYXJ0YmVhdGluZyBwcm9jZXNzIHdpdGggZGlzY29yZC4gKi9cbiAgc3RvcEhlYXJ0YmVhdGluZygpOiB2b2lkIHtcbiAgICAvLyBDbGVhciB0aGUgcmVndWxhciBoZWFydGJlYXQgaW50ZXJ2YWwuXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0LmludGVydmFsSWQpXG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBTaGFyZCBnb3QgY2xvc2VkIGJlZm9yZSB0aGUgZmlyc3Qgaml0dGVyZWQgaGVhcnRiZWF0LlxuICAgIC8vIFRvIGdvIHNhZmUgd2Ugc2hvdWxkIGNsZWFyIHRoZSByZWxhdGVkIHRpbWVvdXQgdG9vLlxuICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0LnRpbWVvdXRJZClcbiAgfVxufVxuXG4vKiogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBlbmRzIHdpdGggdGhlIG1hcmtlciAqL1xuZnVuY3Rpb24gZW5kc1dpdGhNYXJrZXIoYnVmZmVyOiBVaW50OEFycmF5LCBtYXJrZXI6IFVpbnQ4QXJyYXkpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPCBtYXJrZXIubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtlci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChidWZmZXJbYnVmZmVyLmxlbmd0aCAtIG1hcmtlci5sZW5ndGggKyBpXSAhPT0gbWFya2VyW2ldKSByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRDcmVhdGVPcHRpb25zIHtcbiAgLyoqIFRoZSBzaGFyZCBpZCAqL1xuICBpZDogbnVtYmVyXG4gIC8qKiBUaGUgY29ubmVjdGlvbiBkZXRhaWxzICovXG4gIGNvbm5lY3Rpb246IFNoYXJkR2F0ZXdheUNvbmZpZ1xuICAvKiogVGhlIGV2ZW50IGhhbmRsZXJzIGZvciBldmVudHMgb24gdGhlIHNoYXJkLiAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzXG4gIC8qKiBUaGUgbG9nZ2VyIGZvciB0aGUgc2hhcmQgKi9cbiAgbG9nZ2VyPzogUGljazx0eXBlb2YgbG9nZ2VyLCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdmYXRhbCc+XG4gIC8qKiBUaGUgaGFuZGxlciB0byByZXF1ZXN0IGEgc3BhY2UgdG8gbWFrZSBhbiBpZGVudGlmeSByZXF1ZXN0LiAqL1xuICByZXF1ZXN0SWRlbnRpZnk/OiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBGdW5jdGlvbiB0byBjcmVhdGUgdGhlIGJvdCBzdGF0dXMgdG8gc2VuZCBvbiBJZGVudGlmeSByZXF1ZXN0cyAqL1xuICBtYWtlUHJlc2VuY2U/OiAoKSA9PiBQcm9taXNlPERpc2NvcmRVcGRhdGVQcmVzZW5jZSB8IHVuZGVmaW5lZD5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzY29yZGVub1NoYXJkXG4iXSwibmFtZXMiOlsiRGlzY29yZGVub1NoYXJkIiwiWkxJQl9TWU5DX0ZMVVNIIiwiVWludDhBcnJheSIsImZ6c3RkIiwiZ2V0RlpTdGQiLCJvcHRpb25zIiwibWF4UmVxdWVzdHNQZXJSYXRlTGltaXRUaWNrIiwicHJldmlvdXNTZXF1ZW5jZU51bWJlciIsInJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwiLCJzdGF0ZSIsIlNoYXJkU3RhdGUiLCJPZmZsaW5lIiwicmVzdW1lR2F0ZXdheVVybCIsImV2ZW50cyIsIm9mZmxpbmVTZW5kUXVldWUiLCJyZXNvbHZlcyIsIk1hcCIsImdvaW5nT2ZmbGluZSIsInRleHREZWNvZGVyIiwiVGV4dERlY29kZXIiLCJpbmZsYXRlQnVmZmVyIiwiZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUiLCJpZCIsImNvbm5lY3Rpb24iLCJsb2dnZXIiLCJoZWFydCIsImFja25vd2xlZGdlZCIsImludGVydmFsIiwicmVxdWVzdElkZW50aWZ5IiwibWFrZVByZXNlbmNlIiwiYnVja2V0IiwiTGVha3lCdWNrZXQiLCJtYXgiLCJjYWxjdWxhdGVTYWZlUmVxdWVzdHMiLCJyZWZpbGxBbW91bnQiLCJyZWZpbGxJbnRlcnZhbCIsImdhdGV3YXlDb25maWciLCJjb25uZWN0aW9uVXJsIiwidXJsIiwic2FmZVJlcXVlc3RzIiwiTWF0aCIsImNlaWwiLCJjaGVja09mZmxpbmUiLCJoaWdoUHJpb3JpdHkiLCJpc09wZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuc2hpZnQiLCJwdXNoIiwiY2xvc2UiLCJjb2RlIiwicmVhc29uIiwiZGVidWciLCJzb2NrZXQiLCJyZWFkeVN0YXRlIiwiTm9kZVdlYlNvY2tldCIsIk9QRU4iLCJHYXRld2F5Q2xvc2VFdmVudENvZGVzIiwiTm9ybWFsQ2xvc3VyZSIsIkdvaW5nQXdheSIsInByb21pc2UiLCJyZXNvbHZlQWZ0ZXJDbG9zZSIsInVuZGVmaW5lZCIsImNvbm5lY3QiLCJJZGVudGlmeWluZyIsIlJlc3VtaW5nIiwiaW5jbHVkZXMiLCJDb25uZWN0aW5nIiwiY29ubmVjdGluZyIsIlVSTCIsInNlYXJjaFBhcmFtcyIsInNldCIsInZlcnNpb24iLCJ0b1N0cmluZyIsInRyYW5zcG9ydENvbXByZXNzaW9uIiwiVHJhbnNwb3J0Q29tcHJlc3Npb24iLCJ6bGliIiwiaW5mbGF0ZSIsImNyZWF0ZUluZmxhdGUiLCJmaW5pc2hGbHVzaCIsInpsaWJDb25zdGFudHMiLCJaX1NZTkNfRkxVU0giLCJjaHVua1NpemUiLCJvbiIsImUiLCJlcnJvciIsImRhdGEiLCJuZXdCdWZmZXIiLCJieXRlTGVuZ3RoIiwienN0ZCIsImNhdGNoIiwid2FybiIsImRlbGV0ZSIsInpzdGREZWNvbXByZXNzIiwiRGVjb21wcmVzcyIsImRlY29kZWREYXRhIiwiZGVjb2RlIiwicGFyc2VkRGF0YSIsIkpTT04iLCJwYXJzZSIsInNoaWZ0IiwiY29tcHJlc3MiLCJzaG91bGRVc2VCdWlsdGluIiwiUmVmbGVjdCIsImhhcyIsImdsb2JhbFRoaXMiLCJXZWJTb2NrZXQiLCJiaW5hcnlUeXBlIiwib25lcnJvciIsImV2ZW50IiwiaGFuZGxlRXJyb3IiLCJvbmNsb3NlIiwiY2xvc2VFdmVudCIsImhhbmRsZUNsb3NlIiwib25tZXNzYWdlIiwibWVzc2FnZUV2ZW50IiwiaGFuZGxlTWVzc2FnZSIsIm9ub3BlbiIsIlVuaWRlbnRpZmllZCIsImNvbm5lY3RlZCIsImlkZW50aWZ5IiwiYnlwYXNzUmVxdWVzdCIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsIlJlSWRlbnRpZnlpbmciLCJpZGVudGlmeWluZyIsInNlbmQiLCJvcCIsIkdhdGV3YXlPcGNvZGVzIiwiSWRlbnRpZnkiLCJkIiwidG9rZW4iLCJwcm9wZXJ0aWVzIiwiaW50ZW50cyIsInNoYXJkIiwidG90YWxTaGFyZHMiLCJwcmVzZW5jZSIsInJlc3VtZSIsIlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uIiwic2Vzc2lvbklkIiwiUmVzdW1lIiwic2Vzc2lvbl9pZCIsInNlcSIsIm1lc3NhZ2UiLCJhY3F1aXJlIiwic3RyaW5naWZ5Iiwic2h1dGRvd24iLCJTaHV0ZG93biIsInN0b3BIZWFydGJlYXRpbmciLCJUZXN0aW5nRmluaXNoZWQiLCJkaXNjb25uZWN0ZWQiLCJSZXNoYXJkZWQiLCJEaXNjb25uZWN0ZWQiLCJBdXRoZW50aWNhdGlvbkZhaWxlZCIsIkludmFsaWRTaGFyZCIsIlNoYXJkaW5nUmVxdWlyZWQiLCJJbnZhbGlkQXBpVmVyc2lvbiIsIkludmFsaWRJbnRlbnRzIiwiRGlzYWxsb3dlZEludGVudHMiLCJFcnJvciIsIk5vdEF1dGhlbnRpY2F0ZWQiLCJJbnZhbGlkU2VxIiwiU2Vzc2lvblRpbWVkT3V0IiwiVW5rbm93bkVycm9yIiwiVW5rbm93bk9wY29kZSIsIkRlY29kZUVycm9yIiwiUmF0ZUxpbWl0ZWQiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsImlzQ29tcHJlc3NlZCIsIkFycmF5QnVmZmVyIiwiQnVmZmVyIiwiZGVjb21wcmVzc1BhY2tldCIsImhhbmRsZURpc2NvcmRQYWNrZXQiLCJjb21wcmVzc2VkRGF0YSIsImZhdGFsIiwid3JpdGVQcm9taXNlIiwicmVqZWN0Iiwid3JpdGUiLCJlbmRzV2l0aE1hcmtlciIsImRlY29tcHJlc3Npb25Qcm9taXNlIiwiciIsImRlY29tcHJlc3NlZCIsImluZmxhdGVTeW5jIiwicGFja2V0IiwibGFzdEFjayIsIkRhdGUiLCJub3ciLCJIZWFydGJlYXQiLCJsYXN0QmVhdCIsImhlYXJ0YmVhdCIsIkhlbGxvIiwiaGVhcnRiZWF0X2ludGVydmFsIiwic3RhcnRIZWFydGJlYXRpbmciLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImhlbGxvIiwiSGVhcnRiZWF0QUNLIiwicnR0IiwiaGVhcnRiZWF0QWNrIiwiUmVjb25uZWN0IiwicmVxdWVzdGVkUmVjb25uZWN0IiwiSW52YWxpZFNlc3Npb24iLCJyZXN1bWFibGUiLCJpbnZhbGlkU2Vzc2lvbiIsImRlbGF5IiwiZmxvb3IiLCJyYW5kb20iLCJnZXQiLCJ0IiwiQ29ubmVjdGVkIiwicmVzdW1lZCIsImZvckVhY2giLCJsZW5ndGgiLCJwYXlsb2FkIiwicmVhZHkiLCJyZXN1bWVfZ2F0ZXdheV91cmwiLCJzIiwiZm9yd2FyZFRvQm90IiwiY2FtZWxpemUiLCJqaXR0ZXIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwiWm9tYmllZENvbm5lY3Rpb24iLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwiYnVmZmVyIiwibWFya2VyIiwiaSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUEwQmFBO2VBQUFBOztRQW16QmI7ZUFBQTs7OzRCQTcwQnVCOzBCQUM4RDt1QkFFOUI7dUJBQ0Y7MkRBRTNCO3dCQVNuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFUCxNQUFNQyxrQkFBa0IsSUFBSUMsV0FBVztJQUFDO0lBQUs7SUFBSztJQUFNO0NBQUs7QUFFN0QsSUFBSUM7QUFFSix3RUFBd0UsR0FDeEUsZUFBZUM7SUFDYixPQUFRRCxVQUFVLE1BQU0sbUVBQUEsUUFBTztBQUNqQztBQUVPLElBQUEsQUFBTUgsa0JBQU4sTUFBTUE7SUEyRFgsWUFBWUssT0FBMkIsQ0FBRTtRQXBEekMsMEhBQTBILFFBQzFIQyw4QkFBc0M7UUFDdEMsMENBQTBDLFFBQzFDQyx5QkFBd0M7UUFDeEMsNEVBQTRFLFFBQzVFQyx5QkFBaUM7UUFLakMsd0NBQXdDLFFBQ3hDQyxRQUFRQyxrQkFBVSxDQUFDQyxPQUFPO1FBQzFCLGlGQUFpRixRQUNqRkMsbUJBQTJCO1FBQzNCLHNDQUFzQyxRQUN0Q0MsU0FBc0IsQ0FBQztRQUN2QixtR0FBbUcsUUFDbkdDLG1CQUFtQyxFQUFFO1FBQ3JDLGlGQUFpRixRQUNqRkMsV0FBVyxJQUFJQztRQUtmOzs7Ozs7OztHQVFDLFFBQ0RDLGVBQWU7UUFDZiwrQ0FBK0MsUUFDL0NDLGNBQWMsSUFBSUM7UUFHbEIseUJBQXlCLFFBQ3pCQyxnQkFBbUM7UUFHbkMsc0RBQXNELFFBQ3REQyw2QkFBd0UsRUFBRTtRQVV4RSxJQUFJLENBQUNDLEVBQUUsR0FBR2pCLFFB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
@@ -61,4 +61,4 @@ var ShardSocketCloseCodes = /*#__PURE__*/ function(ShardSocketCloseCodes) {
61
61
  return ShardSocketCloseCodes;
62
62
  }({});
63
63
 
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhbWVsaXplLCBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zcG9ydENvbXByZXNzaW9uIHtcbiAgLyoqXG4gICAqIFpMaWItU3RyZWFtIFRyYW5zcG9ydCBDb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVXNlcyBgbm9kZTp6bGliYCB0byBkZWNvbXByZXNzIHRoZSBwYXlsb2Fkc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3psaWJzdHJlYW1cbiAgICovXG4gIHpsaWIgPSAnemxpYi1zdHJlYW0nLFxuICAvKipcbiAgICogWlN0ZC1TdHJlYW0gVHJhbnNwb3J0IENvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIGBmenN0ZGAgdG8gZGVjb21wcmVzcyB0aGUgcGF5bG9hZHMuIGBmenN0ZGAgaXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeSwgaXQgaXMgcmVxdWlyZWQgdG8gYmUgaW5zdGFsbGVkIGZvciB0aGlzIGNvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3pzdGRzdHJlYW1cbiAgICovXG4gIHpzdGQgPSAnenN0ZC1zdHJlYW0nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkR2F0ZXdheUNvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGF0ZXZlciB0byBlbmFibGUgUGF5bG9hZCBjb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBpcyBjb21wYXRpYmxlIHdpdGgge0BsaW5rIHRyYW5zcG9ydENvbXByZXNzaW9ufVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3BheWxvYWQtY29tcHJlc3Npb25cbiAgICovXG4gIGNvbXByZXNzOiBib29sZWFuXG4gIC8qKlxuICAgKiBXaGF0IFRyYW5zcG9ydCBDb21wcmVzc2lvbiBzaG91bGQgYmUgdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN0cmFuc3BvcnQtY29tcHJlc3Npb25cbiAgICovXG4gIHRyYW5zcG9ydENvbXByZXNzaW9uOiBUcmFuc3BvcnRDb21wcmVzc2lvbiB8IG51bGxcbiAgLyoqIFRoZSBjYWxjdWxhdGVkIGludGVudCB2YWx1ZSBvZiB0aGUgZXZlbnRzIHdoaWNoIHRoZSBzaGFyZCBzaG91bGQgcmVjZWl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW50ZW50czogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdGhlIHNoYXJkIHJ1bnMgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImRhcndpblwiIHwgXCJsaW51eFwiIHwgXCJ3aW5kb3dzXCJcbiAgICAgKi9cbiAgICBvczogc3RyaW5nXG4gICAgLyoqIFRoZSBcImJyb3dzZXJcIiB3aGVyZSB0aGlzIHNoYXJkIGlzIHJ1bm5pbmcgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGJyb3dzZXI6IHN0cmluZ1xuICAgIC8qKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBzaGFyZCBpcyBydW5uaW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBkZXZpY2U6IHN0cmluZ1xuICB9XG4gIC8qKiBCb3QgdG9rZW4gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQgKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKiogVGhlIFVSTCBvZiB0aGUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIndzczovL2dhdGV3YXkuZGlzY29yZC5nZ1wiXG4gICAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIGdhdGV3YXkgdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb246IG51bWJlclxuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBzaGFyZHMgdG8gY29ubmVjdCB0byBhY3Jvc3MgdGhlIGVudGlyZSBib3QuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEhlYXJ0IHtcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBoZWFydGJlYXQgd2FzIGFja25vd2xlZGdlZCBieSBEaXNjb3JkIGluIHRpbWUuICovXG4gIGFja25vd2xlZGdlZDogYm9vbGVhblxuICAvKiogSW50ZXJ2YWwgYmV0d2VlbiBoZWFydGJlYXRzIHJlcXVlc3RlZCBieSBEaXNjb3JkLiAqL1xuICBpbnRlcnZhbDogbnVtYmVyXG4gIC8qKiBJZCBvZiB0aGUgaW50ZXJ2YWwsIHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGhlYXJ0YmVhdHMuICovXG4gIGludGVydmFsSWQ/OiBOb2RlSlMuVGltZW91dFxuICAvKiogVW5peCAoaW4gbWlsbGlzZWNvbmRzKSB0aW1lc3RhbXAgd2hlbiB0aGUgbGFzdCBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZCBmcm9tIERpc2NvcmQuICovXG4gIGxhc3RBY2s/OiBudW1iZXJcbiAgLyoqIFVuaXggdGltZXN0YW1wIChpbiBtaWxsaXNlY29uZHMpIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IHdhcyBzZW50LiAqL1xuICBsYXN0QmVhdD86IG51bWJlclxuICAvKiogUm91bmQgdHJpcCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGZyb20gU2hhcmQgdG8gRGlzY29yZCBhbmQgYmFjay5cbiAgICogQ2FsY3VsYXRlZCB1c2luZyB0aGUgaGVhcnRiZWF0IHN5c3RlbS5cbiAgICogTm90ZTogdGhpcyB2YWx1ZSBpcyB1bmRlZmluZWQgdW50aWwgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIGhhcyBoYXBwZW5lZC5cbiAgICovXG4gIHJ0dD86IG51bWJlclxuICAvKiogSWQgb2YgdGhlIHRpbWVvdXQgd2hpY2ggaXMgdXNlZCBmb3Igc2VuZGluZyB0aGUgZmlyc3QgaGVhcnRiZWF0IHRvIERpc2NvcmQgc2luY2UgaXQncyBcInNwZWNpYWxcIi4gKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEV2ZW50cyB7XG4gIC8qKiBBIGhlYXJ0YmVhdCBoYXMgYmVlbiBzZW5kLiAqL1xuICBoZWFydGJlYXQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBBIGhlYXJ0YmVhdCBBQ0sgd2FzIHJlY2VpdmVkLiAqL1xuICBoZWFydGJlYXRBY2s/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBTaGFyZCBoYXMgcmVjZWl2ZWQgYSBIZWxsbyBwYXlsb2FkLiAqL1xuICBoZWxsbz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBTaGFyZHMgc2Vzc2lvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gKi9cbiAgaW52YWxpZFNlc3Npb24/OiAoc2hhcmQ6IFNoYXJkLCByZXN1bWFibGU6IGJvb2xlYW4pID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCBhIHJlc3VtZSBhY3Rpb24uICovXG4gIHJlc3VtaW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgcmVzdW1lZCBhbiBvbGQgc2Vzc2lvbi4gKi9cbiAgcmVzdW1lZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIERpc2NvcmQgaGFzIHJlcXVlc3RlZCB0aGUgU2hhcmQgdG8gcmVjb25uZWN0LiAqL1xuICByZXF1ZXN0ZWRSZWNvbm5lY3Q/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGlzIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gRGlzY29yZCdzIGdhdGV3YXkuICovXG4gIGRpc2Nvbm5lY3RlZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCB0byBpZGVudGlmeSBpdHNlbGYgdG8gRGlzY29yZC4gKi9cbiAgaWRlbnRpZnlpbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGlkZW50aWZpZWQgaXRzZWxmIHdpdGggRGlzY29yZC4gKi9cbiAgaWRlbnRpZmllZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgcmVjZWl2ZWQgYSBtZXNzYWdlIGZyb20gRGlzY29yZC4gKi9cbiAgbWVzc2FnZT86IChzaGFyZDogU2hhcmQsIHBheWxvYWQ6IENhbWVsaXplPERpc2NvcmRHYXRld2F5UGF5bG9hZD4pID0+IHVua25vd25cbn1cblxuZXhwb3J0IGVudW0gU2hhcmRTb2NrZXRDbG9zZUNvZGVzIHtcbiAgLyoqIEEgcmVndWxhciBTaGFyZCBzaHV0ZG93bi4gKi9cbiAgU2h1dGRvd24gPSAzMDAwLFxuICAvKiogQSByZXN1bWUgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24gPSAzMDI0LFxuICAvKipcbiAgICogRGlkIG5vdCByZWNlaXZlIGEgaGVhcnRiZWF0IEFDSyBpbiB0aW1lLlxuICAgKiBDbG9zaW5nIHRoZSBzaGFyZCBhbmQgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbi5cbiAgICovXG4gIFpvbWJpZWRDb25uZWN0aW9uID0gMzAxMCxcbiAgLyoqIERpc2NvcmRlbm8ncyBnYXRld2F5IHRlc3RzIGhhZSBiZWVuIGZpbmlzaGVkLCB0aGVyZWZvcmUgdGhlIFNoYXJkIGNhbiBiZSB0dXJuZWQgb2ZmLiAqL1xuICBUZXN0aW5nRmluaXNoZWQgPSAzMDY0LFxuICAvKiogU3BlY2lhbCBjbG9zZSBjb2RlIHJlc2VydmVkIGZvciBEaXNjb3JkZW5vJ3MgemVyby1kb3dudGltZSByZXNoYXJkaW5nIHN5c3RlbS4gKi9cbiAgUmVzaGFyZGVkID0gMzA2NSxcbiAgLyoqIFNoYXJkIGlzIHJlLWlkZW50aWZ5aW5nIHRoZXJlZm9yZSB0aGUgb2xkIGNvbm5lY3Rpb24gbmVlZHMgdG8gYmUgY2xvc2VkLiAqL1xuICBSZUlkZW50aWZ5aW5nID0gMzA2Nixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZFNvY2tldFJlcXVlc3Qge1xuICAvKiogVGhlIE9QLUNvZGUgZm9yIHRoZSBwYXlsb2FkIHRvIHNlbmQuICovXG4gIG9wOiBHYXRld2F5T3Bjb2Rlc1xuICAvKiogUGF5bG9hZCBkYXRhLiAqL1xuICBkOiB1bmtub3duXG59XG5cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN1cGRhdGUtdm9pY2Utc3RhdGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlVm9pY2VTdGF0ZSB7XG4gIC8qKiBpZCBvZiB0aGUgZ3VpbGQgKi9cbiAgZ3VpbGRJZDogc3RyaW5nXG4gIC8qKiBpZCBvZiB0aGUgdm9pY2UgY2hhbm5lbCBjbGllbnQgd2FudHMgdG8gam9pbiAobnVsbCBpZiBkaXNjb25uZWN0aW5nKSAqL1xuICBjaGFubmVsSWQ6IHN0cmluZyB8IG51bGxcbiAgLyoqIElzIHRoZSBjbGllbnQgbXV0ZWQgKi9cbiAgc2VsZk11dGU6IGJvb2xlYW5cbiAgLyoqIElzIHRoZSBjbGllbnQgZGVhZmVuZWQgKi9cbiAgc2VsZkRlYWY6IGJvb2xlYW5cbn1cbiJdLCJuYW1lcyI6WyJTaGFyZFNvY2tldENsb3NlQ29kZXMiLCJTaGFyZFN0YXRlIiwiVHJhbnNwb3J0Q29tcHJlc3Npb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBd0pZQTtlQUFBQTs7UUFySkFDO2VBQUFBOztRQWlCQUM7ZUFBQUE7OztBQWpCTCxJQUFBLEFBQUtELG9DQUFBQTtJQUNWLCtFQUErRTtJQUUvRSwySEFBMkg7SUFFM0gsdUVBQXVFO0lBRXZFLCtIQUErSDtJQUUvSCwwRUFBMEU7SUFFMUUsMERBQTBEO0lBRTFELGtIQUFrSDtXQWJ4R0E7O0FBaUJMLElBQUEsQUFBS0MsOENBQUFBO0lBQ1Y7Ozs7Ozs7R0FPQztJQUVEOzs7Ozs7O0dBT0M7V0FqQlNBOztBQW9JTCxJQUFBLEFBQUtGLCtDQUFBQTtJQUNWLDhCQUE4QjtJQUU5QixxRkFBcUY7SUFFckY7OztHQUdDO0lBRUQseUZBQXlGO0lBRXpGLGtGQUFrRjtJQUVsRiw2RUFBNkU7V0FkbkVBIn0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhbWVsaXplLCBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zcG9ydENvbXByZXNzaW9uIHtcbiAgLyoqXG4gICAqIFpMaWItU3RyZWFtIFRyYW5zcG9ydCBDb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVXNlcyBgbm9kZTp6bGliYCB0byBkZWNvbXByZXNzIHRoZSBwYXlsb2Fkc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3psaWJzdHJlYW1cbiAgICovXG4gIHpsaWIgPSAnemxpYi1zdHJlYW0nLFxuICAvKipcbiAgICogWlN0ZC1TdHJlYW0gVHJhbnNwb3J0IENvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIGBmenN0ZGAgdG8gZGVjb21wcmVzcyB0aGUgcGF5bG9hZHMuIGBmenN0ZGAgaXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeSwgaXQgaXMgcmVxdWlyZWQgdG8gYmUgaW5zdGFsbGVkIGZvciB0aGlzIGNvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3pzdGRzdHJlYW1cbiAgICovXG4gIHpzdGQgPSAnenN0ZC1zdHJlYW0nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkR2F0ZXdheUNvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGF0ZXZlciB0byBlbmFibGUgUGF5bG9hZCBjb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBpcyBjb21wYXRpYmxlIHdpdGgge0BsaW5rIHRyYW5zcG9ydENvbXByZXNzaW9ufVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3BheWxvYWQtY29tcHJlc3Npb25cbiAgICovXG4gIGNvbXByZXNzOiBib29sZWFuXG4gIC8qKlxuICAgKiBXaGF0IFRyYW5zcG9ydCBDb21wcmVzc2lvbiBzaG91bGQgYmUgdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN0cmFuc3BvcnQtY29tcHJlc3Npb25cbiAgICovXG4gIHRyYW5zcG9ydENvbXByZXNzaW9uOiBUcmFuc3BvcnRDb21wcmVzc2lvbiB8IG51bGxcbiAgLyoqIFRoZSBjYWxjdWxhdGVkIGludGVudCB2YWx1ZSBvZiB0aGUgZXZlbnRzIHdoaWNoIHRoZSBzaGFyZCBzaG91bGQgcmVjZWl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW50ZW50czogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdGhlIHNoYXJkIHJ1bnMgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImRhcndpblwiIHwgXCJsaW51eFwiIHwgXCJ3aW5kb3dzXCJcbiAgICAgKi9cbiAgICBvczogc3RyaW5nXG4gICAgLyoqIFRoZSBcImJyb3dzZXJcIiB3aGVyZSB0aGlzIHNoYXJkIGlzIHJ1bm5pbmcgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGJyb3dzZXI6IHN0cmluZ1xuICAgIC8qKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBzaGFyZCBpcyBydW5uaW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBkZXZpY2U6IHN0cmluZ1xuICB9XG4gIC8qKiBCb3QgdG9rZW4gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQgKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKiogVGhlIFVSTCBvZiB0aGUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIndzczovL2dhdGV3YXkuZGlzY29yZC5nZ1wiXG4gICAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIGdhdGV3YXkgdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb246IG51bWJlclxuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBzaGFyZHMgdG8gY29ubmVjdCB0byBhY3Jvc3MgdGhlIGVudGlyZSBib3QuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEhlYXJ0IHtcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBoZWFydGJlYXQgd2FzIGFja25vd2xlZGdlZCBieSBEaXNjb3JkIGluIHRpbWUuICovXG4gIGFja25vd2xlZGdlZDogYm9vbGVhblxuICAvKiogSW50ZXJ2YWwgYmV0d2VlbiBoZWFydGJlYXRzIHJlcXVlc3RlZCBieSBEaXNjb3JkLiAqL1xuICBpbnRlcnZhbDogbnVtYmVyXG4gIC8qKiBJZCBvZiB0aGUgaW50ZXJ2YWwsIHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGhlYXJ0YmVhdHMuICovXG4gIGludGVydmFsSWQ/OiBOb2RlSlMuVGltZW91dFxuICAvKiogVW5peCAoaW4gbWlsbGlzZWNvbmRzKSB0aW1lc3RhbXAgd2hlbiB0aGUgbGFzdCBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZCBmcm9tIERpc2NvcmQuICovXG4gIGxhc3RBY2s/OiBudW1iZXJcbiAgLyoqIFVuaXggdGltZXN0YW1wIChpbiBtaWxsaXNlY29uZHMpIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IHdhcyBzZW50LiAqL1xuICBsYXN0QmVhdD86IG51bWJlclxuICAvKiogUm91bmQgdHJpcCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGZyb20gU2hhcmQgdG8gRGlzY29yZCBhbmQgYmFjay5cbiAgICogQ2FsY3VsYXRlZCB1c2luZyB0aGUgaGVhcnRiZWF0IHN5c3RlbS5cbiAgICogTm90ZTogdGhpcyB2YWx1ZSBpcyB1bmRlZmluZWQgdW50aWwgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIGhhcyBoYXBwZW5lZC5cbiAgICovXG4gIHJ0dD86IG51bWJlclxuICAvKiogSWQgb2YgdGhlIHRpbWVvdXQgd2hpY2ggaXMgdXNlZCBmb3Igc2VuZGluZyB0aGUgZmlyc3QgaGVhcnRiZWF0IHRvIERpc2NvcmQgc2luY2UgaXQncyBcInNwZWNpYWxcIi4gKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEV2ZW50cyB7XG4gIC8qKiBBIGhlYXJ0YmVhdCBoYXMgYmVlbiBzZW5kLiAqL1xuICBoZWFydGJlYXQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBBIGhlYXJ0YmVhdCBBQ0sgd2FzIHJlY2VpdmVkLiAqL1xuICBoZWFydGJlYXRBY2s/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBTaGFyZCBoYXMgcmVjZWl2ZWQgYSBIZWxsbyBwYXlsb2FkLiAqL1xuICBoZWxsbz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBTaGFyZHMgc2Vzc2lvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gKi9cbiAgaW52YWxpZFNlc3Npb24/OiAoc2hhcmQ6IFNoYXJkLCByZXN1bWFibGU6IGJvb2xlYW4pID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCBhIHJlc3VtZSBhY3Rpb24uICovXG4gIHJlc3VtaW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgcmVzdW1lZCBhbiBvbGQgc2Vzc2lvbi4gKi9cbiAgcmVzdW1lZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIERpc2NvcmQgaGFzIHJlcXVlc3RlZCB0aGUgU2hhcmQgdG8gcmVjb25uZWN0LiAqL1xuICByZXF1ZXN0ZWRSZWNvbm5lY3Q/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGlzIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gRGlzY29yZCdzIGdhdGV3YXkuICovXG4gIGRpc2Nvbm5lY3RlZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCB0byBpZGVudGlmeSBpdHNlbGYgdG8gRGlzY29yZC4gKi9cbiAgaWRlbnRpZnlpbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGlkZW50aWZpZWQgaXRzZWxmIHdpdGggRGlzY29yZC4gKi9cbiAgcmVhZHk/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHJlY2VpdmVkIGEgbWVzc2FnZSBmcm9tIERpc2NvcmQuICovXG4gIG1lc3NhZ2U/OiAoc2hhcmQ6IFNoYXJkLCBwYXlsb2FkOiBDYW1lbGl6ZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQ+KSA9PiB1bmtub3duXG59XG5cbmV4cG9ydCBlbnVtIFNoYXJkU29ja2V0Q2xvc2VDb2RlcyB7XG4gIC8qKiBBIHJlZ3VsYXIgU2hhcmQgc2h1dGRvd24uICovXG4gIFNodXRkb3duID0gMzAwMCxcbiAgLyoqIEEgcmVzdW1lIGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlcmVmb3JlIHRoZSBvbGQgY29ubmVjdGlvbiBuZWVkcyB0byBiZSBjbG9zZWQuICovXG4gIFJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uID0gMzAyNCxcbiAgLyoqXG4gICAqIERpZCBub3QgcmVjZWl2ZSBhIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS5cbiAgICogQ2xvc2luZyB0aGUgc2hhcmQgYW5kIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24uXG4gICAqL1xuICBab21iaWVkQ29ubmVjdGlvbiA9IDMwMTAsXG4gIC8qKiBEaXNjb3JkZW5vJ3MgZ2F0ZXdheSB0ZXN0cyBoYWUgYmVlbiBmaW5pc2hlZCwgdGhlcmVmb3JlIHRoZSBTaGFyZCBjYW4gYmUgdHVybmVkIG9mZi4gKi9cbiAgVGVzdGluZ0ZpbmlzaGVkID0gMzA2NCxcbiAgLyoqIFNwZWNpYWwgY2xvc2UgY29kZSByZXNlcnZlZCBmb3IgRGlzY29yZGVubydzIHplcm8tZG93bnRpbWUgcmVzaGFyZGluZyBzeXN0ZW0uICovXG4gIFJlc2hhcmRlZCA9IDMwNjUsXG4gIC8qKiBTaGFyZCBpcyByZS1pZGVudGlmeWluZyB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVJZGVudGlmeWluZyA9IDMwNjYsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRTb2NrZXRSZXF1ZXN0IHtcbiAgLyoqIFRoZSBPUC1Db2RlIGZvciB0aGUgcGF5bG9hZCB0byBzZW5kLiAqL1xuICBvcDogR2F0ZXdheU9wY29kZXNcbiAgLyoqIFBheWxvYWQgZGF0YS4gKi9cbiAgZDogdW5rbm93blxufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVZvaWNlU3RhdGUge1xuICAvKiogaWQgb2YgdGhlIGd1aWxkICovXG4gIGd1aWxkSWQ6IHN0cmluZ1xuICAvKiogaWQgb2YgdGhlIHZvaWNlIGNoYW5uZWwgY2xpZW50IHdhbnRzIHRvIGpvaW4gKG51bGwgaWYgZGlzY29ubmVjdGluZykgKi9cbiAgY2hhbm5lbElkOiBzdHJpbmcgfCBudWxsXG4gIC8qKiBJcyB0aGUgY2xpZW50IG11dGVkICovXG4gIHNlbGZNdXRlOiBib29sZWFuXG4gIC8qKiBJcyB0aGUgY2xpZW50IGRlYWZlbmVkICovXG4gIHNlbGZEZWFmOiBib29sZWFuXG59XG4iXSwibmFtZXMiOlsiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIiwiU2hhcmRTdGF0ZSIsIlRyYW5zcG9ydENvbXByZXNzaW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQXdKWUE7ZUFBQUE7O1FBckpBQztlQUFBQTs7UUFpQkFDO2VBQUFBOzs7QUFqQkwsSUFBQSxBQUFLRCxvQ0FBQUE7SUFDViwrRUFBK0U7SUFFL0UsMkhBQTJIO0lBRTNILHVFQUF1RTtJQUV2RSwrSEFBK0g7SUFFL0gsMEVBQTBFO0lBRTFFLDBEQUEwRDtJQUUxRCxrSEFBa0g7V0FieEdBOztBQWlCTCxJQUFBLEFBQUtDLDhDQUFBQTtJQUNWOzs7Ozs7O0dBT0M7SUFFRDs7Ozs7OztHQU9DO1dBakJTQTs7QUFvSUwsSUFBQSxBQUFLRiwrQ0FBQUE7SUFDViw4QkFBOEI7SUFFOUIscUZBQXFGO0lBRXJGOzs7R0FHQztJQUVELHlGQUF5RjtJQUV6RixrRkFBa0Y7SUFFbEYsNkVBQTZFO1dBZG5FQSJ9
package/dist/esm/Shard.js CHANGED
@@ -212,7 +212,6 @@ export class DiscordenoShard {
212
212
  }, true);
213
213
  return await new Promise((resolve)=>{
214
214
  this.resolves.set('READY', ()=>{
215
- this.events.identified?.(this);
216
215
  resolve();
217
216
  });
218
217
  // When identifying too fast, Discord sends an invalid session payload.
@@ -511,6 +510,7 @@ export class DiscordenoShard {
511
510
  case 'READY':
512
511
  {
513
512
  const payload = packet.d;
513
+ this.events.ready?.(this);
514
514
  // Important for future resumes.
515
515
  this.resumeGatewayUrl = payload.resume_gateway_url;
516
516
  this.sessionId = payload.session_id;
@@ -624,4 +624,4 @@ export class DiscordenoShard {
624
624
  }
625
625
  export default DiscordenoShard;
626
626
 
627
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcidcbmltcG9ydCB7IGNyZWF0ZUluZmxhdGUsIHR5cGUgSW5mbGF0ZSwgaW5mbGF0ZVN5bmMsIGNvbnN0YW50cyBhcyB6bGliQ29uc3RhbnRzIH0gZnJvbSAnbm9kZTp6bGliJ1xuaW1wb3J0IHR5cGUgeyBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIERpc2NvcmRIZWxsbywgRGlzY29yZFJlYWR5LCBEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBjYW1lbGl6ZSwgZGVsYXksIExlYWt5QnVja2V0LCBsb2dnZXIgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB0eXBlIHsgRGVjb21wcmVzcyBhcyBac3RkRGVjb21wcmVzcyB9IGZyb20gJ2Z6c3RkJ1xuaW1wb3J0IE5vZGVXZWJTb2NrZXQgZnJvbSAnd3MnXG5pbXBvcnQge1xuICB0eXBlIFNoYXJkRXZlbnRzLFxuICB0eXBlIFNoYXJkR2F0ZXdheUNvbmZpZyxcbiAgdHlwZSBTaGFyZEhlYXJ0LFxuICBTaGFyZFNvY2tldENsb3NlQ29kZXMsXG4gIHR5cGUgU2hhcmRTb2NrZXRSZXF1ZXN0LFxuICBTaGFyZFN0YXRlLFxuICBUcmFuc3BvcnRDb21wcmVzc2lvbixcbn0gZnJvbSAnLi90eXBlcy5qcydcblxuY29uc3QgWkxJQl9TWU5DX0ZMVVNIID0gbmV3IFVpbnQ4QXJyYXkoWzB4MCwgMHgwLCAweGZmLCAweGZmXSlcblxubGV0IGZ6c3RkOiB0eXBlb2YgaW1wb3J0KCdmenN0ZCcpXG5cbi8qKiBTaW5jZSBmenN0ZCBpcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5LCB3ZSBuZWVkIHRvIGltcG9ydCBpdCBsYXppbHkuICovXG5hc3luYyBmdW5jdGlvbiBnZXRGWlN0ZCgpIHtcbiAgcmV0dXJuIChmenN0ZCA/Pz0gYXdhaXQgaW1wb3J0KCdmenN0ZCcpKVxufVxuXG5leHBvcnQgY2xhc3MgRGlzY29yZGVub1NoYXJkIHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgc2hhcmQuICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGNvbmZpZyBkZXRhaWxzIHRoYXQgdGhpcyBzaGFyZCB3aWxsIHVzZWQgdG8gY29ubmVjdCB0byBkaXNjb3JkLiAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoaXMgY29udGFpbnMgYWxsIHRoZSBoZWFydGJlYXQgaW5mb3JtYXRpb24gKi9cbiAgaGVhcnQ6IFNoYXJkSGVhcnRcbiAgLyoqIFRoZSBtYXhpbXVtIG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBiZSBzZW5kIHRvIGRpc2NvcmQgcGVyIHJhdGUgbGltaXQgdGljay4gVHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqL1xuICBtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2s6IG51bWJlciA9IDEyMFxuICAvKiogVGhlIHByZXZpb3VzIHBheWxvYWQgc2VxdWVuY2UgbnVtYmVyLiAqL1xuICBwcmV2aW91c1NlcXVlbmNlTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAvKiogSW4gd2hpY2ggaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgdGhlIGdhdGV3YXkgcmVzZXRzIGl0J3MgcmF0ZSBsaW1pdC4gKi9cbiAgcmF0ZUxpbWl0UmVzZXRJbnRlcnZhbDogbnVtYmVyID0gNjAwMDBcbiAgLyoqIEN1cnJlbnQgc2Vzc2lvbiBpZCBvZiB0aGUgc2hhcmQgaWYgcHJlc2VudC4gKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nXG4gIC8qKiBUaGlzIGNvbnRhaW5zIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB0byBEaXNjb3JkLCBpZiBjdXJyZW50bHkgY29ubmVjdGVkLiAqL1xuICBzb2NrZXQ/OiBXZWJTb2NrZXRcbiAgLyoqIEN1cnJlbnQgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHRoaXMuICovXG4gIHN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIC8qKiBUaGUgdXJsIHByb3ZpZGVkIGJ5IGRpc2NvcmQgdG8gdXNlIHdoZW4gcmVzdW1pbmcgYSBjb25uZWN0aW9uIGZvciB0aGlzIHRoaXMuICovXG4gIHJlc3VtZUdhdGV3YXlVcmw6IHN0cmluZyA9ICcnXG4gIC8qKiBUaGUgc2hhcmQgcmVsYXRlZCBldmVudCBoYW5kbGVycy4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50cyA9IHt9XG4gIC8qKiBDYWNoZSBmb3IgcGVuZGluZyBnYXRld2F5IHJlcXVlc3RzIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gc2VuZCB3aGlsZSB0aGUgZ2F0ZXdheSB3ZW50IG9mZmxpbmUuICovXG4gIG9mZmxpbmVTZW5kUXVldWU6ICgoKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqIFJlc29sdmUgaW50ZXJuYWwgd2FpdGluZyBzdGF0ZXMuIE1hcHBlZCBieSBTZWxlY3RlZEV2ZW50cyA9PiBSZXNvbHZlRnVuY3Rpb24gKi9cbiAgcmVzb2x2ZXMgPSBuZXcgTWFwPCdSRUFEWScgfCAnUkVTVU1FRCcgfCAnSU5WQUxJRF9TRVNTSU9OJywgKHBheWxvYWQ6IERpc2NvcmRHYXRld2F5UGF5bG9hZCkgPT4gdm9pZD4oKVxuICAvKiogU2hhcmQgYnVja2V0LiBPbmx5IGFjY2VzcyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gQnVja2V0IGZvciBoYW5kbGluZyBzaGFyZCByZXF1ZXN0IHJhdGUgbGltaXRzLiAqL1xuICBidWNrZXQ6IExlYWt5QnVja2V0XG4gIC8qKiBMb2dnZXIgZm9yIHRoZSBidWNrZXQuICovXG4gIGxvZ2dlcjogUGljazx0eXBlb2YgbG9nZ2VyLCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdmYXRhbCc+XG4gIC8qKlxuICAgKiBJcyB0aGUgc2hhcmQgZ29pbmcgb2ZmbGluZT9cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyB3aWxsIGJlIHRydWUgaWYgdGhlIGNsb3NlIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBlaXRoZXIgMTAwMCBvciAxMDAxXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgZ29pbmdPZmZsaW5lID0gZmFsc2VcbiAgLyoqIFRleHQgZGVjb2RlciB1c2VkIGZvciBjb21wcmVzc2VkIHBheWxvYWRzLiAqL1xuICB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIC8qKiBaTGliIEluZmxhdGUgaW5zdGFuY2UgZm9yIFpMaWItc3RyZWFtIHRyYW5zcG9ydCBwYXlsb2Fkcy4gKi9cbiAgaW5mbGF0ZT86IEluZmxhdGVcbiAgLyoqIFpMaWIgaW5mbGF0ZSBidWZmZXIuICovXG4gIGluZmxhdGVCdWZmZXI6IFVpbnQ4QXJyYXkgfCBudWxsID0gbnVsbFxuICAvKiogWlN0ZCBEZWNvbXByZXNzIGluc3RhbmNlIGZvciBaU3RkLXN0cmVhbSB0cmFuc3BvcnQgcGF5bG9hZHMuICovXG4gIHpzdGREZWNvbXByZXNzPzogWnN0ZERlY29tcHJlc3NcbiAgLyoqIFF1ZXVlIGZvciBjb21wcmVzc2VkIHBheWxvYWRzIGZvciBac3RkIERlY29tcHJlc3MgKi9cbiAgZGVjb21wcmVzc2lvblByb21pc2VzUXVldWU6ICgoZGF0YTogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGFuZCBoYW5kbGVDbG9zZSgpIGhhcyBmaW5pc2hlZCB1cGRhdGluZyBpbnRlcm5hbCBzdGF0ZXMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgcmVzb2x2ZUFmdGVyQ2xvc2U/OiAoY2xvc2U6IENsb3NlRXZlbnQpID0+IHZvaWRcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFyZENyZWF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZFxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG9wdGlvbnMuY29ubmVjdGlvblxuICAgIHRoaXMuZXZlbnRzID0gb3B0aW9ucy5ldmVudHNcbiAgICB0aGlzLmxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlclxuXG4gICAgdGhpcy5oZWFydCA9IHtcbiAgICAgIGFja25vd2xlZGdlZDogZmFsc2UsXG4gICAgICBpbnRlcnZhbDogNDUwMDAsXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdElkZW50aWZ5KSB0aGlzLnJlcXVlc3RJZGVudGlmeSA9IG9wdGlvbnMucmVxdWVzdElkZW50aWZ5XG4gICAgaWYgKG9wdGlvbnMubWFrZVByZXNlbmNlKSB0aGlzLm1ha2VQcmVzZW5jZSA9IG9wdGlvbnMubWFrZVByZXNlbmNlXG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBMZWFreUJ1Y2tldCh7XG4gICAgICBtYXg6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxBbW91bnQ6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH0pXG4gIH1cblxuICAvKiogVGhlIGdhdGV3YXkgY29uZmlndXJhdGlvbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZC4gKi9cbiAgZ2V0IGdhdGV3YXlDb25maWcoKTogU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uXG4gIH1cblxuICAvKiogVGhlIHVybCB0byBjb25uZWN0IHRvLiBJbml0aWFsbHkgdGhpcyBpcyB0aGUgZGlzY29yZCBnYXRld2F5IHVybCwgYW5kIHRoZW4gaXMgc3dpdGNoZWQgdG8gcmVzdW1lIGdhdGV3YXkgdXJsIG9uY2UgYSBSRUFEWSBpcyByZWNlaXZlZC4gKi9cbiAgZ2V0IGNvbm5lY3Rpb25VcmwoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgfHwgYW5kIG5vdCA/PyBoZXJlLiA/PyB3aWxsIGNhdXNlIGEgYnVnLlxuICAgIHJldHVybiB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgfHwgdGhpcy5nYXRld2F5Q29uZmlnLnVybFxuICB9XG5cbiAgLyoqIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBzYWZlbHkgYmUgbWFkZSBwZXIgcmF0ZSBsaW1pdCBpbnRlcnZhbCwgYmVmb3JlIHRoZSBnYXRld2F5IGdldHMgZGlzY29ubmVjdGVkIGR1ZSB0byBhbiBleGNlZWRlZCByYXRlIGxpbWl0LiAqL1xuICBjYWxjdWxhdGVTYWZlUmVxdWVzdHMoKTogbnVtYmVyIHtcbiAgICAvLyAqIDIgYWRkcyBleHRyYSBzYWZldHkgbGF5ZXIgZm9yIGRpc2NvcmRzIE9QIDEgcmVxdWVzdHMgdGhhdCB3ZSBuZWVkIHRvIHJlc3BvbmQgdG9cbiAgICBjb25zdCBzYWZlUmVxdWVzdHMgPSB0aGlzLm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayAtIE1hdGguY2VpbCh0aGlzLnJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwgLyB0aGlzLmhlYXJ0LmludGVydmFsKSAqIDJcblxuICAgIHJldHVybiBzYWZlUmVxdWVzdHMgPCAwID8gMCA6IHNhZmVSZXF1ZXN0c1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgLy8gSGlnaGVyIHByaW9yaXR5IHJlcXVlc3RzIGdldCBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS5cbiAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICBlbHNlIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5wdXNoKHJlc29sdmUpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgc29ja2V0IGNvbm5lY3Rpb24gdG8gZGlzY29yZCBpZiBwcmVzZW50LiAqL1xuICBhc3luYyBjbG9zZShjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVxdWVzdCBmb3IgU2hhcmQgIyR7dGhpcy5pZH0gdG8gY2xvc2UgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgaWYgKHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlICE9PSBOb2RlV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9J3MgcmVhZHkgc3RhdGUgaXMgJHt0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZX0sIFVuYWJsZSB0byBjbG9zZS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5nb2luZ09mZmxpbmUgPSBjb2RlID09PSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vcm1hbENsb3N1cmUgfHwgY29kZSA9PT0gR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Hb2luZ0F3YXlcblxuICAgIC8vIFRoaXMgaGFzIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbCB0byBzb2NrZXQuY2xvc2UgYXMgZm9yIGV4YW1wbGUgQnVuIGNhbGxzIHNvY2tldC5vbmNsb3NlIGltbWVkaWF0ZWx5IG9uIHRoZSAuY2xvc2UoKSBjYWxsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gZW5kXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlID0gcmVzb2x2ZVxuICAgIH0pXG5cbiAgICB0aGlzLnNvY2tldC5jbG9zZShjb2RlLCByZWFzb24pXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBXYWl0aW5nIGZvciBTaGFyZCAjJHt0aGlzLmlkfSB0byBjbG9zZSB0aGUgc29ja2V0IHdpdGggY29kZSAke2NvZGV9LmApXG5cbiAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgZnVsbHkgY2xvc2VkLCBvdGhlcndpc2UgdGhlcmUnbGwgYmUgcmFjZSBjb25kaXRpb24gaXNzdWVzIGlmIHdlIHRyeSB0byBjb25uZWN0IGFnYWluLCByZXN1bHRpbmcgaW4gdW5leHBlY3RlZCBiZWhhdmlvci5cbiAgICBhd2FpdCBwcm9taXNlXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgLy8gUmVzZXQgdGhlIHJlc29sdmVBZnRlckNsb3NlIGZ1bmN0aW9uIGFmdGVyIGl0IGhhcyBiZWVuIHJlc29sdmVkLlxuICAgIHRoaXMucmVzb2x2ZUFmdGVyQ2xvc2UgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8RGlzY29yZGVub1NoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gQ29ubmVjdGluZyBTaGFyZCAjJHt0aGlzLmlkfSBzb2NrZXQuYClcblxuICAgIHRoaXMuZXZlbnRzLmNvbm5lY3Rpbmc/Lih0aGlzKVxuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmNvbm5lY3Rpb25VcmwpXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCB0aGlzLmdhdGV3YXlDb25maWcudmVyc2lvbi50b1N0cmluZygpKVxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdlbmNvZGluZycsICdqc29uJylcblxuICAgIC8vIFNldCB0aGUgY29tcHJlc3MgdXJsIHBhcmFtIGFuZCBpbml0aWFsaXplIHRoZSBkZWNvbXByZXNzaW9uIGNvbnRleHRzXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbikge1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvbXByZXNzJywgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56bGliKSB7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcbiAgICAgICAgdGhpcy5pbmZsYXRlID0gY3JlYXRlSW5mbGF0ZSh7XG4gICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWJDb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgIGNodW5rU2l6ZTogNjQgKiAxMDI0LFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdUaGUgd2FzIGFuIGVycm9yIGluIGRlY29tcHJlc3NpbmcgYSBaTGliIGNvbXByZXNzZWQgcGF5bG9hZCcsIGUpXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5pbmZsYXRlLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHJldHVyblxuXG4gICAgICAgICAgaWYgKHRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGggKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICBuZXdCdWZmZXIuc2V0KHRoaXMuaW5mbGF0ZUJ1ZmZlcilcbiAgICAgICAgICAgIG5ld0J1ZmZlci5zZXQoZGF0YSwgdGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBuZXdCdWZmZXJcblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gZGF0YVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56c3RkKSB7XG4gICAgICAgIGNvbnN0IGZ6c3RkID0gYXdhaXQgZ2V0RlpTdGQoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBcImZ6c3RkXCIgaXMgbm90IGluc3RhbGxlZC4gRGlzYWJsZWQgdHJhbnNwb3J0IGNvbXByZXNzaW9uLicpXG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ2NvbXByZXNzJylcblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGZ6c3RkKSB7XG4gICAgICAgICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IG5ldyBmenN0ZC5EZWNvbXByZXNzKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKGRhdGEpXG4gICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICAgICAgICAgIHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUuc2hpZnQoKT8uKHBhcnNlZERhdGEpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MgJiYgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFBheWxvYWQgY29tcHJlc3Npb24gaGFzIGJlZW4gZGlzYWJsZWQgc2luY2UgdHJhbnNwb3J0IGNvbXByZXNzaW9uIGlzIGVuYWJsZWQgYXMgd2VsbC4nKVxuICAgICAgdGhpcy5nYXRld2F5Q29uZmlnLmNvbXByZXNzID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBXZSBjaGVjayBmb3IgYnVpbHQtaW4gV2ViU29ja2V0IGltcGxlbWVudGF0aW9ucyBpbiBCdW4gb3IgRGVubywgTm9kZUpTIHYyMiBoYXMgYW4gaW1wbGVtZW50YXRpb24gdG9vIGJ1dCBpdCBzZWVtcyB0byBiZSBsZXNzIG9wdGltaXplZCBzbyBmb3Igbm93IGl0IGlzIGJldHRlciB0byB1c2UgdGhlIHdzIG5wbSBwYWNrYWdlXG4gICAgY29uc3Qgc2hvdWxkVXNlQnVpbHRpbiA9IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdXZWJTb2NrZXQnKSAmJiAoUmVmbGVjdC5oYXMoZ2xvYmFsVGhpcywgJ0J1bicpIHx8IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdEZW5vJykpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVXZWJTb2NrZXQgZG9lc24ndCBzdXBwb3J0IFwiZGlzcGF0Y2hFdmVudFwiLCBhbmQgd2hpbGUgd2UgZG9uJ3QgdXNlIGl0LCBpdCBpcyByZXF1aXJlZCBvbiB0aGUgXCJXZWJTb2NrZXRcIiB0eXBlXG4gICAgY29uc3Qgc29ja2V0OiBXZWJTb2NrZXQgPSBzaG91bGRVc2VCdWlsdGluID8gbmV3IFdlYlNvY2tldCh1cmwpIDogbmV3IE5vZGVXZWJTb2NrZXQodXJsKVxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG5cbiAgICAvLyBCeSBkZWZhdWx0IFdlYlNvY2tldCB3aWxsIGdpdmUgdXMgYSBCbG9iLCB0aGlzIGNoYW5nZXMgaXQgc28gdGhhdCBpdCBnaXZlcyB1cyBhbiBBcnJheUJ1ZmZlclxuICAgIHNvY2tldC5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJ1xuXG4gICAgc29ja2V0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXZlbnQpXG4gICAgc29ja2V0Lm9uY2xvc2UgPSAoY2xvc2VFdmVudCkgPT4gdGhpcy5oYW5kbGVDbG9zZShjbG9zZUV2ZW50KVxuICAgIHNvY2tldC5vbm1lc3NhZ2UgPSAobWVzc2FnZUV2ZW50KSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UobWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQgdG8gYFVuaWRlbnRpZmllZGAgc3RhdGUgaWYgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkb2VzIG5vdCBjb21lIGZyb20gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgaWYgKCFbU2hhcmRTdGF0ZS5JZGVudGlmeWluZywgU2hhcmRTdGF0ZS5SZXN1bWluZ10uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHNvY2tldCBjb25uZWN0ZWQuYClcblxuICAgICAgICB0aGlzLmV2ZW50cy5jb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJlc29sdmUodGhpcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZ5IHRoZSBzaGFyZCB0byB0aGUgZ2F0ZXdheS4gSWYgbm90IGNvbm5lY3RlZCwgdGhpcyB3aWxsIGFsc28gY29ubmVjdCB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuXG4gICAqIEBwYXJhbSBieXBhc3NSZXF1ZXN0IC0gV2hldGhlciB0byBieXBhc3MgdGhlIHJlcXVlc3RJZGVudGlmeSBoYW5kbGVyIGFuZCBpZGVudGlmeSBpbW1lZGlhdGVseS4gVGhpcyBzaG91bGQgYmUgdXNlZCBjYXJlZnVsbHkgYXMgaXQgY2FuIGNhdXNlIGludmFsaWQgc2Vzc2lvbnMuXG4gICAqL1xuICBhc3luYyBpZGVudGlmeShieXBhc3NSZXF1ZXN0ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIG5ldyBpZGVudGlmeSBoYXMgYmVlbiByZXF1ZXN0ZWQgZXZlbiB0aG91Z2ggdGhlcmUgaXMgYWxyZWFkeSBhIGNvbm5lY3Rpb24gb3Blbi5cbiAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBjbG9zZSB0aGUgb2xkIGNvbm5lY3Rpb24gYW5kIGhlYXJ0YmVhdGluZyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBJZGVudGlmeWluZyBvcGVuIFNoYXJkICMke3RoaXMuaWR9LCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uYClcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKCFieXBhc3NSZXF1ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RJZGVudGlmeSgpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2VuZGluZyBJZGVudGlmeSBwYXlsb2FkIGZvciBTaGFyZCAjJHt0aGlzLmlkfS5gKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZSgpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVBRFknLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnRzLmlkZW50aWZpZWQ/Lih0aGlzKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0pXG4gICAgICAvLyBXaGVuIGlkZW50aWZ5aW5nIHRvbyBmYXN0LCBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkLlxuICAgICAgLy8gVGhpcyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgdGhvdWdoIGFuZCB0aGUgc2hhcmQgc3RhcnRzIGEgbmV3IGlkZW50aWZ5IGFjdGlvbi5cbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIENoZWNrIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdG8gRGlzY29yZCBpcyBjdXJyZW50bHkgb3Blbi4gKi9cbiAgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZSA9PT0gTm9kZVdlYlNvY2tldC5PUEVOXG4gIH1cblxuICAvKiogQXR0ZW1wdCB0byByZXN1bWUgdGhlIHByZXZpb3VzIHNoYXJkcyBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZXN1bWluZyBTaGFyZCAjJHt0aGlzLmlkfWApXG5cbiAgICAvLyBJdCBoYXMgYmVlbiByZXF1ZXN0ZWQgdG8gcmVzdW1lIHRoZSBTaGFyZHMgc2Vzc2lvbi5cbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHNoYXJkIGlzIHN0aWxsIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5IHRoZXJlZm9yZSB3ZSBuZWVkIHRvIGZvcmNlZnVsbHkgY2xvc2UgaXQuXG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIG9wZW4gU2hhcmQgIyR7dGhpcy5pZH0sIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb25gKVxuICAgICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24sICdSZWNvbm5lY3RpbmcgdGhlIHNoYXJkLCBjbG9zaW5nIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgLy8gU2hhcmQgaGFzIG5ldmVyIGlkZW50aWZpZWQsIHNvIHdlIGNhbm5vdCByZXN1bWUuXG4gICAgaWYgKCF0aGlzLnNlc3Npb25JZCkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gVHJ5aW5nIHRvIHJlc3VtZSBTaGFyZCAjJHt0aGlzLmlkfSB3aXRob3V0IHRoZSBzZXNzaW9uIGlkLiBJZGVudGlmeWluZyB0aGUgc2hhcmQgaW5zdGVhZC5gKVxuXG4gICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlJlc3VtaW5nXG5cbiAgICAvLyBCZWZvcmUgd2UgY2FuIHJlc3VtZSwgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiB3aXRoIERpc2NvcmQncyBnYXRld2F5LlxuICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZXN1bWluZyBTaGFyZCAjJHt0aGlzLmlkfSBjb25uZWN0ZWQuIFNlc3Npb24gaWQ6ICR7dGhpcy5zZXNzaW9uSWR9IHwgU2VxdWVuY2U6ICR7dGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyfWApXG5cbiAgICB0aGlzLnNlbmQoXG4gICAgICB7XG4gICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5SZXN1bWUsXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIHNlc3Npb25faWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgIHNlcTogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyID8/IDAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICApXG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdSRVNVTUVEJywgKCkgPT4gcmVzb2x2ZSgpKVxuXG4gICAgICAvLyBJZiBpdCBpcyBhdHRlbXB0ZWQgdG8gcmVzdW1lIHdpdGggYW4gaW52YWxpZCBzZXNzaW9uIGlkLCBEaXNjb3JkIHNlbmRzIGFuIGludmFsaWQgc2Vzc2lvbiBwYXlsb2FkXG4gICAgICAvLyBOb3QgZXJyb3JpbmcgaGVyZSBzaW5jZSBpdCBpcyBlYXN5IHRoYXQgdGhpcyBoYXBwZW5zLCBhbHNvIGl0IHdvdWxkIGJlIG5vdCBjYXRjaGFibGVcbiAgICAgIHRoaXMucmVzb2x2ZXMuc2V0KCdJTlZBTElEX1NFU1NJT04nLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRVNVTUVEJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIG1lc3NhZ2UgdG8gRGlzY29yZC5cbiAgICogQHBhcmFtIGhpZ2hQcmlvcml0eSAtIFdoZXRoZXIgdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBzZW5kIGFzYXAuXG4gICAqL1xuICBhc3luYyBzZW5kKG1lc3NhZ2U6IFNoYXJkU29ja2V0UmVxdWVzdCwgaGlnaFByaW9yaXR5OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBCZWZvcmUgYWNxdWlyaW5nIGEgdG9rZW4gZnJvbSB0aGUgYnVja2V0LCBjaGVjayB3aGV0aGVyIHRoZSBzaGFyZCBpcyBjdXJyZW50bHkgb2ZmbGluZSBvciBub3QuXG4gICAgLy8gRWxzZSBidWNrZXQgYW5kIHRva2VuIHdhaXQgdGltZSBqdXN0IGdldCB3YXN0ZWQuXG4gICAgYXdhaXQgdGhpcy5jaGVja09mZmxpbmUoaGlnaFByaW9yaXR5KVxuXG4gICAgYXdhaXQgdGhpcy5idWNrZXQuYWNxdWlyZShoaWdoUHJpb3JpdHkpXG5cbiAgICAvLyBJdCdzIHBvc3NpYmxlLCB0aGF0IHRoZSBzaGFyZCB3ZW50IG9mZmxpbmUgYWZ0ZXIgYSB0b2tlbiBoYXMgYmVlbiBhY3F1aXJlZCBmcm9tIHRoZSBidWNrZXQuXG4gICAgYXdhaXQgdGhpcy5jaGVja09mZmxpbmUoaGlnaFByaW9yaXR5KVxuXG4gICAgdGhpcy5zb2NrZXQ/LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXG4gIH1cblxuICAvKiogU2h1dGRvd24gdGhlIHRoaXMuIEZvcmNlZnVsbHkgZGlzY29ubmVjdCB0aGUgc2hhcmQgZnJvbSBEaXNjb3JkLiBUaGUgc2hhcmQgbWF5IG5vdCBhdHRlbXB0IHRvIHJlY29ubmVjdCB3aXRoIERpc2NvcmQuICovXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlNodXRkb3duLCAnU2hhcmQgc2h1dHRpbmcgZG93bi4nKVxuICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgfVxuXG4gIC8qKiBIYW5kbGUgYSBnYXRld2F5IGNvbm5lY3Rpb24gZXJyb3IgKi9cbiAgaGFuZGxlRXJyb3IoZXJyb3I6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IoYFtTaGFyZF0gVGhlcmUgd2FzIGFuIGVycm9yIGNvbm5lY3RpbmcgU2hhcmQgIyR7dGhpcy5pZH0uYCwgZXJyb3IpXG4gIH1cblxuICAvKiogSGFuZGxlIGEgZ2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlLiAqL1xuICBhc3luYyBoYW5kbGVDbG9zZShjbG9zZTogQ2xvc2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc29ja2V0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5zdG9wSGVhcnRiZWF0aW5nKClcblxuICAgIC8vIENsZWFyIHRoZSB6bGliL3pzdGQgZGF0YVxuICAgIHRoaXMuaW5mbGF0ZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuenN0ZERlY29tcHJlc3MgPSB1bmRlZmluZWRcbiAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBudWxsXG4gICAgdGhpcy5kZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZSA9IFtdXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgd2l0aCBjb2RlICR7Y2xvc2UuY29kZX0ke2Nsb3NlLnJlYXNvbiA/IGAsIGFuZCByZWFzb246ICR7Y2xvc2UucmVhc29ufWAgOiAnJ30uYClcblxuICAgIC8vIFJlc29sdmUgdGhlIGNsb3NlIHByb21pc2UgaWYgaXQgZXhpc3RzXG4gICAgdGhpcy5yZXNvbHZlQWZ0ZXJDbG9zZT8uKGNsb3NlKVxuXG4gICAgc3dpdGNoIChjbG9zZS5jb2RlKSB7XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5UZXN0aW5nRmluaXNoZWQ6IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gT24gdGhlc2UgY29kZXMgYSBtYW51YWwgc3RhcnQgd2lsbCBiZSBkb25lLlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd246XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZUlkZW50aWZ5aW5nOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzaGFyZGVkOlxuICAgICAgY2FzZSBTaGFyZFNvY2tldENsb3NlQ29kZXMuUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb246IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuRGlzY29ubmVjdGVkXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBXaGVuIHRoZXNlIGNvZGVzIGFyZSByZWNlaXZlZCBzb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcuXG4gICAgICAvLyBPbiB0aG9zZSB3ZSBjYW5ub3Qgc3RhcnQgYSByZWNvbm5lY3QgYXR0ZW1wdC5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5BdXRoZW50aWNhdGlvbkZhaWxlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2hhcmQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2hhcmRpbmdSZXF1aXJlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkQXBpVmVyc2lvbjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkSW50ZW50czpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5EaXNhbGxvd2VkSW50ZW50czoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGNsb3NlLnJlYXNvbiB8fCAnRGlzY29yZCBnYXZlIG5vIHJlYXNvbiEgR0chIFlvdSBicm9rZSBEaXNjb3JkIScpXG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIHdoaWNoIHJlcXVpcmUgYSBuZXcgaWRlbnRpZnkuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuTm90QXV0aGVudGljYXRlZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5JbnZhbGlkU2VxOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlNlc3Npb25UaW1lZE91dDoge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgcmVxdWlyaW5nIHJlLWlkZW50aWZ5LmApXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLklkZW50aWZ5aW5nXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgLy8gTk9URTogVGhpcyBjYXNlIG11c3QgYWx3YXlzIGJlIHJpZ2h0IGFib3ZlIHRoZSBjYXNlcyB0aGF0IHJ1bnMgd2l0aCBkZWZhdWx0IGNhc2UgYmVjYXVzZSBvZiBob3cgc3dpdGNoIHdvcmtzIHdoZW4geW91IGRvbid0IGJyZWFrIC8gcmV0dXJuLCBtb3JlIGluZm8gYmVsb3cuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuTm9ybWFsQ2xvc3VyZTpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Hb2luZ0F3YXk6IHtcbiAgICAgICAgLy8gSWYgdGhlIHNoYXJkIGlzIG1hcmtlZCBhcyBnb2luZ09mZmxpbmUsIGl0IHN0YXlzIGRpc2Nvbm5lY3RlZC5cbiAgICAgICAgaWYgKHRoaXMuZ29pbmdPZmZsaW5lKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuRGlzY29ubmVjdGVkXG4gICAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICAgIHRoaXMuZ29pbmdPZmZsaW5lID0gZmFsc2VcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3YW50IHRoZSBzaGFyZCB0byBnbyB0aHJvdWdoIHRoZSBkZWZhdWx0IGNhc2Ugd2hlcmUgaXQgZ2V0cyByZXN1bWVkLCBhcyBpdCBtaWdodCBiZSBhbiB1bmV4cGVjdGVkIGNsb3N1cmUgZnJvbSBEaXNjb3JkIG9yIENsb3VkZmxhcmUgZm9yIGV4YW1wbGUsIHNvIHdlIGRvbid0IHVzZSBicmVhayAvIHJldHVybiBoZXJlLlxuICAgICAgfVxuICAgICAgLy8gR2F0ZXdheSBjb25uZWN0aW9uIGNsb3NlcyBvbiB3aGljaCBhIHJlc3VtZSBpcyBhbGxvd2VkLlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlVua25vd25FcnJvcjpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Vbmtub3duT3Bjb2RlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRlY29kZUVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlJhdGVMaW1pdGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkFscmVhZHlBdXRoZW50aWNhdGVkOlxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2hlcmUgd2UgcmVzdW1lIGZvcmV2ZXIsIHNvIGlmIHdlIHdlcmUgYWxyZWFkeSByZXN1bWluZyB3ZSBpZGVudGlmeSBpbnN0ZWFkXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnN0YXRlID09PSBTaGFyZFN0YXRlLlJlc3VtaW5nID8gU2hhcmRTdGF0ZS5JZGVudGlmeWluZyA6IFNoYXJkU3RhdGUuUmVzdW1pbmdcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBIYW5kbGUgYW4gaW5jb21pbmcgZ2F0ZXdheSBtZXNzYWdlLiAqL1xuICBhc3luYyBoYW5kbGVNZXNzYWdlKG1lc3NhZ2U6IE1lc3NhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRoZSB3cyBucG0gcGFja2FnZSB3aWxsIHVzZSBhIEJ1ZmZlciwgd2hpbGUgdGhlIGdsb2JhbCBidWlsdC1pbiB3aWxsIHVzZSBBcnJheUJ1ZmZlclxuICAgIGNvbnN0IGlzQ29tcHJlc3NlZCA9IG1lc3NhZ2UuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IG1lc3NhZ2UuZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlclxuXG4gICAgY29uc3QgZGF0YSA9IGlzQ29tcHJlc3NlZCA/IGF3YWl0IHRoaXMuZGVjb21wcmVzc1BhY2tldChtZXNzYWdlLmRhdGEpIDogKEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKSBhcyBEaXNjb3JkR2F0ZXdheVBheWxvYWQpXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgZGVjb21wcmVzc2lvbiB3YXMgbm90IHN1Y2Nlc3NmdWxcbiAgICBpZiAoIWRhdGEpIHJldHVyblxuXG4gICAgYXdhaXQgdGhpcy5oYW5kbGVEaXNjb3JkUGFja2V0KGRhdGEpXG4gIH1cblxuICAvKipcbiAgICogRGVjb21wcmVzcyBhIHpsaWIvenN0ZCBjb21wcmVzc2VkIHBhY2tldFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgZGVjb21wcmVzc1BhY2tldChkYXRhOiBBcnJheUJ1ZmZlciB8IEJ1ZmZlcik6IFByb21pc2U8RGlzY29yZEdhdGV3YXlQYXlsb2FkIHwgbnVsbD4ge1xuICAgIC8vIEEgYnVmZmVyIGlzIGEgVWludDhBcnJheSB1bmRlciB0aGUgaG9vZC4gQW4gQXJyYXlCdWZmZXIgaXMgZ2VuZXJpYywgc28gd2UgbmVlZCB0byBjcmVhdGUgdGhlIFVpbnQ4QXJyYXkgdGhhdCB1c2VzIHRoZSB3aG9sZSBBcnJheUJ1ZmZlclxuICAgIGNvbnN0IGNvbXByZXNzZWREYXRhOiBVaW50OEFycmF5ID0gZGF0YSBpbnN0YW5jZW9mIEJ1ZmZlciA/IGRhdGEgOiBuZXcgVWludDhBcnJheShkYXRhKVxuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbiA9PT0gVHJhbnNwb3J0Q29tcHJlc3Npb24uemxpYikge1xuICAgICAgaWYgKCF0aGlzLmluZmxhdGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZmF0YWwoJ1tTaGFyZF0gemxpYi1zdHJlYW0gdHJhbnNwb3J0IGNvbXByZXNzaW9uIHdhcyBlbmFibGVkIGJ1dCBubyBpbnN0YW5jZSBvZiBJbmZsYXRlIHdhcyBmb3VuZC4nKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICAvLyBBbGlhcywgdXNlZCB0byBhdm9pZCBzb21lIG51bGwgY2hlY2tzIGluIHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yXG4gICAgICBjb25zdCBpbmZsYXRlID0gdGhpcy5pbmZsYXRlXG5cbiAgICAgIGNvbnN0IHdyaXRlUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgaW5mbGF0ZS53cml0ZShjb21wcmVzc2VkRGF0YSwgJ2JpbmFyeScsIChlcnJvcikgPT4gKGVycm9yID8gcmVqZWN0KGVycm9yKSA6IHJlc29sdmUoKSkpXG4gICAgICB9KVxuXG4gICAgICBpZiAoIWVuZHNXaXRoTWFya2VyKGNvbXByZXNzZWREYXRhLCBaTElCX1NZTkNfRkxVU0gpKSByZXR1cm4gbnVsbFxuXG4gICAgICBhd2FpdCB3cml0ZVByb21pc2VcblxuICAgICAgaWYgKCF0aGlzLmluZmxhdGVCdWZmZXIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBUaGUgWkxpYiBpbmZsYXRlIGJ1ZmZlciB3YXMgY2xlYXJlZCBhdCBhbiB1bmV4cGVjdGVkIG1vbWVudC4nKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKHRoaXMuaW5mbGF0ZUJ1ZmZlcilcbiAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcblxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZERhdGEpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbiA9PT0gVHJhbnNwb3J0Q29tcHJlc3Npb24uenN0ZCkge1xuICAgICAgaWYgKCF0aGlzLnpzdGREZWNvbXByZXNzKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmZhdGFsKCdbU2hhcmRdIHpzdGQtc3RyZWFtIHRyYW5zcG9ydCBjb21wcmVzc2lvbiB3YXMgZW5hYmxlZCBidXQgbm8gaW5zdGFuY2Ugb2YgRGVjb21wcmVzcyB3YXMgZm91bmQuJylcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgdGhpcy56c3RkRGVjb21wcmVzcy5wdXNoKGNvbXByZXNzZWREYXRhKVxuXG4gICAgICBjb25zdCBkZWNvbXByZXNzaW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPERpc2NvcmRHYXRld2F5UGF5bG9hZD4oKHIpID0+IHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUucHVzaChyKSlcbiAgICAgIHJldHVybiBhd2FpdCBkZWNvbXByZXNzaW9uUHJvbWlzZVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MpIHtcbiAgICAgIGNvbnN0IGRlY29tcHJlc3NlZCA9IGluZmxhdGVTeW5jKGNvbXByZXNzZWREYXRhKVxuICAgICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLnRleHREZWNvZGVyLmRlY29kZShkZWNvbXByZXNzZWQpXG5cbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZWREYXRhKVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKiogSGFuZGxlcyBhIGluY29taW5nIGdhdGV3YXkgcGFja2V0LiAqL1xuICBhc3luYyBoYW5kbGVEaXNjb3JkUGFja2V0KHBhY2tldDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gRWRnZSBjYXNlIHN0YXJ0OiBodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vL2lzc3Vlcy8yMzExXG4gICAgdGhpcy5oZWFydC5sYXN0QWNrID0gRGF0ZS5ub3coKVxuICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gdHJ1ZVxuICAgIC8vIEVkZ2UgY2FzZSBlbmQhXG5cbiAgICBzd2l0Y2ggKHBhY2tldC5vcCkge1xuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQ6IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgICAvLyBEaXNjb3JkIHJhbmRvbWx5IHNlbmRzIHRoaXMgcmVxdWlyaW5nIGFuIGltbWVkaWF0ZSBoZWFydGJlYXQgYmFjay5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlbGxvOiB7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gKHBhY2tldC5kIGFzIERpc2NvcmRIZWxsbykuaGVhcnRiZWF0X2ludGVydmFsXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHJlY2VpdmVkIEhlbGxvYClcbiAgICAgICAgdGhpcy5zdGFydEhlYXJ0YmVhdGluZyhpbnRlcnZhbClcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU2hhcmRTdGF0ZS5SZXN1bWluZykge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRRdWV1ZSA9IFsuLi50aGlzLmJ1Y2tldC5xdWV1ZV1cbiAgICAgICAgICAvLyBIRUxMTyBoYXMgYmVlbiBzZW5kIG9uIGEgbm9uIHJlc3VtZSBhY3Rpb24uXG4gICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzaGFyZCBzdGFydHMgYSBuZXcgc2Vzc2lvbixcbiAgICAgICAgICAvLyB0aGVyZWZvcmUgdGhlIHJhdGUgbGltaXQgaW50ZXJ2YWwgaGFzIGJlZW4gcmVzZXQgdG9vLlxuICAgICAgICAgIHRoaXMuYnVja2V0ID0gbmV3IExlYWt5QnVja2V0KHtcbiAgICAgICAgICAgIG1heDogdGhpcy5jYWxjdWxhdGVTYWZlUmVxdWVzdHMoKSxcbiAgICAgICAgICAgIHJlZmlsbEludGVydmFsOiA2MDAwMCxcbiAgICAgICAgICAgIHJlZmlsbEFtb3VudDogdGhpcy5jYWxjdWxhdGVTYWZlUmVxdWVzdHMoKSxcbiAgICAgICAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIC8vIFF1ZXVlIHNob3VsZCBub3QgYmUgbG9zdCBvbiBhIHJlLWlkZW50aWZ5LlxuICAgICAgICAgIHRoaXMuYnVja2V0LnF1ZXVlLnVuc2hpZnQoLi4uY3VycmVudFF1ZXVlKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHMuaGVsbG8/Lih0aGlzKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdEFDSzoge1xuICAgICAgICAvLyBNYW51YWxseSBjYWxjdWxhdGluZyB0aGUgcm91bmQgdHJpcCB0aW1lIGZvciB1c2VycyB3aG8gbmVlZCBpdC5cbiAgICAgICAgaWYgKHRoaXMuaGVhcnQubGFzdEJlYXQpIHtcbiAgICAgICAgICB0aGlzLmhlYXJ0LnJ0dCA9IHRoaXMuaGVhcnQubGFzdEFjayAtIHRoaXMuaGVhcnQubGFzdEJlYXRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdEFjaz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuUmVjb25uZWN0OiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlY2VpdmVkIGEgUmVjb25uZWN0IGZvciBTaGFyZCAjJHt0aGlzLmlkfWApXG4gICAgICAgIHRoaXMuZXZlbnRzLnJlcXVlc3RlZFJlY29ubmVjdD8uKHRoaXMpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkludmFsaWRTZXNzaW9uOiB7XG4gICAgICAgIGNvbnN0IHJlc3VtYWJsZSA9IHBhY2tldC5kIGFzIGJvb2xlYW5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVjZWl2ZWQgSW52YWxpZCBTZXNzaW9uIGZvciBTaGFyZCAjJHt0aGlzLmlkfSB3aXRoIHJlc3VtYWJsZSBhcyAke3Jlc3VtYWJsZX1gKVxuXG4gICAgICAgIHRoaXMuZXZlbnRzLmludmFsaWRTZXNzaW9uPy4odGhpcywgcmVzdW1hYmxlKVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgYSByYW5kb20gYW1vdW50IG9mIHRpbWUgYmV0d2VlbiAxIGFuZCA1XG4gICAgICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVzdW1pbmdcbiAgICAgICAgYXdhaXQgZGVsYXkoTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDQgKyAxKSAqIDEwMDApKVxuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdJTlZBTElEX1NFU1NJT04nKT8uKHBhY2tldClcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ0lOVkFMSURfU0VTU0lPTicpXG5cbiAgICAgICAgLy8gV2hlbiByZXN1bWFibGUgaXMgZmFsc2Ugd2UgbmVlZCB0byByZS1pZGVudGlmeVxuICAgICAgICBpZiAoIXJlc3VtYWJsZSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBzZXNzaW9uIGlzIGludmFsaWQgYnV0IGFwcGFyZW50bHkgaXQgaXMgcmVzdW1hYmxlXG4gICAgICAgIGF3YWl0IHRoaXMucmVzdW1lKClcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAocGFja2V0LnQpIHtcbiAgICAgIGNhc2UgJ1JFU1VNRUQnOlxuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWRcbiAgICAgICAgdGhpcy5ldmVudHMucmVzdW1lZD8uKHRoaXMpXG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gcmVjZWl2ZWQgUkVTVU1FRGApXG5cbiAgICAgICAgLy8gQ29udGludWUgdGhlIHJlcXVlc3RzIHdoaWNoIGhhdmUgYmVlbiBxdWV1ZWQgc2luY2UgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZS5cbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmZvckVhY2goKHJlc29sdmUpID0+IHJlc29sdmUoKSlcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAgd2lsbCBkZWxldGUgdGhlIGVsZW1lbnRzIGluIGl0XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5sZW5ndGggPSAwXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ1JFU1VNRUQnKT8uKHBhY2tldClcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFU1VNRUQnKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnUkVBRFknOiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBwYWNrZXQuZCBhcyBEaXNjb3JkUmVhZHlcblxuICAgICAgICAvLyBJbXBvcnRhbnQgZm9yIGZ1dHVyZSByZXN1bWVzLlxuICAgICAgICB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgPSBwYXlsb2FkLnJlc3VtZV9nYXRld2F5X3VybFxuICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHBheWxvYWQuc2Vzc2lvbl9pZFxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHJlY2VpdmVkIFJFQURZYClcblxuICAgICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgICAvLyBJbXBvcnRhbnQgd2hlbiB0aGlzIGlzIGEgcmUtaWRlbnRpZnlcbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmZvckVhY2goKHJlc29sdmUpID0+IHJlc29sdmUoKSlcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAgd2lsbCBkZWxldGUgdGhlIGVsZW1lbnRzIGluIGl0XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5sZW5ndGggPSAwXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ1JFQURZJyk/LihwYWNrZXQpXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZGVsZXRlKCdSRUFEWScpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgaXQgaXMgcHJlc2VudFxuICAgIC8vIGBzYCBjYW4gYmUgZWl0aGVyIGBudWxsYCBvciBhIGBudW1iZXJgLlxuICAgIC8vIEluIG9yZGVyIHRvIHByZXZlbnQgdXBkYXRlIG1pc3NlcyB3aGVuIGBzYCBpcyBgMGAgd2UgY2hlY2sgYWdhaW5zdCBudWxsLlxuICAgIGlmIChwYWNrZXQucyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyID0gcGFja2V0LnNcbiAgICB9XG5cbiAgICB0aGlzLmZvcndhcmRUb0JvdChwYWNrZXQpXG4gIH1cblxuICBmb3J3YXJkVG9Cb3QocGFja2V0OiBEaXNjb3JkR2F0ZXdheVBheWxvYWQpOiB2b2lkIHtcbiAgICAvLyBUaGUgbmVjZXNzYXJ5IGhhbmRsaW5nIHJlcXVpcmVkIGZvciB0aGUgU2hhcmRzIGNvbm5lY3Rpb24gaGFzIGJlZW4gZmluaXNoZWQuXG4gICAgLy8gTm93IHRoZSBldmVudCBjYW4gYmUgc2FmZWx5IGZvcndhcmRlZC5cbiAgICB0aGlzLmV2ZW50cy5tZXNzYWdlPy4odGhpcywgY2FtZWxpemUocGFja2V0KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBpbiBvcmRlciB0byBtYWtlIHRoZSBzaGFyZHMgcHJlc2VuY2UuXG4gICAqIGFzeW5jIGluIGNhc2UgZGV2cyBjcmVhdGUgdGhlIHByZXNlbmNlIGJhc2VkIG9uIGVnLiBkYXRhYmFzZSB2YWx1ZXMuXG4gICAqIFBhc3NpbmcgdGhlIHNoYXJkJ3MgaWQgdGhlcmUgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBkZXYgdG8gdXNlIHRoaXMgZnVuY3Rpb24uXG4gICAqL1xuICBhc3luYyBtYWtlUHJlc2VuY2UoKTogUHJvbWlzZTxEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNvbW11bmljYXRlcyB3aXRoIHRoZSBtYW5hZ2VtZW50IHByb2Nlc3MsIGluIG9yZGVyIHRvIGtub3cgd2hldGhlciBpdHMgZnJlZSB0byBpZGVudGlmeS5cbiAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJlc29sdmVzLCB0aGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIGlzIGFsbG93ZWQgdG8gc2VuZCBhbiBpZGVudGlmeSBwYXlsb2FkIHRvIGRpc2NvcmQuXG4gICAqL1xuICBhc3luYyByZXF1ZXN0SWRlbnRpZnkoKTogUHJvbWlzZTx2b2lkPiB7fVxuXG4gIC8qKiBTdGFydCBzZW5kaW5nIGhlYXJ0YmVhdCBwYXlsb2FkcyB0byBEaXNjb3JkIGluIHRoZSBwcm92aWRlZCBpbnRlcnZhbC4gKi9cbiAgc3RhcnRIZWFydGJlYXRpbmcoaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFN0YXJ0IGhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfWApXG5cbiAgICAvLyBJZiBvbGQgaGVhcnRiZWFzdCBleGlzdCBsaWtlIGFmdGVyIHJlc3VtZSwgY2xlYXIgdGhlIG9sZCBvbmVzLlxuICAgIHRoaXMuc3RvcEhlYXJ0YmVhdGluZygpXG5cbiAgICB0aGlzLmhlYXJ0LmludGVydmFsID0gaW50ZXJ2YWxcblxuICAgIC8vIE9ubHkgc2V0IHRoZSBzaGFyZCdzIHN0YXRlIHRvIGBVbmlkZW50aWZpZWRgXG4gICAgLy8gaWYgaGVhcnRiZWF0aW5nIGhhcyBub3QgYmVlbiBzdGFydGVkIGR1ZSB0byBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmIChbU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWQsIFNoYXJkU3RhdGUuT2ZmbGluZV0uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkIGlzIGRpc2Nvbm5lY3RlZCBvciBvZmZsaW5lIGJ1dCB0aGUgaGVhcnRiZWF0IHdhcyBzdGFydGVkICMke3RoaXMuaWR9YClcbiAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLlVuaWRlbnRpZmllZFxuICAgIH1cblxuICAgIC8vIFRoZSBmaXJzdCBoZWFydGJlYXQgbmVlZHMgdG8gYmUgc2VuZCB3aXRoIGEgcmFuZG9tIGRlbGF5IGJldHdlZW4gYDBgIGFuZCBgaW50ZXJ2YWxgXG4gICAgLy8gVXNpbmcgYSBgc2V0VGltZW91dChfLCBqaXR0ZXIpYCBoZXJlIHRvIGFjY29tcGxpc2ggdGhhdC5cbiAgICAvLyBgTWF0aC5yYW5kb20oKWAgY2FuIGJlIGAwYCBzbyB3ZSB1c2UgYDAuNWAgaWYgdGhpcyBoYXBwZW5zXG4gICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmdcbiAgICBjb25zdCBqaXR0ZXIgPSBNYXRoLmNlaWwodGhpcy5oZWFydC5pbnRlcnZhbCAqIChNYXRoLnJhbmRvbSgpIHx8IDAuNSkpXG5cbiAgICB0aGlzLmhlYXJ0LnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gQmVnaW5uaW5nIGhlYXJ0YmVhdGluZyBwcm9jZXNzIGZvciBTaGFyZCAjJHt0aGlzLmlkfWApXG5cbiAgICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuXG5cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfS4gUHJldmlvdXMgc2VxdWVuY2UgbnVtYmVyOiAke3RoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcn1gKVxuXG4gICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgfSksXG4gICAgICApXG5cbiAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEFmdGVyIHRoZSByYW5kb20gaGVhcnRiZWF0IGppdHRlciB3ZSBjYW4gc3RhcnQgYSBub3JtYWwgaW50ZXJ2YWwuXG4gICAgICB0aGlzLmhlYXJ0LmludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4oKSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGlzIG5vdCBvcGVuLCBidXQgYXR0ZW1wdGVkIGhlYXJ0YmVhdCwgaWdub3JpbmcuYClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBTaGFyZCBkaWQgbm90IHJlY2VpdmUgYSBoZWFydGJlYXQgQUNLIGZyb20gRGlzY29yZCBpbiB0aW1lLFxuICAgICAgICAvLyB0aGVyZWZvcmUgd2UgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgY29ubmVjdGlvbiBoYXMgZmFpbGVkIG9yIGdvdCBcInpvbWJpZWRcIi5cbiAgICAgICAgLy8gVGhlIFNoYXJkIG5lZWRzIHRvIHN0YXJ0IGEgcmUtaWRlbnRpZnkgYWN0aW9uIGFjY29yZGluZ2x5LlxuICAgICAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I2hlYXJ0YmVhdGluZy1leGFtcGxlLWdhdGV3YXktaGVhcnRiZWF0LWFja1xuICAgICAgICBpZiAoIXRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0IG5vdCBhY2tub3dsZWRnZWQgZm9yIFNoYXJkICMke3RoaXMuaWR9LiBBc3N1bWluZyB6b21iaWVkIGNvbm5lY3Rpb24uYClcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5ab21iaWVkQ29ubmVjdGlvbiwgJ1pvbWJpZWQgY29ubmVjdGlvbiwgZGlkIG5vdCByZWNlaXZlIGFuIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gSGVhcnRiZWF0aW5nIG9uIFNoYXJkICMke3RoaXMuaWR9LiBQcmV2aW91cyBzZXF1ZW5jZSBudW1iZXI6ICR7dGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyfWApXG5cbiAgICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgICAgdGhpcy5zb2NrZXQ/LnNlbmQoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICAgIGQ6IHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICAgIHRoaXMuaGVhcnQuYWNrbm93bGVkZ2VkID0gZmFsc2VcblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWFydGJlYXQ/Lih0aGlzKVxuICAgICAgfSwgdGhpcy5oZWFydC5pbnRlcnZhbClcbiAgICB9LCBqaXR0ZXIpXG4gIH1cblxuICAvKiogU3RvcCB0aGUgaGVhcnRiZWF0aW5nIHByb2Nlc3Mgd2l0aCBkaXNjb3JkLiAqL1xuICBzdG9wSGVhcnRiZWF0aW5nKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHRoZSByZWd1bGFyIGhlYXJ0YmVhdCBpbnRlcnZhbC5cbiAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnQuaW50ZXJ2YWxJZClcbiAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIFNoYXJkIGdvdCBjbG9zZWQgYmVmb3JlIHRoZSBmaXJzdCBqaXR0ZXJlZCBoZWFydGJlYXQuXG4gICAgLy8gVG8gZ28gc2FmZSB3ZSBzaG91bGQgY2xlYXIgdGhlIHJlbGF0ZWQgdGltZW91dCB0b28uXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnQudGltZW91dElkKVxuICB9XG59XG5cbi8qKiBDaGVjayBpZiB0aGUgYnVmZmVyIGVuZHMgd2l0aCB0aGUgbWFya2VyICovXG5mdW5jdGlvbiBlbmRzV2l0aE1hcmtlcihidWZmZXI6IFVpbnQ4QXJyYXksIG1hcmtlcjogVWludDhBcnJheSkge1xuICBpZiAoYnVmZmVyLmxlbmd0aCA8IG1hcmtlci5sZW5ndGgpIHJldHVybiBmYWxzZVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya2VyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gbWFya2VyLmxlbmd0aCArIGldICE9PSBtYXJrZXJbaV0pIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZENyZWF0ZU9wdGlvbnMge1xuICAvKiogVGhlIHNoYXJkIGlkICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGRldGFpbHMgKi9cbiAgY29ubmVjdGlvbjogU2hhcmRHYXRld2F5Q29uZmlnXG4gIC8qKiBUaGUgZXZlbnQgaGFuZGxlcnMgZm9yIGV2ZW50cyBvbiB0aGUgc2hhcmQuICovXG4gIGV2ZW50czogU2hhcmRFdmVudHNcbiAgLyoqIFRoZSBsb2dnZXIgZm9yIHRoZSBzaGFyZCAqL1xuICBsb2dnZXI/OiBQaWNrPHR5cGVvZiBsb2dnZXIsICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2ZhdGFsJz5cbiAgLyoqIFRoZSBoYW5kbGVyIHRvIHJlcXVlc3QgYSBzcGFjZSB0byBtYWtlIGFuIGlkZW50aWZ5IHJlcXVlc3QuICovXG4gIHJlcXVlc3RJZGVudGlmeT86ICgpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqIEZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYm90IHN0YXR1cyB0byBzZW5kIG9uIElkZW50aWZ5IHJlcXVlc3RzICovXG4gIG1ha2VQcmVzZW5jZT86ICgpID0+IFByb21pc2U8RGlzY29yZFVwZGF0ZVByZXNlbmNlIHwgdW5kZWZpbmVkPlxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXNjb3JkZW5vU2hhcmRcbiJdLCJuYW1lcyI6WyJCdWZmZXIiLCJjcmVhdGVJbmZsYXRlIiwiaW5mbGF0ZVN5bmMiLCJjb25zdGFudHMiLCJ6bGliQ29uc3RhbnRzIiwiR2F0ZXdheUNsb3NlRXZlbnRDb2RlcyIsIkdhdGV3YXlPcGNvZGVzIiwiY2FtZWxpemUiLCJkZWxheSIsIkxlYWt5QnVja2V0IiwibG9nZ2VyIiwiTm9kZVdlYlNvY2tldCIsIlNoYXJkU29ja2V0Q2xvc2VDb2RlcyIsIlNoYXJkU3RhdGUiLCJUcmFuc3BvcnRDb21wcmVzc2lvbiIsIlpMSUJfU1lOQ19GTFVTSCIsIlVpbnQ4QXJyYXkiLCJmenN0ZCIsImdldEZaU3RkIiwiRGlzY29yZGVub1NoYXJkIiwib3B0aW9ucyIsIm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayIsInByZXZpb3VzU2VxdWVuY2VOdW1iZXIiLCJyYXRlTGltaXRSZXNldEludGVydmFsIiwic3RhdGUiLCJPZmZsaW5lIiwicmVzdW1lR2F0ZXdheVVybCIsImV2ZW50cyIsIm9mZmxpbmVTZW5kUXVldWUiLCJyZXNvbHZlcyIsIk1hcCIsImdvaW5nT2ZmbGluZSIsInRleHREZWNvZGVyIiwiVGV4dERlY29kZXIiLCJpbmZsYXRlQnVmZmVyIiwiZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUiLCJpZCIsImNvbm5lY3Rpb24iLCJoZWFydCIsImFja25vd2xlZGdlZCIsImludGVydmFsIiwicmVxdWVzdElkZW50aWZ5IiwibWFrZVByZXNlbmNlIiwiYnVja2V0IiwibWF4IiwiY2FsY3VsYXRlU2FmZVJlcXVlc3RzIiwicmVmaWxsQW1vdW50IiwicmVmaWxsSW50ZXJ2YWwiLCJnYXRld2F5Q29uZmlnIiwiY29ubmVjdGlvblVybCIsInVybCIsInNhZmVSZXF1ZXN0cyIsIk1hdGgiLCJjZWlsIiwiY2hlY2tPZmZsaW5lIiwiaGlnaFByaW9yaXR5IiwiaXNPcGVuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bnNoaWZ0IiwicHVzaCIsImNsb3NlIiwiY29kZSIsInJlYXNvbiIsImRlYnVnIiwic29ja2V0IiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJOb3JtYWxDbG9zdXJlIiwiR29pbmdBd2F5IiwicHJvbWlzZSIsInJlc29sdmVBZnRlckNsb3NlIiwidW5kZWZpbmVkIiwiY29ubmVjdCIsIklkZW50aWZ5aW5nIiwiUmVzdW1pbmciLCJpbmNsdWRlcyIsIkNvbm5lY3RpbmciLCJjb25uZWN0aW5nIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwic2V0IiwidmVyc2lvbiIsInRvU3RyaW5nIiwidHJhbnNwb3J0Q29tcHJlc3Npb24iLCJ6bGliIiwiaW5mbGF0ZSIsImZpbmlzaEZsdXNoIiwiWl9TWU5DX0ZMVVNIIiwiY2h1bmtTaXplIiwib24iLCJlIiwiZXJyb3IiLCJkYXRhIiwibmV3QnVmZmVyIiwiYnl0ZUxlbmd0aCIsInpzdGQiLCJjYXRjaCIsIndhcm4iLCJkZWxldGUiLCJ6c3RkRGVjb21wcmVzcyIsIkRlY29tcHJlc3MiLCJkZWNvZGVkRGF0YSIsImRlY29kZSIsInBhcnNlZERhdGEiLCJKU09OIiwicGFyc2UiLCJzaGlmdCIsImNvbXByZXNzIiwic2hvdWxkVXNlQnVpbHRpbiIsIlJlZmxlY3QiLCJoYXMiLCJnbG9iYWxUaGlzIiwiV2ViU29ja2V0IiwiYmluYXJ5VHlwZSIsIm9uZXJyb3IiLCJldmVudCIsImhhbmRsZUVycm9yIiwib25jbG9zZSIsImNsb3NlRXZlbnQiLCJoYW5kbGVDbG9zZSIsIm9ubWVzc2FnZSIsIm1lc3NhZ2VFdmVudCIsImhhbmRsZU1lc3NhZ2UiLCJvbm9wZW4iLCJVbmlkZW50aWZpZWQiLCJjb25uZWN0ZWQiLCJpZGVudGlmeSIsImJ5cGFzc1JlcXVlc3QiLCJSZUlkZW50aWZ5aW5nIiwiaWRlbnRpZnlpbmciLCJzZW5kIiwib3AiLCJJZGVudGlmeSIsImQiLCJ0b2tlbiIsInByb3BlcnRpZXMiLCJpbnRlbnRzIiwic2hhcmQiLCJ0b3RhbFNoYXJkcyIsInByZXNlbmNlIiwiaWRlbnRpZmllZCIsInJlc3VtZSIsIlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uIiwic2Vzc2lvbklkIiwiUmVzdW1lIiwic2Vzc2lvbl9pZCIsInNlcSIsIm1lc3NhZ2UiLCJhY3F1aXJlIiwic3RyaW5naWZ5Iiwic2h1dGRvd24iLCJTaHV0ZG93biIsInN0b3BIZWFydGJlYXRpbmciLCJUZXN0aW5nRmluaXNoZWQiLCJkaXNjb25uZWN0ZWQiLCJSZXNoYXJkZWQiLCJEaXNjb25uZWN0ZWQiLCJBdXRoZW50aWNhdGlvbkZhaWxlZCIsIkludmFsaWRTaGFyZCIsIlNoYXJkaW5nUmVxdWlyZWQiLCJJbnZhbGlkQXBpVmVyc2lvbiIsIkludmFsaWRJbnRlbnRzIiwiRGlzYWxsb3dlZEludGVudHMiLCJFcnJvciIsIk5vdEF1dGhlbnRpY2F0ZWQiLCJJbnZhbGlkU2VxIiwiU2Vzc2lvblRpbWVkT3V0IiwiVW5rbm93bkVycm9yIiwiVW5rbm93bk9wY29kZSIsIkRlY29kZUVycm9yIiwiUmF0ZUxpbWl0ZWQiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsImlzQ29tcHJlc3NlZCIsIkFycmF5QnVmZmVyIiwiZGVjb21wcmVzc1BhY2tldCIsImhhbmRsZURpc2NvcmRQYWNrZXQiLCJjb21wcmVzc2VkRGF0YSIsImZhdGFsIiwid3JpdGVQcm9taXNlIiwicmVqZWN0Iiwid3JpdGUiLCJlbmRzV2l0aE1hcmtlciIsImRlY29tcHJlc3Npb25Qcm9taXNlIiwiciIsImRlY29tcHJlc3NlZCIsInBhY2tldCIsImxhc3RBY2siLCJEYXRlIiwibm93IiwiSGVhcnRiZWF0IiwibGFzdEJlYXQiLCJoZWFydGJlYXQiLCJIZWxsbyIsImhlYXJ0YmVhdF9pbnRlcnZhbCIsInN0YXJ0SGVhcnRiZWF0aW5nIiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJoZWxsbyIsIkhlYXJ0YmVhdEFDSyIsInJ0dCIsImhlYXJ0YmVhdEFjayIsIlJlY29ubmVjdCIsInJlcXVlc3RlZFJlY29ubmVjdCIsIkludmFsaWRTZXNzaW9uIiwicmVzdW1hYmxlIiwiaW52YWxpZFNlc3Npb24iLCJmbG9vciIsInJhbmRvbSIsImdldCIsInQiLCJDb25uZWN0ZWQiLCJyZXN1bWVkIiwiZm9yRWFjaCIsImxlbmd0aCIsInBheWxvYWQiLCJyZXN1bWVfZ2F0ZXdheV91cmwiLCJzIiwiZm9yd2FyZFRvQm90Iiwiaml0dGVyIiwidGltZW91dElkIiwic2V0VGltZW91dCIsImludGVydmFsSWQiLCJzZXRJbnRlcnZhbCIsIlpvbWJpZWRDb25uZWN0aW9uIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImJ1ZmZlciIsIm1hcmtlciIsImkiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxjQUFhO0FBQ3BDLFNBQVNDLGFBQWEsRUFBZ0JDLFdBQVcsRUFBRUMsYUFBYUMsYUFBYSxRQUFRLFlBQVc7QUFFaEcsU0FBU0Msc0JBQXNCLEVBQUVDLGNBQWMsUUFBUSxvQkFBbUI7QUFDMUUsU0FBU0MsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxRQUFRLG9CQUFtQjtBQUV4RSxPQUFPQyxtQkFBbUIsS0FBSTtBQUM5QixTQUlFQyxxQkFBcUIsRUFFckJDLFVBQVUsRUFDVkMsb0JBQW9CLFFBQ2YsYUFBWTtBQUVuQixNQUFNQyxrQkFBa0IsSUFBSUMsV0FBVztJQUFDO0lBQUs7SUFBSztJQUFNO0NBQUs7QUFFN0QsSUFBSUM7QUFFSix3RUFBd0UsR0FDeEUsZUFBZUM7SUFDYixPQUFRRCxVQUFVLE1BQU0sTUFBTSxDQUFDO0FBQ2pDO0FBRUEsT0FBTyxNQUFNRTtJQTJEWCxZQUFZQyxPQUEyQixDQUFFO1FBcER6QywwSEFBMEgsUUFDMUhDLDhCQUFzQztRQUN0QywwQ0FBMEMsUUFDMUNDLHlCQUF3QztRQUN4Qyw0RUFBNEUsUUFDNUVDLHlCQUFpQztRQUtqQyx3Q0FBd0MsUUFDeENDLFFBQVFYLFdBQVdZLE9BQU87UUFDMUIsaUZBQWlGLFFBQ2pGQyxtQkFBMkI7UUFDM0Isc0NBQXNDLFFBQ3RDQyxTQUFzQixDQUFDO1FBQ3ZCLG1HQUFtRyxRQUNuR0MsbUJBQW1DLEVBQUU7UUFDckMsaUZBQWlGLFFBQ2pGQyxXQUFXLElBQUlDO1FBS2Y7Ozs7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
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TaGFyZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcidcbmltcG9ydCB7IGNyZWF0ZUluZmxhdGUsIHR5cGUgSW5mbGF0ZSwgaW5mbGF0ZVN5bmMsIGNvbnN0YW50cyBhcyB6bGliQ29uc3RhbnRzIH0gZnJvbSAnbm9kZTp6bGliJ1xuaW1wb3J0IHR5cGUgeyBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIERpc2NvcmRIZWxsbywgRGlzY29yZFJlYWR5LCBEaXNjb3JkVXBkYXRlUHJlc2VuY2UgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7IEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgeyBjYW1lbGl6ZSwgZGVsYXksIExlYWt5QnVja2V0LCBsb2dnZXIgfSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB0eXBlIHsgRGVjb21wcmVzcyBhcyBac3RkRGVjb21wcmVzcyB9IGZyb20gJ2Z6c3RkJ1xuaW1wb3J0IE5vZGVXZWJTb2NrZXQgZnJvbSAnd3MnXG5pbXBvcnQge1xuICB0eXBlIFNoYXJkRXZlbnRzLFxuICB0eXBlIFNoYXJkR2F0ZXdheUNvbmZpZyxcbiAgdHlwZSBTaGFyZEhlYXJ0LFxuICBTaGFyZFNvY2tldENsb3NlQ29kZXMsXG4gIHR5cGUgU2hhcmRTb2NrZXRSZXF1ZXN0LFxuICBTaGFyZFN0YXRlLFxuICBUcmFuc3BvcnRDb21wcmVzc2lvbixcbn0gZnJvbSAnLi90eXBlcy5qcydcblxuY29uc3QgWkxJQl9TWU5DX0ZMVVNIID0gbmV3IFVpbnQ4QXJyYXkoWzB4MCwgMHgwLCAweGZmLCAweGZmXSlcblxubGV0IGZ6c3RkOiB0eXBlb2YgaW1wb3J0KCdmenN0ZCcpXG5cbi8qKiBTaW5jZSBmenN0ZCBpcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5LCB3ZSBuZWVkIHRvIGltcG9ydCBpdCBsYXppbHkuICovXG5hc3luYyBmdW5jdGlvbiBnZXRGWlN0ZCgpIHtcbiAgcmV0dXJuIChmenN0ZCA/Pz0gYXdhaXQgaW1wb3J0KCdmenN0ZCcpKVxufVxuXG5leHBvcnQgY2xhc3MgRGlzY29yZGVub1NoYXJkIHtcbiAgLyoqIFRoZSBpZCBvZiB0aGUgc2hhcmQuICovXG4gIGlkOiBudW1iZXJcbiAgLyoqIFRoZSBjb25uZWN0aW9uIGNvbmZpZyBkZXRhaWxzIHRoYXQgdGhpcyBzaGFyZCB3aWxsIHVzZWQgdG8gY29ubmVjdCB0byBkaXNjb3JkLiAqL1xuICBjb25uZWN0aW9uOiBTaGFyZEdhdGV3YXlDb25maWdcbiAgLyoqIFRoaXMgY29udGFpbnMgYWxsIHRoZSBoZWFydGJlYXQgaW5mb3JtYXRpb24gKi9cbiAgaGVhcnQ6IFNoYXJkSGVhcnRcbiAgLyoqIFRoZSBtYXhpbXVtIG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBiZSBzZW5kIHRvIGRpc2NvcmQgcGVyIHJhdGUgbGltaXQgdGljay4gVHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqL1xuICBtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2s6IG51bWJlciA9IDEyMFxuICAvKiogVGhlIHByZXZpb3VzIHBheWxvYWQgc2VxdWVuY2UgbnVtYmVyLiAqL1xuICBwcmV2aW91c1NlcXVlbmNlTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAvKiogSW4gd2hpY2ggaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgdGhlIGdhdGV3YXkgcmVzZXRzIGl0J3MgcmF0ZSBsaW1pdC4gKi9cbiAgcmF0ZUxpbWl0UmVzZXRJbnRlcnZhbDogbnVtYmVyID0gNjAwMDBcbiAgLyoqIEN1cnJlbnQgc2Vzc2lvbiBpZCBvZiB0aGUgc2hhcmQgaWYgcHJlc2VudC4gKi9cbiAgc2Vzc2lvbklkPzogc3RyaW5nXG4gIC8qKiBUaGlzIGNvbnRhaW5zIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB0byBEaXNjb3JkLCBpZiBjdXJyZW50bHkgY29ubmVjdGVkLiAqL1xuICBzb2NrZXQ/OiBXZWJTb2NrZXRcbiAgLyoqIEN1cnJlbnQgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHRoaXMuICovXG4gIHN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gIC8qKiBUaGUgdXJsIHByb3ZpZGVkIGJ5IGRpc2NvcmQgdG8gdXNlIHdoZW4gcmVzdW1pbmcgYSBjb25uZWN0aW9uIGZvciB0aGlzIHRoaXMuICovXG4gIHJlc3VtZUdhdGV3YXlVcmw6IHN0cmluZyA9ICcnXG4gIC8qKiBUaGUgc2hhcmQgcmVsYXRlZCBldmVudCBoYW5kbGVycy4gKi9cbiAgZXZlbnRzOiBTaGFyZEV2ZW50cyA9IHt9XG4gIC8qKiBDYWNoZSBmb3IgcGVuZGluZyBnYXRld2F5IHJlcXVlc3RzIHdoaWNoIHNob3VsZCBoYXZlIGJlZW4gc2VuZCB3aGlsZSB0aGUgZ2F0ZXdheSB3ZW50IG9mZmxpbmUuICovXG4gIG9mZmxpbmVTZW5kUXVldWU6ICgoKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqIFJlc29sdmUgaW50ZXJuYWwgd2FpdGluZyBzdGF0ZXMuIE1hcHBlZCBieSBTZWxlY3RlZEV2ZW50cyA9PiBSZXNvbHZlRnVuY3Rpb24gKi9cbiAgcmVzb2x2ZXMgPSBuZXcgTWFwPCdSRUFEWScgfCAnUkVTVU1FRCcgfCAnSU5WQUxJRF9TRVNTSU9OJywgKHBheWxvYWQ6IERpc2NvcmRHYXRld2F5UGF5bG9hZCkgPT4gdm9pZD4oKVxuICAvKiogU2hhcmQgYnVja2V0LiBPbmx5IGFjY2VzcyB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gQnVja2V0IGZvciBoYW5kbGluZyBzaGFyZCByZXF1ZXN0IHJhdGUgbGltaXRzLiAqL1xuICBidWNrZXQ6IExlYWt5QnVja2V0XG4gIC8qKiBMb2dnZXIgZm9yIHRoZSBidWNrZXQuICovXG4gIGxvZ2dlcjogUGljazx0eXBlb2YgbG9nZ2VyLCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdmYXRhbCc+XG4gIC8qKlxuICAgKiBJcyB0aGUgc2hhcmQgZ29pbmcgb2ZmbGluZT9cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyB3aWxsIGJlIHRydWUgaWYgdGhlIGNsb3NlIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgd2l0aCBlaXRoZXIgMTAwMCBvciAxMDAxXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgZ29pbmdPZmZsaW5lID0gZmFsc2VcbiAgLyoqIFRleHQgZGVjb2RlciB1c2VkIGZvciBjb21wcmVzc2VkIHBheWxvYWRzLiAqL1xuICB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIC8qKiBaTGliIEluZmxhdGUgaW5zdGFuY2UgZm9yIFpMaWItc3RyZWFtIHRyYW5zcG9ydCBwYXlsb2Fkcy4gKi9cbiAgaW5mbGF0ZT86IEluZmxhdGVcbiAgLyoqIFpMaWIgaW5mbGF0ZSBidWZmZXIuICovXG4gIGluZmxhdGVCdWZmZXI6IFVpbnQ4QXJyYXkgfCBudWxsID0gbnVsbFxuICAvKiogWlN0ZCBEZWNvbXByZXNzIGluc3RhbmNlIGZvciBaU3RkLXN0cmVhbSB0cmFuc3BvcnQgcGF5bG9hZHMuICovXG4gIHpzdGREZWNvbXByZXNzPzogWnN0ZERlY29tcHJlc3NcbiAgLyoqIFF1ZXVlIGZvciBjb21wcmVzc2VkIHBheWxvYWRzIGZvciBac3RkIERlY29tcHJlc3MgKi9cbiAgZGVjb21wcmVzc2lvblByb21pc2VzUXVldWU6ICgoZGF0YTogRGlzY29yZEdhdGV3YXlQYXlsb2FkKSA9PiB2b2lkKVtdID0gW11cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBzb2NrZXQgaXMgY2xvc2VkIGFuZCBoYW5kbGVDbG9zZSgpIGhhcyBmaW5pc2hlZCB1cGRhdGluZyBpbnRlcm5hbCBzdGF0ZXMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBUaGlzIGlzIGZvciBpbnRlcm5hbCBwdXJwb3NlcyBvbmx5LCBhbmQgc3ViamVjdCB0byBicmVha2luZyBjaGFuZ2VzLlxuICAgKi9cbiAgcmVzb2x2ZUFmdGVyQ2xvc2U/OiAoY2xvc2U6IENsb3NlRXZlbnQpID0+IHZvaWRcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFyZENyZWF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZFxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG9wdGlvbnMuY29ubmVjdGlvblxuICAgIHRoaXMuZXZlbnRzID0gb3B0aW9ucy5ldmVudHNcbiAgICB0aGlzLmxvZ2dlciA9IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlclxuXG4gICAgdGhpcy5oZWFydCA9IHtcbiAgICAgIGFja25vd2xlZGdlZDogZmFsc2UsXG4gICAgICBpbnRlcnZhbDogNDUwMDAsXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdElkZW50aWZ5KSB0aGlzLnJlcXVlc3RJZGVudGlmeSA9IG9wdGlvbnMucmVxdWVzdElkZW50aWZ5XG4gICAgaWYgKG9wdGlvbnMubWFrZVByZXNlbmNlKSB0aGlzLm1ha2VQcmVzZW5jZSA9IG9wdGlvbnMubWFrZVByZXNlbmNlXG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBMZWFreUJ1Y2tldCh7XG4gICAgICBtYXg6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxBbW91bnQ6IHRoaXMuY2FsY3VsYXRlU2FmZVJlcXVlc3RzKCksXG4gICAgICByZWZpbGxJbnRlcnZhbDogNjAwMDAsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH0pXG4gIH1cblxuICAvKiogVGhlIGdhdGV3YXkgY29uZmlndXJhdGlvbiB3aGljaCBpcyB1c2VkIHRvIGNvbm5lY3QgdG8gRGlzY29yZC4gKi9cbiAgZ2V0IGdhdGV3YXlDb25maWcoKTogU2hhcmRHYXRld2F5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uXG4gIH1cblxuICAvKiogVGhlIHVybCB0byBjb25uZWN0IHRvLiBJbml0aWFsbHkgdGhpcyBpcyB0aGUgZGlzY29yZCBnYXRld2F5IHVybCwgYW5kIHRoZW4gaXMgc3dpdGNoZWQgdG8gcmVzdW1lIGdhdGV3YXkgdXJsIG9uY2UgYSBSRUFEWSBpcyByZWNlaXZlZC4gKi9cbiAgZ2V0IGNvbm5lY3Rpb25VcmwoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgfHwgYW5kIG5vdCA/PyBoZXJlLiA/PyB3aWxsIGNhdXNlIGEgYnVnLlxuICAgIHJldHVybiB0aGlzLnJlc3VtZUdhdGV3YXlVcmwgfHwgdGhpcy5nYXRld2F5Q29uZmlnLnVybFxuICB9XG5cbiAgLyoqIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHJlcXVlc3RzIHdoaWNoIGNhbiBzYWZlbHkgYmUgbWFkZSBwZXIgcmF0ZSBsaW1pdCBpbnRlcnZhbCwgYmVmb3JlIHRoZSBnYXRld2F5IGdldHMgZGlzY29ubmVjdGVkIGR1ZSB0byBhbiBleGNlZWRlZCByYXRlIGxpbWl0LiAqL1xuICBjYWxjdWxhdGVTYWZlUmVxdWVzdHMoKTogbnVtYmVyIHtcbiAgICAvLyAqIDIgYWRkcyBleHRyYSBzYWZldHkgbGF5ZXIgZm9yIGRpc2NvcmRzIE9QIDEgcmVxdWVzdHMgdGhhdCB3ZSBuZWVkIHRvIHJlc3BvbmQgdG9cbiAgICBjb25zdCBzYWZlUmVxdWVzdHMgPSB0aGlzLm1heFJlcXVlc3RzUGVyUmF0ZUxpbWl0VGljayAtIE1hdGguY2VpbCh0aGlzLnJhdGVMaW1pdFJlc2V0SW50ZXJ2YWwgLyB0aGlzLmhlYXJ0LmludGVydmFsKSAqIDJcblxuICAgIHJldHVybiBzYWZlUmVxdWVzdHMgPCAwID8gMCA6IHNhZmVSZXF1ZXN0c1xuICB9XG5cbiAgYXN5bmMgY2hlY2tPZmZsaW5lKGhpZ2hQcmlvcml0eTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzT3BlbigpKSByZXR1cm5cblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgLy8gSGlnaGVyIHByaW9yaXR5IHJlcXVlc3RzIGdldCBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS5cbiAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS51bnNoaWZ0KHJlc29sdmUpXG4gICAgICBlbHNlIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5wdXNoKHJlc29sdmUpXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBDbG9zZSB0aGUgc29ja2V0IGNvbm5lY3Rpb24gdG8gZGlzY29yZCBpZiBwcmVzZW50LiAqL1xuICBhc3luYyBjbG9zZShjb2RlOiBudW1iZXIsIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVxdWVzdCBmb3IgU2hhcmQgIyR7dGhpcy5pZH0gdG8gY2xvc2UgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgaWYgKHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlICE9PSBOb2RlV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9J3MgcmVhZHkgc3RhdGUgaXMgJHt0aGlzLnNvY2tldD8ucmVhZHlTdGF0ZX0sIFVuYWJsZSB0byBjbG9zZS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5nb2luZ09mZmxpbmUgPSBjb2RlID09PSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLk5vcm1hbENsb3N1cmUgfHwgY29kZSA9PT0gR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Hb2luZ0F3YXlcblxuICAgIC8vIFRoaXMgaGFzIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBhY3R1YWwgY2FsbCB0byBzb2NrZXQuY2xvc2UgYXMgZm9yIGV4YW1wbGUgQnVuIGNhbGxzIHNvY2tldC5vbmNsb3NlIGltbWVkaWF0ZWx5IG9uIHRoZSAuY2xvc2UoKSBjYWxsIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gZW5kXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlID0gcmVzb2x2ZVxuICAgIH0pXG5cbiAgICB0aGlzLnNvY2tldC5jbG9zZShjb2RlLCByZWFzb24pXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBXYWl0aW5nIGZvciBTaGFyZCAjJHt0aGlzLmlkfSB0byBjbG9zZSB0aGUgc29ja2V0IHdpdGggY29kZSAke2NvZGV9LmApXG5cbiAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmUgZnVsbHkgY2xvc2VkLCBvdGhlcndpc2UgdGhlcmUnbGwgYmUgcmFjZSBjb25kaXRpb24gaXNzdWVzIGlmIHdlIHRyeSB0byBjb25uZWN0IGFnYWluLCByZXN1bHRpbmcgaW4gdW5leHBlY3RlZCBiZWhhdmlvci5cbiAgICBhd2FpdCBwcm9taXNlXG5cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBjbG9zZWQgdGhlIHNvY2tldCB3aXRoIGNvZGUgJHtjb2RlfS5gKVxuXG4gICAgLy8gUmVzZXQgdGhlIHJlc29sdmVBZnRlckNsb3NlIGZ1bmN0aW9uIGFmdGVyIGl0IGhhcyBiZWVuIHJlc29sdmVkLlxuICAgIHRoaXMucmVzb2x2ZUFmdGVyQ2xvc2UgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiBDb25uZWN0IHRoZSBzaGFyZCB3aXRoIHRoZSBnYXRld2F5IGFuZCBzdGFydCBoZWFydGJlYXRpbmcuIFRoaXMgd2lsbCBub3QgaWRlbnRpZnkgdGhlIHNoYXJkIHRvIHRoZSBnYXRld2F5LiAqL1xuICBhc3luYyBjb25uZWN0KCk6IFByb21pc2U8RGlzY29yZGVub1NoYXJkPiB7XG4gICAgLy8gT25seSBzZXQgdGhlIHNoYXJkIHRvIGBDb25uZWN0aW5nYCBzdGF0ZSxcbiAgICAvLyBpZiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IGRvZXMgbm90IGNvbWUgZnJvbSBhbiBpZGVudGlmeSBvciByZXN1bWUgYWN0aW9uLlxuICAgIGlmICghW1NoYXJkU3RhdGUuSWRlbnRpZnlpbmcsIFNoYXJkU3RhdGUuUmVzdW1pbmddLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0aW5nXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gQ29ubmVjdGluZyBTaGFyZCAjJHt0aGlzLmlkfSBzb2NrZXQuYClcblxuICAgIHRoaXMuZXZlbnRzLmNvbm5lY3Rpbmc/Lih0aGlzKVxuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh0aGlzLmNvbm5lY3Rpb25VcmwpXG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3YnLCB0aGlzLmdhdGV3YXlDb25maWcudmVyc2lvbi50b1N0cmluZygpKVxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdlbmNvZGluZycsICdqc29uJylcblxuICAgIC8vIFNldCB0aGUgY29tcHJlc3MgdXJsIHBhcmFtIGFuZCBpbml0aWFsaXplIHRoZSBkZWNvbXByZXNzaW9uIGNvbnRleHRzXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy50cmFuc3BvcnRDb21wcmVzc2lvbikge1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvbXByZXNzJywgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56bGliKSB7XG4gICAgICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcbiAgICAgICAgdGhpcy5pbmZsYXRlID0gY3JlYXRlSW5mbGF0ZSh7XG4gICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWJDb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgIGNodW5rU2l6ZTogNjQgKiAxMDI0LFxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuaW5mbGF0ZS5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdUaGUgd2FzIGFuIGVycm9yIGluIGRlY29tcHJlc3NpbmcgYSBaTGliIGNvbXByZXNzZWQgcGF5bG9hZCcsIGUpXG4gICAgICAgIH0pXG5cbiAgICAgICAgdGhpcy5pbmZsYXRlLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoIShkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHJldHVyblxuXG4gICAgICAgICAgaWYgKHRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGggKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICBuZXdCdWZmZXIuc2V0KHRoaXMuaW5mbGF0ZUJ1ZmZlcilcbiAgICAgICAgICAgIG5ld0J1ZmZlci5zZXQoZGF0YSwgdGhpcy5pbmZsYXRlQnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB0aGlzLmluZmxhdGVCdWZmZXIgPSBuZXdCdWZmZXJcblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gZGF0YVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56c3RkKSB7XG4gICAgICAgIGNvbnN0IGZ6c3RkID0gYXdhaXQgZ2V0RlpTdGQoKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignW1NoYXJkXSBcImZ6c3RkXCIgaXMgbm90IGluc3RhbGxlZC4gRGlzYWJsZWQgdHJhbnNwb3J0IGNvbXByZXNzaW9uLicpXG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ2NvbXByZXNzJylcblxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGZ6c3RkKSB7XG4gICAgICAgICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IG5ldyBmenN0ZC5EZWNvbXByZXNzKChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKGRhdGEpXG4gICAgICAgICAgICBjb25zdCBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICAgICAgICAgIHRoaXMuZGVjb21wcmVzc2lvblByb21pc2VzUXVldWUuc2hpZnQoKT8uKHBhcnNlZERhdGEpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MgJiYgdGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFBheWxvYWQgY29tcHJlc3Npb24gaGFzIGJlZW4gZGlzYWJsZWQgc2luY2UgdHJhbnNwb3J0IGNvbXByZXNzaW9uIGlzIGVuYWJsZWQgYXMgd2VsbC4nKVxuICAgICAgdGhpcy5nYXRld2F5Q29uZmlnLmNvbXByZXNzID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBXZSBjaGVjayBmb3IgYnVpbHQtaW4gV2ViU29ja2V0IGltcGxlbWVudGF0aW9ucyBpbiBCdW4gb3IgRGVubywgTm9kZUpTIHYyMiBoYXMgYW4gaW1wbGVtZW50YXRpb24gdG9vIGJ1dCBpdCBzZWVtcyB0byBiZSBsZXNzIG9wdGltaXplZCBzbyBmb3Igbm93IGl0IGlzIGJldHRlciB0byB1c2UgdGhlIHdzIG5wbSBwYWNrYWdlXG4gICAgY29uc3Qgc2hvdWxkVXNlQnVpbHRpbiA9IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdXZWJTb2NrZXQnKSAmJiAoUmVmbGVjdC5oYXMoZ2xvYmFsVGhpcywgJ0J1bicpIHx8IFJlZmxlY3QuaGFzKGdsb2JhbFRoaXMsICdEZW5vJykpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIE5vZGVXZWJTb2NrZXQgZG9lc24ndCBzdXBwb3J0IFwiZGlzcGF0Y2hFdmVudFwiLCBhbmQgd2hpbGUgd2UgZG9uJ3QgdXNlIGl0LCBpdCBpcyByZXF1aXJlZCBvbiB0aGUgXCJXZWJTb2NrZXRcIiB0eXBlXG4gICAgY29uc3Qgc29ja2V0OiBXZWJTb2NrZXQgPSBzaG91bGRVc2VCdWlsdGluID8gbmV3IFdlYlNvY2tldCh1cmwpIDogbmV3IE5vZGVXZWJTb2NrZXQodXJsKVxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG5cbiAgICAvLyBCeSBkZWZhdWx0IFdlYlNvY2tldCB3aWxsIGdpdmUgdXMgYSBCbG9iLCB0aGlzIGNoYW5nZXMgaXQgc28gdGhhdCBpdCBnaXZlcyB1cyBhbiBBcnJheUJ1ZmZlclxuICAgIHNvY2tldC5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJ1xuXG4gICAgc29ja2V0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXZlbnQpXG4gICAgc29ja2V0Lm9uY2xvc2UgPSAoY2xvc2VFdmVudCkgPT4gdGhpcy5oYW5kbGVDbG9zZShjbG9zZUV2ZW50KVxuICAgIHNvY2tldC5vbm1lc3NhZ2UgPSAobWVzc2FnZUV2ZW50KSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UobWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQgdG8gYFVuaWRlbnRpZmllZGAgc3RhdGUgaWYgdGhlIGNvbm5lY3Rpb24gcmVxdWVzdCBkb2VzIG5vdCBjb21lIGZyb20gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgaWYgKCFbU2hhcmRTdGF0ZS5JZGVudGlmeWluZywgU2hhcmRTdGF0ZS5SZXN1bWluZ10uaW5jbHVkZXModGhpcy5zdGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IHNvY2tldCBjb25uZWN0ZWQuYClcblxuICAgICAgICB0aGlzLmV2ZW50cy5jb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIHJlc29sdmUodGhpcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZ5IHRoZSBzaGFyZCB0byB0aGUgZ2F0ZXdheS4gSWYgbm90IGNvbm5lY3RlZCwgdGhpcyB3aWxsIGFsc28gY29ubmVjdCB0aGUgc2hhcmQgdG8gdGhlIGdhdGV3YXkuXG4gICAqIEBwYXJhbSBieXBhc3NSZXF1ZXN0IC0gV2hldGhlciB0byBieXBhc3MgdGhlIHJlcXVlc3RJZGVudGlmeSBoYW5kbGVyIGFuZCBpZGVudGlmeSBpbW1lZGlhdGVseS4gVGhpcyBzaG91bGQgYmUgdXNlZCBjYXJlZnVsbHkgYXMgaXQgY2FuIGNhdXNlIGludmFsaWQgc2Vzc2lvbnMuXG4gICAqL1xuICBhc3luYyBpZGVudGlmeShieXBhc3NSZXF1ZXN0ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIG5ldyBpZGVudGlmeSBoYXMgYmVlbiByZXF1ZXN0ZWQgZXZlbiB0aG91Z2ggdGhlcmUgaXMgYWxyZWFkeSBhIGNvbm5lY3Rpb24gb3Blbi5cbiAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBjbG9zZSB0aGUgb2xkIGNvbm5lY3Rpb24gYW5kIGhlYXJ0YmVhdGluZyBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLlxuICAgIGlmICh0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBJZGVudGlmeWluZyBvcGVuIFNoYXJkICMke3RoaXMuaWR9LCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uYClcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmcsICdSZS1pZGVudGlmeWluZyBjbG9zdXJlIG9mIG9sZCBjb25uZWN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKCFieXBhc3NSZXF1ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RJZGVudGlmeSgpXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICB0aGlzLmV2ZW50cy5pZGVudGlmeWluZz8uKHRoaXMpXG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBzaGFyZCBpcyBpbiBIZWFydGJlYXRpbmcgc3RhdGUgYnV0IG5vdCBpZGVudGlmaWVkLFxuICAgIC8vIHNvIGNoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhIGdhdGV3YXkgY29ubmVjdGlvbiBleGlzdGluZy5cbiAgICAvLyBJZiBub3Qgd2UgbmVlZCB0byBjcmVhdGUgb25lIGJlZm9yZSB3ZSBpZGVudGlmeS5cbiAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdCgpXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2VuZGluZyBJZGVudGlmeSBwYXlsb2FkIGZvciBTaGFyZCAjJHt0aGlzLmlkfS5gKVxuXG4gICAgdGhpcy5zZW5kKFxuICAgICAge1xuICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSWRlbnRpZnksXG4gICAgICAgIGQ6IHtcbiAgICAgICAgICB0b2tlbjogYEJvdCAke3RoaXMuZ2F0ZXdheUNvbmZpZy50b2tlbn1gLFxuICAgICAgICAgIGNvbXByZXNzOiB0aGlzLmdhdGV3YXlDb25maWcuY29tcHJlc3MsXG4gICAgICAgICAgcHJvcGVydGllczogdGhpcy5nYXRld2F5Q29uZmlnLnByb3BlcnRpZXMsXG4gICAgICAgICAgaW50ZW50czogdGhpcy5nYXRld2F5Q29uZmlnLmludGVudHMsXG4gICAgICAgICAgc2hhcmQ6IFt0aGlzLmlkLCB0aGlzLmdhdGV3YXlDb25maWcudG90YWxTaGFyZHNdLFxuICAgICAgICAgIHByZXNlbmNlOiBhd2FpdCB0aGlzLm1ha2VQcmVzZW5jZSgpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVzLnNldCgnUkVBRFknLCAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICAgIC8vIFdoZW4gaWRlbnRpZnlpbmcgdG9vIGZhc3QsIERpc2NvcmQgc2VuZHMgYW4gaW52YWxpZCBzZXNzaW9uIHBheWxvYWQuXG4gICAgICAvLyBUaGlzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCB0aG91Z2ggYW5kIHRoZSBzaGFyZCBzdGFydHMgYSBuZXcgaWRlbnRpZnkgYWN0aW9uLlxuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ0lOVkFMSURfU0VTU0lPTicsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFQURZJylcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogQ2hlY2sgd2hldGhlciB0aGUgY29ubmVjdGlvbiB0byBEaXNjb3JkIGlzIGN1cnJlbnRseSBvcGVuLiAqL1xuICBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc29ja2V0Py5yZWFkeVN0YXRlID09PSBOb2RlV2ViU29ja2V0Lk9QRU5cbiAgfVxuXG4gIC8qKiBBdHRlbXB0IHRvIHJlc3VtZSB0aGUgcHJldmlvdXMgc2hhcmRzIHNlc3Npb24gd2l0aCB0aGUgZ2F0ZXdheS4gKi9cbiAgYXN5bmMgcmVzdW1lKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIFNoYXJkICMke3RoaXMuaWR9YClcblxuICAgIC8vIEl0IGhhcyBiZWVuIHJlcXVlc3RlZCB0byByZXN1bWUgdGhlIFNoYXJkcyBzZXNzaW9uLlxuICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgc2hhcmQgaXMgc3RpbGwgY29ubmVjdGVkIHdpdGggRGlzY29yZCdzIGdhdGV3YXkgdGhlcmVmb3JlIHdlIG5lZWQgdG8gZm9yY2VmdWxseSBjbG9zZSBpdC5cbiAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVzdW1pbmcgb3BlbiBTaGFyZCAjJHt0aGlzLmlkfSwgY2xvc2luZyB0aGUgY29ubmVjdGlvbmApXG4gICAgICBhd2FpdCB0aGlzLmNsb3NlKFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbiwgJ1JlY29ubmVjdGluZyB0aGUgc2hhcmQsIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24uJylcbiAgICB9XG5cbiAgICAvLyBTaGFyZCBoYXMgbmV2ZXIgaWRlbnRpZmllZCwgc28gd2UgY2Fubm90IHJlc3VtZS5cbiAgICBpZiAoIXRoaXMuc2Vzc2lvbklkKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBUcnlpbmcgdG8gcmVzdW1lIFNoYXJkICMke3RoaXMuaWR9IHdpdGhvdXQgdGhlIHNlc3Npb24gaWQuIElkZW50aWZ5aW5nIHRoZSBzaGFyZCBpbnN0ZWFkLmApXG5cbiAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuUmVzdW1pbmdcblxuICAgIC8vIEJlZm9yZSB3ZSBjYW4gcmVzdW1lLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb25uZWN0aW9uIHdpdGggRGlzY29yZCdzIGdhdGV3YXkuXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0KClcblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFJlc3VtaW5nIFNoYXJkICMke3RoaXMuaWR9IGNvbm5lY3RlZC4gU2Vzc2lvbiBpZDogJHt0aGlzLnNlc3Npb25JZH0gfCBTZXF1ZW5jZTogJHt0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJ9YClcblxuICAgIHRoaXMuc2VuZChcbiAgICAgIHtcbiAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLlJlc3VtZSxcbiAgICAgICAgZDoge1xuICAgICAgICAgIHRva2VuOiBgQm90ICR7dGhpcy5nYXRld2F5Q29uZmlnLnRva2VufWAsXG4gICAgICAgICAgc2Vzc2lvbl9pZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgc2VxOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIgPz8gMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0cnVlLFxuICAgIClcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ1JFU1VNRUQnLCAoKSA9PiByZXNvbHZlKCkpXG5cbiAgICAgIC8vIElmIGl0IGlzIGF0dGVtcHRlZCB0byByZXN1bWUgd2l0aCBhbiBpbnZhbGlkIHNlc3Npb24gaWQsIERpc2NvcmQgc2VuZHMgYW4gaW52YWxpZCBzZXNzaW9uIHBheWxvYWRcbiAgICAgIC8vIE5vdCBlcnJvcmluZyBoZXJlIHNpbmNlIGl0IGlzIGVhc3kgdGhhdCB0aGlzIGhhcHBlbnMsIGFsc28gaXQgd291bGQgYmUgbm90IGNhdGNoYWJsZVxuICAgICAgdGhpcy5yZXNvbHZlcy5zZXQoJ0lOVkFMSURfU0VTU0lPTicsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlcy5kZWxldGUoJ1JFU1VNRUQnKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZSB0byBEaXNjb3JkLlxuICAgKiBAcGFyYW0gaGlnaFByaW9yaXR5IC0gV2hldGhlciB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIHNlbmQgYXNhcC5cbiAgICovXG4gIGFzeW5jIHNlbmQobWVzc2FnZTogU2hhcmRTb2NrZXRSZXF1ZXN0LCBoaWdoUHJpb3JpdHk6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEJlZm9yZSBhY3F1aXJpbmcgYSB0b2tlbiBmcm9tIHRoZSBidWNrZXQsIGNoZWNrIHdoZXRoZXIgdGhlIHNoYXJkIGlzIGN1cnJlbnRseSBvZmZsaW5lIG9yIG5vdC5cbiAgICAvLyBFbHNlIGJ1Y2tldCBhbmQgdG9rZW4gd2FpdCB0aW1lIGp1c3QgZ2V0IHdhc3RlZC5cbiAgICBhd2FpdCB0aGlzLmNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHkpXG5cbiAgICBhd2FpdCB0aGlzLmJ1Y2tldC5hY3F1aXJlKGhpZ2hQcmlvcml0eSlcblxuICAgIC8vIEl0J3MgcG9zc2libGUsIHRoYXQgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZSBhZnRlciBhIHRva2VuIGhhcyBiZWVuIGFjcXVpcmVkIGZyb20gdGhlIGJ1Y2tldC5cbiAgICBhd2FpdCB0aGlzLmNoZWNrT2ZmbGluZShoaWdoUHJpb3JpdHkpXG5cbiAgICB0aGlzLnNvY2tldD8uc2VuZChKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcbiAgfVxuXG4gIC8qKiBTaHV0ZG93biB0aGUgdGhpcy4gRm9yY2VmdWxseSBkaXNjb25uZWN0IHRoZSBzaGFyZCBmcm9tIERpc2NvcmQuIFRoZSBzaGFyZCBtYXkgbm90IGF0dGVtcHQgdG8gcmVjb25uZWN0IHdpdGggRGlzY29yZC4gKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuU2h1dGRvd24sICdTaGFyZCBzaHV0dGluZyBkb3duLicpXG4gICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuT2ZmbGluZVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGdhdGV3YXkgY29ubmVjdGlvbiBlcnJvciAqL1xuICBoYW5kbGVFcnJvcihlcnJvcjogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5lcnJvcihgW1NoYXJkXSBUaGVyZSB3YXMgYW4gZXJyb3IgY29ubmVjdGluZyBTaGFyZCAjJHt0aGlzLmlkfS5gLCBlcnJvcilcbiAgfVxuXG4gIC8qKiBIYW5kbGUgYSBnYXRld2F5IGNvbm5lY3Rpb24gY2xvc2UuICovXG4gIGFzeW5jIGhhbmRsZUNsb3NlKGNsb3NlOiBDbG9zZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zb2NrZXQgPSB1bmRlZmluZWRcbiAgICB0aGlzLnN0b3BIZWFydGJlYXRpbmcoKVxuXG4gICAgLy8gQ2xlYXIgdGhlIHpsaWIvenN0ZCBkYXRhXG4gICAgdGhpcy5pbmZsYXRlID0gdW5kZWZpbmVkXG4gICAgdGhpcy56c3RkRGVjb21wcmVzcyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuaW5mbGF0ZUJ1ZmZlciA9IG51bGxcbiAgICB0aGlzLmRlY29tcHJlc3Npb25Qcm9taXNlc1F1ZXVlID0gW11cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGNsb3NlZCB3aXRoIGNvZGUgJHtjbG9zZS5jb2RlfSR7Y2xvc2UucmVhc29uID8gYCwgYW5kIHJlYXNvbjogJHtjbG9zZS5yZWFzb259YCA6ICcnfS5gKVxuXG4gICAgLy8gUmVzb2x2ZSB0aGUgY2xvc2UgcHJvbWlzZSBpZiBpdCBleGlzdHNcbiAgICB0aGlzLnJlc29sdmVBZnRlckNsb3NlPy4oY2xvc2UpXG5cbiAgICBzd2l0Y2ggKGNsb3NlLmNvZGUpIHtcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlRlc3RpbmdGaW5pc2hlZDoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5PZmZsaW5lXG4gICAgICAgIHRoaXMuZXZlbnRzLmRpc2Nvbm5lY3RlZD8uKHRoaXMpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBPbiB0aGVzZSBjb2RlcyBhIG1hbnVhbCBzdGFydCB3aWxsIGJlIGRvbmUuXG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5TaHV0ZG93bjpcbiAgICAgIGNhc2UgU2hhcmRTb2NrZXRDbG9zZUNvZGVzLlJlSWRlbnRpZnlpbmc6XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXNoYXJkZWQ6XG4gICAgICBjYXNlIFNoYXJkU29ja2V0Q2xvc2VDb2Rlcy5SZXN1bWVDbG9zaW5nT2xkQ29ubmVjdGlvbjoge1xuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWRcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIFdoZW4gdGhlc2UgY29kZXMgYXJlIHJlY2VpdmVkIHNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZy5cbiAgICAgIC8vIE9uIHRob3NlIHdlIGNhbm5vdCBzdGFydCBhIHJlY29ubmVjdCBhdHRlbXB0LlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkF1dGhlbnRpY2F0aW9uRmFpbGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRTaGFyZDpcbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5TaGFyZGluZ1JlcXVpcmVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRBcGlWZXJzaW9uOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRJbnRlbnRzOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkRpc2FsbG93ZWRJbnRlbnRzOiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLk9mZmxpbmVcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY2xvc2UucmVhc29uIHx8ICdEaXNjb3JkIGdhdmUgbm8gcmVhc29uISBHRyEgWW91IGJyb2tlIERpc2NvcmQhJylcbiAgICAgIH1cbiAgICAgIC8vIEdhdGV3YXkgY29ubmVjdGlvbiBjbG9zZXMgd2hpY2ggcmVxdWlyZSBhIG5ldyBpZGVudGlmeS5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3RBdXRoZW50aWNhdGVkOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkludmFsaWRTZXE6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuU2Vzc2lvblRpbWVkT3V0OiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIFNoYXJkICMke3RoaXMuaWR9IGNsb3NlZCByZXF1aXJpbmcgcmUtaWRlbnRpZnkuYClcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNoYXJkU3RhdGUuSWRlbnRpZnlpbmdcbiAgICAgICAgdGhpcy5ldmVudHMuZGlzY29ubmVjdGVkPy4odGhpcylcblxuICAgICAgICBhd2FpdCB0aGlzLmlkZW50aWZ5KClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBUaGlzIGNhc2UgbXVzdCBhbHdheXMgYmUgcmlnaHQgYWJvdmUgdGhlIGNhc2VzIHRoYXQgcnVucyB3aXRoIGRlZmF1bHQgY2FzZSBiZWNhdXNlIG9mIGhvdyBzd2l0Y2ggd29ya3Mgd2hlbiB5b3UgZG9uJ3QgYnJlYWsgLyByZXR1cm4sIG1vcmUgaW5mbyBiZWxvdy5cbiAgICAgIGNhc2UgR2F0ZXdheUNsb3NlRXZlbnRDb2Rlcy5Ob3JtYWxDbG9zdXJlOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLkdvaW5nQXdheToge1xuICAgICAgICAvLyBJZiB0aGUgc2hhcmQgaXMgbWFya2VkIGFzIGdvaW5nT2ZmbGluZSwgaXQgc3RheXMgZGlzY29ubmVjdGVkLlxuICAgICAgICBpZiAodGhpcy5nb2luZ09mZmxpbmUpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5EaXNjb25uZWN0ZWRcbiAgICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgICAgdGhpcy5nb2luZ09mZmxpbmUgPSBmYWxzZVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdGhlIHNoYXJkIHRvIGdvIHRocm91Z2ggdGhlIGRlZmF1bHQgY2FzZSB3aGVyZSBpdCBnZXRzIHJlc3VtZWQsIGFzIGl0IG1pZ2h0IGJlIGFuIHVuZXhwZWN0ZWQgY2xvc3VyZSBmcm9tIERpc2NvcmQgb3IgQ2xvdWRmbGFyZSBmb3IgZXhhbXBsZSwgc28gd2UgZG9uJ3QgdXNlIGJyZWFrIC8gcmV0dXJuIGhlcmUuXG4gICAgICB9XG4gICAgICAvLyBHYXRld2F5IGNvbm5lY3Rpb24gY2xvc2VzIG9uIHdoaWNoIGEgcmVzdW1lIGlzIGFsbG93ZWQuXG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuVW5rbm93bkVycm9yOlxuICAgICAgY2FzZSBHYXRld2F5Q2xvc2VFdmVudENvZGVzLlVua25vd25PcGNvZGU6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuRGVjb2RlRXJyb3I6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuUmF0ZUxpbWl0ZWQ6XG4gICAgICBjYXNlIEdhdGV3YXlDbG9zZUV2ZW50Q29kZXMuQWxyZWFkeUF1dGhlbnRpY2F0ZWQ6XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCB3aGVyZSB3ZSByZXN1bWUgZm9yZXZlciwgc28gaWYgd2Ugd2VyZSBhbHJlYWR5IHJlc3VtaW5nIHdlIGlkZW50aWZ5IGluc3RlYWRcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhdGUgPT09IFNoYXJkU3RhdGUuUmVzdW1pbmcgPyBTaGFyZFN0YXRlLklkZW50aWZ5aW5nIDogU2hhcmRTdGF0ZS5SZXN1bWluZ1xuICAgICAgICB0aGlzLmV2ZW50cy5kaXNjb25uZWN0ZWQ/Lih0aGlzKVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSBTaGFyZFN0YXRlLlJlc3VtaW5nKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaWRlbnRpZnkoKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhbiBpbmNvbWluZyBnYXRld2F5IG1lc3NhZ2UuICovXG4gIGFzeW5jIGhhbmRsZU1lc3NhZ2UobWVzc2FnZTogTWVzc2FnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVGhlIHdzIG5wbSBwYWNrYWdlIHdpbGwgdXNlIGEgQnVmZmVyLCB3aGlsZSB0aGUgZ2xvYmFsIGJ1aWx0LWluIHdpbGwgdXNlIEFycmF5QnVmZmVyXG4gICAgY29uc3QgaXNDb21wcmVzc2VkID0gbWVzc2FnZS5kYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgbWVzc2FnZS5kYXRhIGluc3RhbmNlb2YgQnVmZmVyXG5cbiAgICBjb25zdCBkYXRhID0gaXNDb21wcmVzc2VkID8gYXdhaXQgdGhpcy5kZWNvbXByZXNzUGFja2V0KG1lc3NhZ2UuZGF0YSkgOiAoSlNPTi5wYXJzZShtZXNzYWdlLmRhdGEpIGFzIERpc2NvcmRHYXRld2F5UGF5bG9hZClcblxuICAgIC8vIENoZWNrIGlmIHRoZSBkZWNvbXByZXNzaW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bFxuICAgIGlmICghZGF0YSkgcmV0dXJuXG5cbiAgICBhd2FpdCB0aGlzLmhhbmRsZURpc2NvcmRQYWNrZXQoZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXByZXNzIGEgemxpYi96c3RkIGNvbXByZXNzZWQgcGFja2V0XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBhc3luYyBkZWNvbXByZXNzUGFja2V0KGRhdGE6IEFycmF5QnVmZmVyIHwgQnVmZmVyKTogUHJvbWlzZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQgfCBudWxsPiB7XG4gICAgLy8gQSBidWZmZXIgaXMgYSBVaW50OEFycmF5IHVuZGVyIHRoZSBob29kLiBBbiBBcnJheUJ1ZmZlciBpcyBnZW5lcmljLCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgVWludDhBcnJheSB0aGF0IHVzZXMgdGhlIHdob2xlIEFycmF5QnVmZmVyXG4gICAgY29uc3QgY29tcHJlc3NlZERhdGE6IFVpbnQ4QXJyYXkgPSBkYXRhIGluc3RhbmNlb2YgQnVmZmVyID8gZGF0YSA6IG5ldyBVaW50OEFycmF5KGRhdGEpXG5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56bGliKSB7XG4gICAgICBpZiAoIXRoaXMuaW5mbGF0ZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5mYXRhbCgnW1NoYXJkXSB6bGliLXN0cmVhbSB0cmFuc3BvcnQgY29tcHJlc3Npb24gd2FzIGVuYWJsZWQgYnV0IG5vIGluc3RhbmNlIG9mIEluZmxhdGUgd2FzIGZvdW5kLicpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIC8vIEFsaWFzLCB1c2VkIHRvIGF2b2lkIHNvbWUgbnVsbCBjaGVja3MgaW4gdGhlIFByb21pc2UgY29uc3RydWN0b3JcbiAgICAgIGNvbnN0IGluZmxhdGUgPSB0aGlzLmluZmxhdGVcblxuICAgICAgY29uc3Qgd3JpdGVQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpbmZsYXRlLndyaXRlKGNvbXByZXNzZWREYXRhLCAnYmluYXJ5JywgKGVycm9yKSA9PiAoZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZSgpKSlcbiAgICAgIH0pXG5cbiAgICAgIGlmICghZW5kc1dpdGhNYXJrZXIoY29tcHJlc3NlZERhdGEsIFpMSUJfU1lOQ19GTFVTSCkpIHJldHVybiBudWxsXG5cbiAgICAgIGF3YWl0IHdyaXRlUHJvbWlzZVxuXG4gICAgICBpZiAoIXRoaXMuaW5mbGF0ZUJ1ZmZlcikge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdbU2hhcmRdIFRoZSBaTGliIGluZmxhdGUgYnVmZmVyIHdhcyBjbGVhcmVkIGF0IGFuIHVuZXhwZWN0ZWQgbW9tZW50LicpXG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlY29kZWREYXRhID0gdGhpcy50ZXh0RGVjb2Rlci5kZWNvZGUodGhpcy5pbmZsYXRlQnVmZmVyKVxuICAgICAgdGhpcy5pbmZsYXRlQnVmZmVyID0gbnVsbFxuXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkRGF0YSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nYXRld2F5Q29uZmlnLnRyYW5zcG9ydENvbXByZXNzaW9uID09PSBUcmFuc3BvcnRDb21wcmVzc2lvbi56c3RkKSB7XG4gICAgICBpZiAoIXRoaXMuenN0ZERlY29tcHJlc3MpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZmF0YWwoJ1tTaGFyZF0genN0ZC1zdHJlYW0gdHJhbnNwb3J0IGNvbXByZXNzaW9uIHdhcyBlbmFibGVkIGJ1dCBubyBpbnN0YW5jZSBvZiBEZWNvbXByZXNzIHdhcyBmb3VuZC4nKVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICB0aGlzLnpzdGREZWNvbXByZXNzLnB1c2goY29tcHJlc3NlZERhdGEpXG5cbiAgICAgIGNvbnN0IGRlY29tcHJlc3Npb25Qcm9taXNlID0gbmV3IFByb21pc2U8RGlzY29yZEdhdGV3YXlQYXlsb2FkPigocikgPT4gdGhpcy5kZWNvbXByZXNzaW9uUHJvbWlzZXNRdWV1ZS5wdXNoKHIpKVxuICAgICAgcmV0dXJuIGF3YWl0IGRlY29tcHJlc3Npb25Qcm9taXNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2F0ZXdheUNvbmZpZy5jb21wcmVzcykge1xuICAgICAgY29uc3QgZGVjb21wcmVzc2VkID0gaW5mbGF0ZVN5bmMoY29tcHJlc3NlZERhdGEpXG4gICAgICBjb25zdCBkZWNvZGVkRGF0YSA9IHRoaXMudGV4dERlY29kZXIuZGVjb2RlKGRlY29tcHJlc3NlZClcblxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZERhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKiBIYW5kbGVzIGEgaW5jb21pbmcgZ2F0ZXdheSBwYWNrZXQuICovXG4gIGFzeW5jIGhhbmRsZURpc2NvcmRQYWNrZXQocGFja2V0OiBEaXNjb3JkR2F0ZXdheVBheWxvYWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBFZGdlIGNhc2Ugc3RhcnQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8vaXNzdWVzLzIzMTFcbiAgICB0aGlzLmhlYXJ0Lmxhc3RBY2sgPSBEYXRlLm5vdygpXG4gICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSB0cnVlXG4gICAgLy8gRWRnZSBjYXNlIGVuZCFcblxuICAgIHN3aXRjaCAocGFja2V0Lm9wKSB7XG4gICAgICBjYXNlIEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdDoge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHJldHVyblxuXG4gICAgICAgIHRoaXMuaGVhcnQubGFzdEJlYXQgPSBEYXRlLm5vdygpXG4gICAgICAgIC8vIERpc2NvcmQgcmFuZG9tbHkgc2VuZHMgdGhpcyByZXF1aXJpbmcgYW4gaW1tZWRpYXRlIGhlYXJ0YmVhdCBiYWNrLlxuICAgICAgICAvLyBVc2luZyBhIGRpcmVjdCBzb2NrZXQuc2VuZCBjYWxsIGhlcmUgYmVjYXVzZSBoZWFydGJlYXQgcmVxdWVzdHMgYXJlIHJlc2VydmVkIGJ5IHVzLlxuICAgICAgICB0aGlzLnNvY2tldD8uc2VuZChcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvcDogR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0LFxuICAgICAgICAgICAgZDogdGhpcy5wcmV2aW91c1NlcXVlbmNlTnVtYmVyLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHRoaXMuZXZlbnRzLmhlYXJ0YmVhdD8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSGVsbG86IHtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSAocGFja2V0LmQgYXMgRGlzY29yZEhlbGxvKS5oZWFydGJlYXRfaW50ZXJ2YWxcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gU2hhcmQgIyR7dGhpcy5pZH0gcmVjZWl2ZWQgSGVsbG9gKVxuICAgICAgICB0aGlzLnN0YXJ0SGVhcnRiZWF0aW5nKGludGVydmFsKVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTaGFyZFN0YXRlLlJlc3VtaW5nKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFF1ZXVlID0gWy4uLnRoaXMuYnVja2V0LnF1ZXVlXVxuICAgICAgICAgIC8vIEhFTExPIGhhcyBiZWVuIHNlbmQgb24gYSBub24gcmVzdW1lIGFjdGlvbi5cbiAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHNoYXJkIHN0YXJ0cyBhIG5ldyBzZXNzaW9uLFxuICAgICAgICAgIC8vIHRoZXJlZm9yZSB0aGUgcmF0ZSBsaW1pdCBpbnRlcnZhbCBoYXMgYmVlbiByZXNldCB0b28uXG4gICAgICAgICAgdGhpcy5idWNrZXQgPSBuZXcgTGVha3lCdWNrZXQoe1xuICAgICAgICAgICAgbWF4OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgICAgICAgcmVmaWxsSW50ZXJ2YWw6IDYwMDAwLFxuICAgICAgICAgICAgcmVmaWxsQW1vdW50OiB0aGlzLmNhbGN1bGF0ZVNhZmVSZXF1ZXN0cygpLFxuICAgICAgICAgICAgbG9nZ2VyOiB0aGlzLmxvZ2dlcixcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gUXVldWUgc2hvdWxkIG5vdCBiZSBsb3N0IG9uIGEgcmUtaWRlbnRpZnkuXG4gICAgICAgICAgdGhpcy5idWNrZXQucXVldWUudW5zaGlmdCguLi5jdXJyZW50UXVldWUpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV2ZW50cy5oZWxsbz8uKHRoaXMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSGVhcnRiZWF0QUNLOiB7XG4gICAgICAgIC8vIE1hbnVhbGx5IGNhbGN1bGF0aW5nIHRoZSByb3VuZCB0cmlwIHRpbWUgZm9yIHVzZXJzIHdobyBuZWVkIGl0LlxuICAgICAgICBpZiAodGhpcy5oZWFydC5sYXN0QmVhdCkge1xuICAgICAgICAgIHRoaXMuaGVhcnQucnR0ID0gdGhpcy5oZWFydC5sYXN0QWNrIC0gdGhpcy5oZWFydC5sYXN0QmVhdFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0QWNrPy4odGhpcylcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSBHYXRld2F5T3Bjb2Rlcy5SZWNvbm5lY3Q6IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFtTaGFyZF0gUmVjZWl2ZWQgYSBSZWNvbm5lY3QgZm9yIFNoYXJkICMke3RoaXMuaWR9YClcbiAgICAgICAgdGhpcy5ldmVudHMucmVxdWVzdGVkUmVjb25uZWN0Py4odGhpcylcblxuICAgICAgICBhd2FpdCB0aGlzLnJlc3VtZSgpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgR2F0ZXdheU9wY29kZXMuSW52YWxpZFNlc3Npb246IHtcbiAgICAgICAgY29uc3QgcmVzdW1hYmxlID0gcGFja2V0LmQgYXMgYm9vbGVhblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBSZWNlaXZlZCBJbnZhbGlkIFNlc3Npb24gZm9yIFNoYXJkICMke3RoaXMuaWR9IHdpdGggcmVzdW1hYmxlIGFzICR7cmVzdW1hYmxlfWApXG5cbiAgICAgICAgdGhpcy5ldmVudHMuaW52YWxpZFNlc3Npb24/Lih0aGlzLCByZXN1bWFibGUpXG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB3YWl0IGZvciBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIDEgYW5kIDVcbiAgICAgICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNyZXN1bWluZ1xuICAgICAgICBhd2FpdCBkZWxheShNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogNCArIDEpICogMTAwMCkpXG5cbiAgICAgICAgdGhpcy5yZXNvbHZlcy5nZXQoJ0lOVkFMSURfU0VTU0lPTicpPy4ocGFja2V0KVxuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnSU5WQUxJRF9TRVNTSU9OJylcblxuICAgICAgICAvLyBXaGVuIHJlc3VtYWJsZSBpcyBmYWxzZSB3ZSBuZWVkIHRvIHJlLWlkZW50aWZ5XG4gICAgICAgIGlmICghcmVzdW1hYmxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pZGVudGlmeSgpXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHNlc3Npb24gaXMgaW52YWxpZCBidXQgYXBwYXJlbnRseSBpdCBpcyByZXN1bWFibGVcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN1bWUoKVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChwYWNrZXQudCkge1xuICAgICAgY2FzZSAnUkVTVU1FRCc6XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTaGFyZFN0YXRlLkNvbm5lY3RlZFxuICAgICAgICB0aGlzLmV2ZW50cy5yZXN1bWVkPy4odGhpcylcblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSByZWNlaXZlZCBSRVNVTUVEYClcblxuICAgICAgICAvLyBDb250aW51ZSB0aGUgcmVxdWVzdHMgd2hpY2ggaGF2ZSBiZWVuIHF1ZXVlZCBzaW5jZSB0aGUgc2hhcmQgd2VudCBvZmZsaW5lLlxuICAgICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUuZm9yRWFjaCgocmVzb2x2ZSkgPT4gcmVzb2x2ZSgpKVxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBsZW5ndGggdG8gMCB3aWxsIGRlbGV0ZSB0aGUgZWxlbWVudHMgaW4gaXRcbiAgICAgICAgdGhpcy5vZmZsaW5lU2VuZFF1ZXVlLmxlbmd0aCA9IDBcblxuICAgICAgICB0aGlzLnJlc29sdmVzLmdldCgnUkVTVU1FRCcpPy4ocGFja2V0KVxuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVTVU1FRCcpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdSRUFEWSc6IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHBhY2tldC5kIGFzIERpc2NvcmRSZWFkeVxuICAgICAgICB0aGlzLmV2ZW50cy5yZWFkeT8uKHRoaXMpXG5cbiAgICAgICAgLy8gSW1wb3J0YW50IGZvciBmdXR1cmUgcmVzdW1lcy5cbiAgICAgICAgdGhpcy5yZXN1bWVHYXRld2F5VXJsID0gcGF5bG9hZC5yZXN1bWVfZ2F0ZXdheV91cmxcbiAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBwYXlsb2FkLnNlc3Npb25faWRcblxuICAgICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5Db25uZWN0ZWRcblxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSByZWNlaXZlZCBSRUFEWWApXG5cbiAgICAgICAgLy8gQ29udGludWUgdGhlIHJlcXVlc3RzIHdoaWNoIGhhdmUgYmVlbiBxdWV1ZWQgc2luY2UgdGhlIHNoYXJkIHdlbnQgb2ZmbGluZS5cbiAgICAgICAgLy8gSW1wb3J0YW50IHdoZW4gdGhpcyBpcyBhIHJlLWlkZW50aWZ5XG4gICAgICAgIHRoaXMub2ZmbGluZVNlbmRRdWV1ZS5mb3JFYWNoKChyZXNvbHZlKSA9PiByZXNvbHZlKCkpXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGxlbmd0aCB0byAwIHdpbGwgZGVsZXRlIHRoZSBlbGVtZW50cyBpbiBpdFxuICAgICAgICB0aGlzLm9mZmxpbmVTZW5kUXVldWUubGVuZ3RoID0gMFxuXG4gICAgICAgIHRoaXMucmVzb2x2ZXMuZ2V0KCdSRUFEWScpPy4ocGFja2V0KVxuICAgICAgICB0aGlzLnJlc29sdmVzLmRlbGV0ZSgnUkVBRFknKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIGl0IGlzIHByZXNlbnRcbiAgICAvLyBgc2AgY2FuIGJlIGVpdGhlciBgbnVsbGAgb3IgYSBgbnVtYmVyYC5cbiAgICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHVwZGF0ZSBtaXNzZXMgd2hlbiBgc2AgaXMgYDBgIHdlIGNoZWNrIGFnYWluc3QgbnVsbC5cbiAgICBpZiAocGFja2V0LnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlciA9IHBhY2tldC5zXG4gICAgfVxuXG4gICAgdGhpcy5mb3J3YXJkVG9Cb3QocGFja2V0KVxuICB9XG5cbiAgZm9yd2FyZFRvQm90KHBhY2tldDogRGlzY29yZEdhdGV3YXlQYXlsb2FkKTogdm9pZCB7XG4gICAgLy8gVGhlIG5lY2Vzc2FyeSBoYW5kbGluZyByZXF1aXJlZCBmb3IgdGhlIFNoYXJkcyBjb25uZWN0aW9uIGhhcyBiZWVuIGZpbmlzaGVkLlxuICAgIC8vIE5vdyB0aGUgZXZlbnQgY2FuIGJlIHNhZmVseSBmb3J3YXJkZWQuXG4gICAgdGhpcy5ldmVudHMubWVzc2FnZT8uKHRoaXMsIGNhbWVsaXplKHBhY2tldCkpXG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgaW4gb3JkZXIgdG8gbWFrZSB0aGUgc2hhcmRzIHByZXNlbmNlLlxuICAgKiBhc3luYyBpbiBjYXNlIGRldnMgY3JlYXRlIHRoZSBwcmVzZW5jZSBiYXNlZCBvbiBlZy4gZGF0YWJhc2UgdmFsdWVzLlxuICAgKiBQYXNzaW5nIHRoZSBzaGFyZCdzIGlkIHRoZXJlIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB0aGUgZGV2IHRvIHVzZSB0aGlzIGZ1bmN0aW9uLlxuICAgKi9cbiAgYXN5bmMgbWFrZVByZXNlbmNlKCk6IFByb21pc2U8RGlzY29yZFVwZGF0ZVByZXNlbmNlIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgbWFuYWdlbWVudCBwcm9jZXNzLCBpbiBvcmRlciB0byBrbm93IHdoZXRoZXIgaXRzIGZyZWUgdG8gaWRlbnRpZnkuXG4gICAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXNvbHZlcywgdGhpcyBtZWFucyB0aGF0IHRoZSBzaGFyZCBpcyBhbGxvd2VkIHRvIHNlbmQgYW4gaWRlbnRpZnkgcGF5bG9hZCB0byBkaXNjb3JkLlxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdElkZW50aWZ5KCk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKiogU3RhcnQgc2VuZGluZyBoZWFydGJlYXQgcGF5bG9hZHMgdG8gRGlzY29yZCBpbiB0aGUgcHJvdmlkZWQgaW50ZXJ2YWwuICovXG4gIHN0YXJ0SGVhcnRiZWF0aW5nKGludGVydmFsOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTdGFydCBoZWFydGJlYXRpbmcgb24gU2hhcmQgIyR7dGhpcy5pZH1gKVxuXG4gICAgLy8gSWYgb2xkIGhlYXJ0YmVhc3QgZXhpc3QgbGlrZSBhZnRlciByZXN1bWUsIGNsZWFyIHRoZSBvbGQgb25lcy5cbiAgICB0aGlzLnN0b3BIZWFydGJlYXRpbmcoKVxuXG4gICAgdGhpcy5oZWFydC5pbnRlcnZhbCA9IGludGVydmFsXG5cbiAgICAvLyBPbmx5IHNldCB0aGUgc2hhcmQncyBzdGF0ZSB0byBgVW5pZGVudGlmaWVkYFxuICAgIC8vIGlmIGhlYXJ0YmVhdGluZyBoYXMgbm90IGJlZW4gc3RhcnRlZCBkdWUgdG8gYW4gaWRlbnRpZnkgb3IgcmVzdW1lIGFjdGlvbi5cbiAgICBpZiAoW1NoYXJkU3RhdGUuRGlzY29ubmVjdGVkLCBTaGFyZFN0YXRlLk9mZmxpbmVdLmluY2x1ZGVzKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCBpcyBkaXNjb25uZWN0ZWQgb3Igb2ZmbGluZSBidXQgdGhlIGhlYXJ0YmVhdCB3YXMgc3RhcnRlZCAjJHt0aGlzLmlkfWApXG4gICAgICB0aGlzLnN0YXRlID0gU2hhcmRTdGF0ZS5VbmlkZW50aWZpZWRcbiAgICB9XG5cbiAgICAvLyBUaGUgZmlyc3QgaGVhcnRiZWF0IG5lZWRzIHRvIGJlIHNlbmQgd2l0aCBhIHJhbmRvbSBkZWxheSBiZXR3ZWVuIGAwYCBhbmQgYGludGVydmFsYFxuICAgIC8vIFVzaW5nIGEgYHNldFRpbWVvdXQoXywgaml0dGVyKWAgaGVyZSB0byBhY2NvbXBsaXNoIHRoYXQuXG4gICAgLy8gYE1hdGgucmFuZG9tKClgIGNhbiBiZSBgMGAgc28gd2UgdXNlIGAwLjVgIGlmIHRoaXMgaGFwcGVuc1xuICAgIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjaGVhcnRiZWF0aW5nXG4gICAgY29uc3Qgaml0dGVyID0gTWF0aC5jZWlsKHRoaXMuaGVhcnQuaW50ZXJ2YWwgKiAoTWF0aC5yYW5kb20oKSB8fCAwLjUpKVxuXG4gICAgdGhpcy5oZWFydC50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEJlZ2lubmluZyBoZWFydGJlYXRpbmcgcHJvY2VzcyBmb3IgU2hhcmQgIyR7dGhpcy5pZH1gKVxuXG4gICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHJldHVyblxuXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBIZWFydGJlYXRpbmcgb24gU2hhcmQgIyR7dGhpcy5pZH0uIFByZXZpb3VzIHNlcXVlbmNlIG51bWJlcjogJHt0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXJ9YClcblxuICAgICAgLy8gVXNpbmcgYSBkaXJlY3Qgc29ja2V0LnNlbmQgY2FsbCBoZXJlIGJlY2F1c2UgaGVhcnRiZWF0IHJlcXVlc3RzIGFyZSByZXNlcnZlZCBieSB1cy5cbiAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgb3A6IEdhdGV3YXlPcGNvZGVzLkhlYXJ0YmVhdCxcbiAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgIH0pLFxuICAgICAgKVxuXG4gICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgdGhpcy5oZWFydC5hY2tub3dsZWRnZWQgPSBmYWxzZVxuXG4gICAgICAvLyBBZnRlciB0aGUgcmFuZG9tIGhlYXJ0YmVhdCBqaXR0ZXIgd2UgY2FuIHN0YXJ0IGEgbm9ybWFsIGludGVydmFsLlxuICAgICAgdGhpcy5oZWFydC5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgW1NoYXJkXSBTaGFyZCAjJHt0aGlzLmlkfSBpcyBub3Qgb3BlbiwgYnV0IGF0dGVtcHRlZCBoZWFydGJlYXQsIGlnbm9yaW5nLmApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgU2hhcmQgZGlkIG5vdCByZWNlaXZlIGEgaGVhcnRiZWF0IEFDSyBmcm9tIERpc2NvcmQgaW4gdGltZSxcbiAgICAgICAgLy8gdGhlcmVmb3JlIHdlIGhhdmUgdG8gYXNzdW1lIHRoYXQgdGhlIGNvbm5lY3Rpb24gaGFzIGZhaWxlZCBvciBnb3QgXCJ6b21iaWVkXCIuXG4gICAgICAgIC8vIFRoZSBTaGFyZCBuZWVkcyB0byBzdGFydCBhIHJlLWlkZW50aWZ5IGFjdGlvbiBhY2NvcmRpbmdseS5cbiAgICAgICAgLy8gUmVmZXJlbmNlOiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSNoZWFydGJlYXRpbmctZXhhbXBsZS1nYXRld2F5LWhlYXJ0YmVhdC1hY2tcbiAgICAgICAgaWYgKCF0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEhlYXJ0YmVhdCBub3QgYWNrbm93bGVkZ2VkIGZvciBTaGFyZCAjJHt0aGlzLmlkfS4gQXNzdW1pbmcgem9tYmllZCBjb25uZWN0aW9uLmApXG4gICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZShTaGFyZFNvY2tldENsb3NlQ29kZXMuWm9tYmllZENvbm5lY3Rpb24sICdab21iaWVkIGNvbm5lY3Rpb24sIGRpZCBub3QgcmVjZWl2ZSBhbiBoZWFydGJlYXQgQUNLIGluIHRpbWUuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBbU2hhcmRdIEhlYXJ0YmVhdGluZyBvbiBTaGFyZCAjJHt0aGlzLmlkfS4gUHJldmlvdXMgc2VxdWVuY2UgbnVtYmVyOiAke3RoaXMucHJldmlvdXNTZXF1ZW5jZU51bWJlcn1gKVxuXG4gICAgICAgIC8vIFVzaW5nIGEgZGlyZWN0IHNvY2tldC5zZW5kIGNhbGwgaGVyZSBiZWNhdXNlIGhlYXJ0YmVhdCByZXF1ZXN0cyBhcmUgcmVzZXJ2ZWQgYnkgdXMuXG4gICAgICAgIHRoaXMuc29ja2V0Py5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9wOiBHYXRld2F5T3Bjb2Rlcy5IZWFydGJlYXQsXG4gICAgICAgICAgICBkOiB0aGlzLnByZXZpb3VzU2VxdWVuY2VOdW1iZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLmhlYXJ0Lmxhc3RCZWF0ID0gRGF0ZS5ub3coKVxuICAgICAgICB0aGlzLmhlYXJ0LmFja25vd2xlZGdlZCA9IGZhbHNlXG5cbiAgICAgICAgdGhpcy5ldmVudHMuaGVhcnRiZWF0Py4odGhpcylcbiAgICAgIH0sIHRoaXMuaGVhcnQuaW50ZXJ2YWwpXG4gICAgfSwgaml0dGVyKVxuICB9XG5cbiAgLyoqIFN0b3AgdGhlIGhlYXJ0YmVhdGluZyBwcm9jZXNzIHdpdGggZGlzY29yZC4gKi9cbiAgc3RvcEhlYXJ0YmVhdGluZygpOiB2b2lkIHtcbiAgICAvLyBDbGVhciB0aGUgcmVndWxhciBoZWFydGJlYXQgaW50ZXJ2YWwuXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmhlYXJ0LmludGVydmFsSWQpXG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBTaGFyZCBnb3QgY2xvc2VkIGJlZm9yZSB0aGUgZmlyc3Qgaml0dGVyZWQgaGVhcnRiZWF0LlxuICAgIC8vIFRvIGdvIHNhZmUgd2Ugc2hvdWxkIGNsZWFyIHRoZSByZWxhdGVkIHRpbWVvdXQgdG9vLlxuICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0LnRpbWVvdXRJZClcbiAgfVxufVxuXG4vKiogQ2hlY2sgaWYgdGhlIGJ1ZmZlciBlbmRzIHdpdGggdGhlIG1hcmtlciAqL1xuZnVuY3Rpb24gZW5kc1dpdGhNYXJrZXIoYnVmZmVyOiBVaW50OEFycmF5LCBtYXJrZXI6IFVpbnQ4QXJyYXkpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPCBtYXJrZXIubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcmtlci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChidWZmZXJbYnVmZmVyLmxlbmd0aCAtIG1hcmtlci5sZW5ndGggKyBpXSAhPT0gbWFya2VyW2ldKSByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRDcmVhdGVPcHRpb25zIHtcbiAgLyoqIFRoZSBzaGFyZCBpZCAqL1xuICBpZDogbnVtYmVyXG4gIC8qKiBUaGUgY29ubmVjdGlvbiBkZXRhaWxzICovXG4gIGNvbm5lY3Rpb246IFNoYXJkR2F0ZXdheUNvbmZpZ1xuICAvKiogVGhlIGV2ZW50IGhhbmRsZXJzIGZvciBldmVudHMgb24gdGhlIHNoYXJkLiAqL1xuICBldmVudHM6IFNoYXJkRXZlbnRzXG4gIC8qKiBUaGUgbG9nZ2VyIGZvciB0aGUgc2hhcmQgKi9cbiAgbG9nZ2VyPzogUGljazx0eXBlb2YgbG9nZ2VyLCAnZGVidWcnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2Vycm9yJyB8ICdmYXRhbCc+XG4gIC8qKiBUaGUgaGFuZGxlciB0byByZXF1ZXN0IGEgc3BhY2UgdG8gbWFrZSBhbiBpZGVudGlmeSByZXF1ZXN0LiAqL1xuICByZXF1ZXN0SWRlbnRpZnk/OiAoKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBGdW5jdGlvbiB0byBjcmVhdGUgdGhlIGJvdCBzdGF0dXMgdG8gc2VuZCBvbiBJZGVudGlmeSByZXF1ZXN0cyAqL1xuICBtYWtlUHJlc2VuY2U/OiAoKSA9PiBQcm9taXNlPERpc2NvcmRVcGRhdGVQcmVzZW5jZSB8IHVuZGVmaW5lZD5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzY29yZGVub1NoYXJkXG4iXSwibmFtZXMiOlsiQnVmZmVyIiwiY3JlYXRlSW5mbGF0ZSIsImluZmxhdGVTeW5jIiwiY29uc3RhbnRzIiwiemxpYkNvbnN0YW50cyIsIkdhdGV3YXlDbG9zZUV2ZW50Q29kZXMiLCJHYXRld2F5T3Bjb2RlcyIsImNhbWVsaXplIiwiZGVsYXkiLCJMZWFreUJ1Y2tldCIsImxvZ2dlciIsIk5vZGVXZWJTb2NrZXQiLCJTaGFyZFNvY2tldENsb3NlQ29kZXMiLCJTaGFyZFN0YXRlIiwiVHJhbnNwb3J0Q29tcHJlc3Npb24iLCJaTElCX1NZTkNfRkxVU0giLCJVaW50OEFycmF5IiwiZnpzdGQiLCJnZXRGWlN0ZCIsIkRpc2NvcmRlbm9TaGFyZCIsIm9wdGlvbnMiLCJtYXhSZXF1ZXN0c1BlclJhdGVMaW1pdFRpY2siLCJwcmV2aW91c1NlcXVlbmNlTnVtYmVyIiwicmF0ZUxpbWl0UmVzZXRJbnRlcnZhbCIsInN0YXRlIiwiT2ZmbGluZSIsInJlc3VtZUdhdGV3YXlVcmwiLCJldmVudHMiLCJvZmZsaW5lU2VuZFF1ZXVlIiwicmVzb2x2ZXMiLCJNYXAiLCJnb2luZ09mZmxpbmUiLCJ0ZXh0RGVjb2RlciIsIlRleHREZWNvZGVyIiwiaW5mbGF0ZUJ1ZmZlciIsImRlY29tcHJlc3Npb25Qcm9taXNlc1F1ZXVlIiwiaWQiLCJjb25uZWN0aW9uIiwiaGVhcnQiLCJhY2tub3dsZWRnZWQiLCJpbnRlcnZhbCIsInJlcXVlc3RJZGVudGlmeSIsIm1ha2VQcmVzZW5jZSIsImJ1Y2tldCIsIm1heCIsImNhbGN1bGF0ZVNhZmVSZXF1ZXN0cyIsInJlZmlsbEFtb3VudCIsInJlZmlsbEludGVydmFsIiwiZ2F0ZXdheUNvbmZpZyIsImNvbm5lY3Rpb25VcmwiLCJ1cmwiLCJzYWZlUmVxdWVzdHMiLCJNYXRoIiwiY2VpbCIsImNoZWNrT2ZmbGluZSIsImhpZ2hQcmlvcml0eSIsImlzT3BlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwidW5zaGlmdCIsInB1c2giLCJjbG9zZSIsImNvZGUiLCJyZWFzb24iLCJkZWJ1ZyIsInNvY2tldCIsInJlYWR5U3RhdGUiLCJPUEVOIiwiTm9ybWFsQ2xvc3VyZSIsIkdvaW5nQXdheSIsInByb21pc2UiLCJyZXNvbHZlQWZ0ZXJDbG9zZSIsInVuZGVmaW5lZCIsImNvbm5lY3QiLCJJZGVudGlmeWluZyIsIlJlc3VtaW5nIiwiaW5jbHVkZXMiLCJDb25uZWN0aW5nIiwiY29ubmVjdGluZyIsIlVSTCIsInNlYXJjaFBhcmFtcyIsInNldCIsInZlcnNpb24iLCJ0b1N0cmluZyIsInRyYW5zcG9ydENvbXByZXNzaW9uIiwiemxpYiIsImluZmxhdGUiLCJmaW5pc2hGbHVzaCIsIlpfU1lOQ19GTFVTSCIsImNodW5rU2l6ZSIsIm9uIiwiZSIsImVycm9yIiwiZGF0YSIsIm5ld0J1ZmZlciIsImJ5dGVMZW5ndGgiLCJ6c3RkIiwiY2F0Y2giLCJ3YXJuIiwiZGVsZXRlIiwienN0ZERlY29tcHJlc3MiLCJEZWNvbXByZXNzIiwiZGVjb2RlZERhdGEiLCJkZWNvZGUiLCJwYXJzZWREYXRhIiwiSlNPTiIsInBhcnNlIiwic2hpZnQiLCJjb21wcmVzcyIsInNob3VsZFVzZUJ1aWx0aW4iLCJSZWZsZWN0IiwiaGFzIiwiZ2xvYmFsVGhpcyIsIldlYlNvY2tldCIsImJpbmFyeVR5cGUiLCJvbmVycm9yIiwiZXZlbnQiLCJoYW5kbGVFcnJvciIsIm9uY2xvc2UiLCJjbG9zZUV2ZW50IiwiaGFuZGxlQ2xvc2UiLCJvbm1lc3NhZ2UiLCJtZXNzYWdlRXZlbnQiLCJoYW5kbGVNZXNzYWdlIiwib25vcGVuIiwiVW5pZGVudGlmaWVkIiwiY29ubmVjdGVkIiwiaWRlbnRpZnkiLCJieXBhc3NSZXF1ZXN0IiwiUmVJZGVudGlmeWluZyIsImlkZW50aWZ5aW5nIiwic2VuZCIsIm9wIiwiSWRlbnRpZnkiLCJkIiwidG9rZW4iLCJwcm9wZXJ0aWVzIiwiaW50ZW50cyIsInNoYXJkIiwidG90YWxTaGFyZHMiLCJwcmVzZW5jZSIsInJlc3VtZSIsIlJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uIiwic2Vzc2lvbklkIiwiUmVzdW1lIiwic2Vzc2lvbl9pZCIsInNlcSIsIm1lc3NhZ2UiLCJhY3F1aXJlIiwic3RyaW5naWZ5Iiwic2h1dGRvd24iLCJTaHV0ZG93biIsInN0b3BIZWFydGJlYXRpbmciLCJUZXN0aW5nRmluaXNoZWQiLCJkaXNjb25uZWN0ZWQiLCJSZXNoYXJkZWQiLCJEaXNjb25uZWN0ZWQiLCJBdXRoZW50aWNhdGlvbkZhaWxlZCIsIkludmFsaWRTaGFyZCIsIlNoYXJkaW5nUmVxdWlyZWQiLCJJbnZhbGlkQXBpVmVyc2lvbiIsIkludmFsaWRJbnRlbnRzIiwiRGlzYWxsb3dlZEludGVudHMiLCJFcnJvciIsIk5vdEF1dGhlbnRpY2F0ZWQiLCJJbnZhbGlkU2VxIiwiU2Vzc2lvblRpbWVkT3V0IiwiVW5rbm93bkVycm9yIiwiVW5rbm93bk9wY29kZSIsIkRlY29kZUVycm9yIiwiUmF0ZUxpbWl0ZWQiLCJBbHJlYWR5QXV0aGVudGljYXRlZCIsImlzQ29tcHJlc3NlZCIsIkFycmF5QnVmZmVyIiwiZGVjb21wcmVzc1BhY2tldCIsImhhbmRsZURpc2NvcmRQYWNrZXQiLCJjb21wcmVzc2VkRGF0YSIsImZhdGFsIiwid3JpdGVQcm9taXNlIiwicmVqZWN0Iiwid3JpdGUiLCJlbmRzV2l0aE1hcmtlciIsImRlY29tcHJlc3Npb25Qcm9taXNlIiwiciIsImRlY29tcHJlc3NlZCIsInBhY2tldCIsImxhc3RBY2siLCJEYXRlIiwibm93IiwiSGVhcnRiZWF0IiwibGFzdEJlYXQiLCJoZWFydGJlYXQiLCJIZWxsbyIsImhlYXJ0YmVhdF9pbnRlcnZhbCIsInN0YXJ0SGVhcnRiZWF0aW5nIiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJoZWxsbyIsIkhlYXJ0YmVhdEFDSyIsInJ0dCIsImhlYXJ0YmVhdEFjayIsIlJlY29ubmVjdCIsInJlcXVlc3RlZFJlY29ubmVjdCIsIkludmFsaWRTZXNzaW9uIiwicmVzdW1hYmxlIiwiaW52YWxpZFNlc3Npb24iLCJmbG9vciIsInJhbmRvbSIsImdldCIsInQiLCJDb25uZWN0ZWQiLCJyZXN1bWVkIiwiZm9yRWFjaCIsImxlbmd0aCIsInBheWxvYWQiLCJyZWFkeSIsInJlc3VtZV9nYXRld2F5X3VybCIsInMiLCJmb3J3YXJkVG9Cb3QiLCJqaXR0ZXIiLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWxJZCIsInNldEludGVydmFsIiwiWm9tYmllZENvbm5lY3Rpb24iLCJjbGVhckludGVydmFsIiwiY2xlYXJUaW1lb3V0IiwiYnVmZmVyIiwibWFya2VyIiwiaSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLGNBQWE7QUFDcEMsU0FBU0MsYUFBYSxFQUFnQkMsV0FBVyxFQUFFQyxhQUFhQyxhQUFhLFFBQVEsWUFBVztBQUVoRyxTQUFTQyxzQkFBc0IsRUFBRUMsY0FBYyxRQUFRLG9CQUFtQjtBQUMxRSxTQUFTQyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsV0FBVyxFQUFFQyxNQUFNLFFBQVEsb0JBQW1CO0FBRXhFLE9BQU9DLG1CQUFtQixLQUFJO0FBQzlCLFNBSUVDLHFCQUFxQixFQUVyQkMsVUFBVSxFQUNWQyxvQkFBb0IsUUFDZixhQUFZO0FBRW5CLE1BQU1DLGtCQUFrQixJQUFJQyxXQUFXO0lBQUM7SUFBSztJQUFLO0lBQU07Q0FBSztBQUU3RCxJQUFJQztBQUVKLHdFQUF3RSxHQUN4RSxlQUFlQztJQUNiLE9BQVFELFVBQVUsTUFBTSxNQUFNLENBQUM7QUFDakM7QUFFQSxPQUFPLE1BQU1FO0lBMkRYLFlBQVlDLE9BQTJCLENBQUU7UUFwRHpDLDBIQUEwSCxRQUMxSEMsOEJBQXNDO1FBQ3RDLDBDQUEwQyxRQUMxQ0MseUJBQXdDO1FBQ3hDLDRFQUE0RSxRQUM1RUMseUJBQWlDO1FBS2pDLHdDQUF3QyxRQUN4Q0MsUUFBUVgsV0FBV1ksT0FBTztRQUMxQixpRkFBaUYsUUFDakZDLG1CQUEyQjtRQUMzQixzQ0FBc0MsUUFDdENDLFNBQXNCLENBQUM7UUFDdkIsbUdBQW1HLFFBQ25HQyxtQkFBbUMsRUFBRTtRQUNyQyxpRkFBaUYsUUFDakZDLFdBQVcsSUFBSUM7UUFLZjs7Ozs7Ozs7R0FRQyxR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
package/dist/esm/types.js CHANGED
@@ -40,4 +40,4 @@ export var ShardSocketCloseCodes = /*#__PURE__*/ function(ShardSocketCloseCodes)
40
40
  return ShardSocketCloseCodes;
41
41
  }({});
42
42
 
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhbWVsaXplLCBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zcG9ydENvbXByZXNzaW9uIHtcbiAgLyoqXG4gICAqIFpMaWItU3RyZWFtIFRyYW5zcG9ydCBDb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVXNlcyBgbm9kZTp6bGliYCB0byBkZWNvbXByZXNzIHRoZSBwYXlsb2Fkc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3psaWJzdHJlYW1cbiAgICovXG4gIHpsaWIgPSAnemxpYi1zdHJlYW0nLFxuICAvKipcbiAgICogWlN0ZC1TdHJlYW0gVHJhbnNwb3J0IENvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIGBmenN0ZGAgdG8gZGVjb21wcmVzcyB0aGUgcGF5bG9hZHMuIGBmenN0ZGAgaXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeSwgaXQgaXMgcmVxdWlyZWQgdG8gYmUgaW5zdGFsbGVkIGZvciB0aGlzIGNvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3pzdGRzdHJlYW1cbiAgICovXG4gIHpzdGQgPSAnenN0ZC1zdHJlYW0nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkR2F0ZXdheUNvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGF0ZXZlciB0byBlbmFibGUgUGF5bG9hZCBjb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBpcyBjb21wYXRpYmxlIHdpdGgge0BsaW5rIHRyYW5zcG9ydENvbXByZXNzaW9ufVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3BheWxvYWQtY29tcHJlc3Npb25cbiAgICovXG4gIGNvbXByZXNzOiBib29sZWFuXG4gIC8qKlxuICAgKiBXaGF0IFRyYW5zcG9ydCBDb21wcmVzc2lvbiBzaG91bGQgYmUgdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN0cmFuc3BvcnQtY29tcHJlc3Npb25cbiAgICovXG4gIHRyYW5zcG9ydENvbXByZXNzaW9uOiBUcmFuc3BvcnRDb21wcmVzc2lvbiB8IG51bGxcbiAgLyoqIFRoZSBjYWxjdWxhdGVkIGludGVudCB2YWx1ZSBvZiB0aGUgZXZlbnRzIHdoaWNoIHRoZSBzaGFyZCBzaG91bGQgcmVjZWl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW50ZW50czogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdGhlIHNoYXJkIHJ1bnMgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImRhcndpblwiIHwgXCJsaW51eFwiIHwgXCJ3aW5kb3dzXCJcbiAgICAgKi9cbiAgICBvczogc3RyaW5nXG4gICAgLyoqIFRoZSBcImJyb3dzZXJcIiB3aGVyZSB0aGlzIHNoYXJkIGlzIHJ1bm5pbmcgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGJyb3dzZXI6IHN0cmluZ1xuICAgIC8qKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBzaGFyZCBpcyBydW5uaW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBkZXZpY2U6IHN0cmluZ1xuICB9XG4gIC8qKiBCb3QgdG9rZW4gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQgKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKiogVGhlIFVSTCBvZiB0aGUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIndzczovL2dhdGV3YXkuZGlzY29yZC5nZ1wiXG4gICAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIGdhdGV3YXkgdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb246IG51bWJlclxuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBzaGFyZHMgdG8gY29ubmVjdCB0byBhY3Jvc3MgdGhlIGVudGlyZSBib3QuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEhlYXJ0IHtcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBoZWFydGJlYXQgd2FzIGFja25vd2xlZGdlZCBieSBEaXNjb3JkIGluIHRpbWUuICovXG4gIGFja25vd2xlZGdlZDogYm9vbGVhblxuICAvKiogSW50ZXJ2YWwgYmV0d2VlbiBoZWFydGJlYXRzIHJlcXVlc3RlZCBieSBEaXNjb3JkLiAqL1xuICBpbnRlcnZhbDogbnVtYmVyXG4gIC8qKiBJZCBvZiB0aGUgaW50ZXJ2YWwsIHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGhlYXJ0YmVhdHMuICovXG4gIGludGVydmFsSWQ/OiBOb2RlSlMuVGltZW91dFxuICAvKiogVW5peCAoaW4gbWlsbGlzZWNvbmRzKSB0aW1lc3RhbXAgd2hlbiB0aGUgbGFzdCBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZCBmcm9tIERpc2NvcmQuICovXG4gIGxhc3RBY2s/OiBudW1iZXJcbiAgLyoqIFVuaXggdGltZXN0YW1wIChpbiBtaWxsaXNlY29uZHMpIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IHdhcyBzZW50LiAqL1xuICBsYXN0QmVhdD86IG51bWJlclxuICAvKiogUm91bmQgdHJpcCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGZyb20gU2hhcmQgdG8gRGlzY29yZCBhbmQgYmFjay5cbiAgICogQ2FsY3VsYXRlZCB1c2luZyB0aGUgaGVhcnRiZWF0IHN5c3RlbS5cbiAgICogTm90ZTogdGhpcyB2YWx1ZSBpcyB1bmRlZmluZWQgdW50aWwgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIGhhcyBoYXBwZW5lZC5cbiAgICovXG4gIHJ0dD86IG51bWJlclxuICAvKiogSWQgb2YgdGhlIHRpbWVvdXQgd2hpY2ggaXMgdXNlZCBmb3Igc2VuZGluZyB0aGUgZmlyc3QgaGVhcnRiZWF0IHRvIERpc2NvcmQgc2luY2UgaXQncyBcInNwZWNpYWxcIi4gKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEV2ZW50cyB7XG4gIC8qKiBBIGhlYXJ0YmVhdCBoYXMgYmVlbiBzZW5kLiAqL1xuICBoZWFydGJlYXQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBBIGhlYXJ0YmVhdCBBQ0sgd2FzIHJlY2VpdmVkLiAqL1xuICBoZWFydGJlYXRBY2s/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBTaGFyZCBoYXMgcmVjZWl2ZWQgYSBIZWxsbyBwYXlsb2FkLiAqL1xuICBoZWxsbz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBTaGFyZHMgc2Vzc2lvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gKi9cbiAgaW52YWxpZFNlc3Npb24/OiAoc2hhcmQ6IFNoYXJkLCByZXN1bWFibGU6IGJvb2xlYW4pID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCBhIHJlc3VtZSBhY3Rpb24uICovXG4gIHJlc3VtaW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgcmVzdW1lZCBhbiBvbGQgc2Vzc2lvbi4gKi9cbiAgcmVzdW1lZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIERpc2NvcmQgaGFzIHJlcXVlc3RlZCB0aGUgU2hhcmQgdG8gcmVjb25uZWN0LiAqL1xuICByZXF1ZXN0ZWRSZWNvbm5lY3Q/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGlzIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gRGlzY29yZCdzIGdhdGV3YXkuICovXG4gIGRpc2Nvbm5lY3RlZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCB0byBpZGVudGlmeSBpdHNlbGYgdG8gRGlzY29yZC4gKi9cbiAgaWRlbnRpZnlpbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGlkZW50aWZpZWQgaXRzZWxmIHdpdGggRGlzY29yZC4gKi9cbiAgaWRlbnRpZmllZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgcmVjZWl2ZWQgYSBtZXNzYWdlIGZyb20gRGlzY29yZC4gKi9cbiAgbWVzc2FnZT86IChzaGFyZDogU2hhcmQsIHBheWxvYWQ6IENhbWVsaXplPERpc2NvcmRHYXRld2F5UGF5bG9hZD4pID0+IHVua25vd25cbn1cblxuZXhwb3J0IGVudW0gU2hhcmRTb2NrZXRDbG9zZUNvZGVzIHtcbiAgLyoqIEEgcmVndWxhciBTaGFyZCBzaHV0ZG93bi4gKi9cbiAgU2h1dGRvd24gPSAzMDAwLFxuICAvKiogQSByZXN1bWUgaGFzIGJlZW4gcmVxdWVzdGVkIGFuZCB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVzdW1lQ2xvc2luZ09sZENvbm5lY3Rpb24gPSAzMDI0LFxuICAvKipcbiAgICogRGlkIG5vdCByZWNlaXZlIGEgaGVhcnRiZWF0IEFDSyBpbiB0aW1lLlxuICAgKiBDbG9zaW5nIHRoZSBzaGFyZCBhbmQgY3JlYXRpbmcgYSBuZXcgc2Vzc2lvbi5cbiAgICovXG4gIFpvbWJpZWRDb25uZWN0aW9uID0gMzAxMCxcbiAgLyoqIERpc2NvcmRlbm8ncyBnYXRld2F5IHRlc3RzIGhhZSBiZWVuIGZpbmlzaGVkLCB0aGVyZWZvcmUgdGhlIFNoYXJkIGNhbiBiZSB0dXJuZWQgb2ZmLiAqL1xuICBUZXN0aW5nRmluaXNoZWQgPSAzMDY0LFxuICAvKiogU3BlY2lhbCBjbG9zZSBjb2RlIHJlc2VydmVkIGZvciBEaXNjb3JkZW5vJ3MgemVyby1kb3dudGltZSByZXNoYXJkaW5nIHN5c3RlbS4gKi9cbiAgUmVzaGFyZGVkID0gMzA2NSxcbiAgLyoqIFNoYXJkIGlzIHJlLWlkZW50aWZ5aW5nIHRoZXJlZm9yZSB0aGUgb2xkIGNvbm5lY3Rpb24gbmVlZHMgdG8gYmUgY2xvc2VkLiAqL1xuICBSZUlkZW50aWZ5aW5nID0gMzA2Nixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZFNvY2tldFJlcXVlc3Qge1xuICAvKiogVGhlIE9QLUNvZGUgZm9yIHRoZSBwYXlsb2FkIHRvIHNlbmQuICovXG4gIG9wOiBHYXRld2F5T3Bjb2Rlc1xuICAvKiogUGF5bG9hZCBkYXRhLiAqL1xuICBkOiB1bmtub3duXG59XG5cbi8qKiBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN1cGRhdGUtdm9pY2Utc3RhdGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlVm9pY2VTdGF0ZSB7XG4gIC8qKiBpZCBvZiB0aGUgZ3VpbGQgKi9cbiAgZ3VpbGRJZDogc3RyaW5nXG4gIC8qKiBpZCBvZiB0aGUgdm9pY2UgY2hhbm5lbCBjbGllbnQgd2FudHMgdG8gam9pbiAobnVsbCBpZiBkaXNjb25uZWN0aW5nKSAqL1xuICBjaGFubmVsSWQ6IHN0cmluZyB8IG51bGxcbiAgLyoqIElzIHRoZSBjbGllbnQgbXV0ZWQgKi9cbiAgc2VsZk11dGU6IGJvb2xlYW5cbiAgLyoqIElzIHRoZSBjbGllbnQgZGVhZmVuZWQgKi9cbiAgc2VsZkRlYWY6IGJvb2xlYW5cbn1cbiJdLCJuYW1lcyI6WyJTaGFyZFN0YXRlIiwiVHJhbnNwb3J0Q29tcHJlc3Npb24iLCJTaGFyZFNvY2tldENsb3NlQ29kZXMiXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sSUFBQSxBQUFLQSxvQ0FBQUE7SUFDViwrRUFBK0U7SUFFL0UsMkhBQTJIO0lBRTNILHVFQUF1RTtJQUV2RSwrSEFBK0g7SUFFL0gsMEVBQTBFO0lBRTFFLDBEQUEwRDtJQUUxRCxrSEFBa0g7V0FieEdBO01BZVg7QUFFRCxPQUFPLElBQUEsQUFBS0MsOENBQUFBO0lBQ1Y7Ozs7Ozs7R0FPQztJQUVEOzs7Ozs7O0dBT0M7V0FqQlNBO01BbUJYO0FBaUhELE9BQU8sSUFBQSxBQUFLQywrQ0FBQUE7SUFDViw4QkFBOEI7SUFFOUIscUZBQXFGO0lBRXJGOzs7R0FHQztJQUVELHlGQUF5RjtJQUV6RixrRkFBa0Y7SUFFbEYsNkVBQTZFO1dBZG5FQTtNQWdCWCJ9
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhbWVsaXplLCBEaXNjb3JkR2F0ZXdheVBheWxvYWQsIEdhdGV3YXlPcGNvZGVzIH0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQgdHlwZSBTaGFyZCBmcm9tICcuL1NoYXJkLmpzJ1xuXG5leHBvcnQgZW51bSBTaGFyZFN0YXRlIHtcbiAgLyoqIFNoYXJkIGlzIGZ1bGx5IGNvbm5lY3RlZCB0byB0aGUgZ2F0ZXdheSBhbmQgcmVjZWl2aW5nIGV2ZW50cyBmcm9tIERpc2NvcmQuICovXG4gIENvbm5lY3RlZCA9IDAsXG4gIC8qKiBTaGFyZCBzdGFydGVkIHRvIGNvbm5lY3QgdG8gdGhlIGdhdGV3YXkuIFRoaXMgaXMgb25seSB1c2VkIGlmIHRoZSBzaGFyZCBpcyBub3QgY3VycmVudGx5IHRyeWluZyB0byBpZGVudGlmeSBvciByZXN1bWUuICovXG4gIENvbm5lY3RpbmcgPSAxLFxuICAvKiogU2hhcmQgZ290IGRpc2Nvbm5lY3RlZCBhbmQgcmVjb25uZWN0aW9uIGFjdGlvbnMgaGF2ZSBiZWVuIHN0YXJ0ZWQuICovXG4gIERpc2Nvbm5lY3RlZCA9IDIsXG4gIC8qKiBUaGUgc2hhcmQgaXMgY29ubmVjdGVkIHRvIHRoZSBnYXRld2F5IGJ1dCBvbmx5IGhlYXJ0YmVhdGluZy4gQXQgdGhpcyBzdGF0ZSB0aGUgc2hhcmQgaGFzIG5vdCBiZWVuIGlkZW50aWZpZWQgd2l0aCBkaXNjb3JkLiAqL1xuICBVbmlkZW50aWZpZWQgPSAzLFxuICAvKiogU2hhcmQgaXMgdHJ5aW5nIHRvIGlkZW50aWZ5IHdpdGggdGhlIGdhdGV3YXkgdG8gY3JlYXRlIGEgbmV3IHNlc3Npb24uICovXG4gIElkZW50aWZ5aW5nID0gNCxcbiAgLyoqIFNoYXJkIGlzIHRyeWluZyB0byByZXN1bWUgYSBzZXNzaW9uIHdpdGggdGhlIGdhdGV3YXkuICovXG4gIFJlc3VtaW5nID0gNSxcbiAgLyoqIFNoYXJkIGdvdCBzaHV0IGRvd24gc3R1ZGllZCBvciBkdWUgdG8gYSBub3QgKHNlbGYpIGZpeGFibGUgZXJyb3IgYW5kIG1heSBub3QgYXR0ZW1wdCB0byByZWNvbm5lY3Qgb24gaXRzIG93bi4gKi9cbiAgT2ZmbGluZSA9IDYsXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zcG9ydENvbXByZXNzaW9uIHtcbiAgLyoqXG4gICAqIFpMaWItU3RyZWFtIFRyYW5zcG9ydCBDb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVXNlcyBgbm9kZTp6bGliYCB0byBkZWNvbXByZXNzIHRoZSBwYXlsb2Fkc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3psaWJzdHJlYW1cbiAgICovXG4gIHpsaWIgPSAnemxpYi1zdHJlYW0nLFxuICAvKipcbiAgICogWlN0ZC1TdHJlYW0gVHJhbnNwb3J0IENvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVc2VzIGBmenN0ZGAgdG8gZGVjb21wcmVzcyB0aGUgcGF5bG9hZHMuIGBmenN0ZGAgaXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeSwgaXQgaXMgcmVxdWlyZWQgdG8gYmUgaW5zdGFsbGVkIGZvciB0aGlzIGNvbXByZXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3pzdGRzdHJlYW1cbiAgICovXG4gIHpzdGQgPSAnenN0ZC1zdHJlYW0nLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJkR2F0ZXdheUNvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGF0ZXZlciB0byBlbmFibGUgUGF5bG9hZCBjb21wcmVzc2lvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBpcyBjb21wYXRpYmxlIHdpdGgge0BsaW5rIHRyYW5zcG9ydENvbXByZXNzaW9ufVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3RvcGljcy9nYXRld2F5I3BheWxvYWQtY29tcHJlc3Npb25cbiAgICovXG4gIGNvbXByZXNzOiBib29sZWFuXG4gIC8qKlxuICAgKiBXaGF0IFRyYW5zcG9ydCBDb21wcmVzc2lvbiBzaG91bGQgYmUgdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvZ2F0ZXdheSN0cmFuc3BvcnQtY29tcHJlc3Npb25cbiAgICovXG4gIHRyYW5zcG9ydENvbXByZXNzaW9uOiBUcmFuc3BvcnRDb21wcmVzc2lvbiB8IG51bGxcbiAgLyoqIFRoZSBjYWxjdWxhdGVkIGludGVudCB2YWx1ZSBvZiB0aGUgZXZlbnRzIHdoaWNoIHRoZSBzaGFyZCBzaG91bGQgcmVjZWl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaW50ZW50czogbnVtYmVyXG4gIC8qKiBJZGVudGlmeSBwcm9wZXJ0aWVzIHRvIHVzZSAqL1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgLyoqIE9wZXJhdGluZyBzeXN0ZW0gdGhlIHNoYXJkIHJ1bnMgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcImRhcndpblwiIHwgXCJsaW51eFwiIHwgXCJ3aW5kb3dzXCJcbiAgICAgKi9cbiAgICBvczogc3RyaW5nXG4gICAgLyoqIFRoZSBcImJyb3dzZXJcIiB3aGVyZSB0aGlzIHNoYXJkIGlzIHJ1bm5pbmcgb24uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIkRpc2NvcmRlbm9cIlxuICAgICAqL1xuICAgIGJyb3dzZXI6IHN0cmluZ1xuICAgIC8qKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBzaGFyZCBpcyBydW5uaW5nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgXCJEaXNjb3JkZW5vXCJcbiAgICAgKi9cbiAgICBkZXZpY2U6IHN0cmluZ1xuICB9XG4gIC8qKiBCb3QgdG9rZW4gd2hpY2ggaXMgdXNlZCB0byBjb25uZWN0IHRvIERpc2NvcmQgKi9cbiAgdG9rZW46IHN0cmluZ1xuICAvKiogVGhlIFVSTCBvZiB0aGUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIndzczovL2dhdGV3YXkuZGlzY29yZC5nZ1wiXG4gICAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIGdhdGV3YXkgdmVyc2lvbiB3aGljaCBzaG91bGQgYmUgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHZlcnNpb246IG51bWJlclxuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBzaGFyZHMgdG8gY29ubmVjdCB0byBhY3Jvc3MgdGhlIGVudGlyZSBib3QuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHRvdGFsU2hhcmRzOiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEhlYXJ0IHtcbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSBoZWFydGJlYXQgd2FzIGFja25vd2xlZGdlZCBieSBEaXNjb3JkIGluIHRpbWUuICovXG4gIGFja25vd2xlZGdlZDogYm9vbGVhblxuICAvKiogSW50ZXJ2YWwgYmV0d2VlbiBoZWFydGJlYXRzIHJlcXVlc3RlZCBieSBEaXNjb3JkLiAqL1xuICBpbnRlcnZhbDogbnVtYmVyXG4gIC8qKiBJZCBvZiB0aGUgaW50ZXJ2YWwsIHdoaWNoIGlzIHVzZWQgZm9yIHNlbmRpbmcgdGhlIGhlYXJ0YmVhdHMuICovXG4gIGludGVydmFsSWQ/OiBOb2RlSlMuVGltZW91dFxuICAvKiogVW5peCAoaW4gbWlsbGlzZWNvbmRzKSB0aW1lc3RhbXAgd2hlbiB0aGUgbGFzdCBoZWFydGJlYXQgQUNLIHdhcyByZWNlaXZlZCBmcm9tIERpc2NvcmQuICovXG4gIGxhc3RBY2s/OiBudW1iZXJcbiAgLyoqIFVuaXggdGltZXN0YW1wIChpbiBtaWxsaXNlY29uZHMpIHdoZW4gdGhlIGxhc3QgaGVhcnRiZWF0IHdhcyBzZW50LiAqL1xuICBsYXN0QmVhdD86IG51bWJlclxuICAvKiogUm91bmQgdHJpcCB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGZyb20gU2hhcmQgdG8gRGlzY29yZCBhbmQgYmFjay5cbiAgICogQ2FsY3VsYXRlZCB1c2luZyB0aGUgaGVhcnRiZWF0IHN5c3RlbS5cbiAgICogTm90ZTogdGhpcyB2YWx1ZSBpcyB1bmRlZmluZWQgdW50aWwgdGhlIGZpcnN0IGhlYXJ0YmVhdCB0byBEaXNjb3JkIGhhcyBoYXBwZW5lZC5cbiAgICovXG4gIHJ0dD86IG51bWJlclxuICAvKiogSWQgb2YgdGhlIHRpbWVvdXQgd2hpY2ggaXMgdXNlZCBmb3Igc2VuZGluZyB0aGUgZmlyc3QgaGVhcnRiZWF0IHRvIERpc2NvcmQgc2luY2UgaXQncyBcInNwZWNpYWxcIi4gKi9cbiAgdGltZW91dElkPzogTm9kZUpTLlRpbWVvdXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGFyZEV2ZW50cyB7XG4gIC8qKiBBIGhlYXJ0YmVhdCBoYXMgYmVlbiBzZW5kLiAqL1xuICBoZWFydGJlYXQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBBIGhlYXJ0YmVhdCBBQ0sgd2FzIHJlY2VpdmVkLiAqL1xuICBoZWFydGJlYXRBY2s/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBTaGFyZCBoYXMgcmVjZWl2ZWQgYSBIZWxsbyBwYXlsb2FkLiAqL1xuICBoZWxsbz86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBTaGFyZHMgc2Vzc2lvbiBoYXMgYmVlbiBpbnZhbGlkYXRlZC4gKi9cbiAgaW52YWxpZFNlc3Npb24/OiAoc2hhcmQ6IFNoYXJkLCByZXN1bWFibGU6IGJvb2xlYW4pID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCBhIHJlc3VtZSBhY3Rpb24uICovXG4gIHJlc3VtaW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGhhcyBzdWNjZXNzZnVsbHkgcmVzdW1lZCBhbiBvbGQgc2Vzc2lvbi4gKi9cbiAgcmVzdW1lZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIERpc2NvcmQgaGFzIHJlcXVlc3RlZCB0aGUgU2hhcmQgdG8gcmVjb25uZWN0LiAqL1xuICByZXF1ZXN0ZWRSZWNvbm5lY3Q/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgc3RhcnRlZCB0byBjb25uZWN0IHRvIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0aW5nPzogKHNoYXJkOiBTaGFyZCkgPT4gdW5rbm93blxuICAvKiogVGhlIHNoYXJkIGlzIGNvbm5lY3RlZCB3aXRoIERpc2NvcmQncyBnYXRld2F5LiAqL1xuICBjb25uZWN0ZWQ/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIGJlZW4gZGlzY29ubmVjdGVkIGZyb20gRGlzY29yZCdzIGdhdGV3YXkuICovXG4gIGRpc2Nvbm5lY3RlZD86IChzaGFyZDogU2hhcmQpID0+IHVua25vd25cbiAgLyoqIFRoZSBzaGFyZCBoYXMgc3RhcnRlZCB0byBpZGVudGlmeSBpdHNlbGYgdG8gRGlzY29yZC4gKi9cbiAgaWRlbnRpZnlpbmc/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGlkZW50aWZpZWQgaXRzZWxmIHdpdGggRGlzY29yZC4gKi9cbiAgcmVhZHk/OiAoc2hhcmQ6IFNoYXJkKSA9PiB1bmtub3duXG4gIC8qKiBUaGUgc2hhcmQgaGFzIHJlY2VpdmVkIGEgbWVzc2FnZSBmcm9tIERpc2NvcmQuICovXG4gIG1lc3NhZ2U/OiAoc2hhcmQ6IFNoYXJkLCBwYXlsb2FkOiBDYW1lbGl6ZTxEaXNjb3JkR2F0ZXdheVBheWxvYWQ+KSA9PiB1bmtub3duXG59XG5cbmV4cG9ydCBlbnVtIFNoYXJkU29ja2V0Q2xvc2VDb2RlcyB7XG4gIC8qKiBBIHJlZ3VsYXIgU2hhcmQgc2h1dGRvd24uICovXG4gIFNodXRkb3duID0gMzAwMCxcbiAgLyoqIEEgcmVzdW1lIGhhcyBiZWVuIHJlcXVlc3RlZCBhbmQgdGhlcmVmb3JlIHRoZSBvbGQgY29ubmVjdGlvbiBuZWVkcyB0byBiZSBjbG9zZWQuICovXG4gIFJlc3VtZUNsb3NpbmdPbGRDb25uZWN0aW9uID0gMzAyNCxcbiAgLyoqXG4gICAqIERpZCBub3QgcmVjZWl2ZSBhIGhlYXJ0YmVhdCBBQ0sgaW4gdGltZS5cbiAgICogQ2xvc2luZyB0aGUgc2hhcmQgYW5kIGNyZWF0aW5nIGEgbmV3IHNlc3Npb24uXG4gICAqL1xuICBab21iaWVkQ29ubmVjdGlvbiA9IDMwMTAsXG4gIC8qKiBEaXNjb3JkZW5vJ3MgZ2F0ZXdheSB0ZXN0cyBoYWUgYmVlbiBmaW5pc2hlZCwgdGhlcmVmb3JlIHRoZSBTaGFyZCBjYW4gYmUgdHVybmVkIG9mZi4gKi9cbiAgVGVzdGluZ0ZpbmlzaGVkID0gMzA2NCxcbiAgLyoqIFNwZWNpYWwgY2xvc2UgY29kZSByZXNlcnZlZCBmb3IgRGlzY29yZGVubydzIHplcm8tZG93bnRpbWUgcmVzaGFyZGluZyBzeXN0ZW0uICovXG4gIFJlc2hhcmRlZCA9IDMwNjUsXG4gIC8qKiBTaGFyZCBpcyByZS1pZGVudGlmeWluZyB0aGVyZWZvcmUgdGhlIG9sZCBjb25uZWN0aW9uIG5lZWRzIHRvIGJlIGNsb3NlZC4gKi9cbiAgUmVJZGVudGlmeWluZyA9IDMwNjYsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmRTb2NrZXRSZXF1ZXN0IHtcbiAgLyoqIFRoZSBPUC1Db2RlIGZvciB0aGUgcGF5bG9hZCB0byBzZW5kLiAqL1xuICBvcDogR2F0ZXdheU9wY29kZXNcbiAgLyoqIFBheWxvYWQgZGF0YS4gKi9cbiAgZDogdW5rbm93blxufVxuXG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjdXBkYXRlLXZvaWNlLXN0YXRlICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVZvaWNlU3RhdGUge1xuICAvKiogaWQgb2YgdGhlIGd1aWxkICovXG4gIGd1aWxkSWQ6IHN0cmluZ1xuICAvKiogaWQgb2YgdGhlIHZvaWNlIGNoYW5uZWwgY2xpZW50IHdhbnRzIHRvIGpvaW4gKG51bGwgaWYgZGlzY29ubmVjdGluZykgKi9cbiAgY2hhbm5lbElkOiBzdHJpbmcgfCBudWxsXG4gIC8qKiBJcyB0aGUgY2xpZW50IG11dGVkICovXG4gIHNlbGZNdXRlOiBib29sZWFuXG4gIC8qKiBJcyB0aGUgY2xpZW50IGRlYWZlbmVkICovXG4gIHNlbGZEZWFmOiBib29sZWFuXG59XG4iXSwibmFtZXMiOlsiU2hhcmRTdGF0ZSIsIlRyYW5zcG9ydENvbXByZXNzaW9uIiwiU2hhcmRTb2NrZXRDbG9zZUNvZGVzIl0sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLElBQUEsQUFBS0Esb0NBQUFBO0lBQ1YsK0VBQStFO0lBRS9FLDJIQUEySDtJQUUzSCx1RUFBdUU7SUFFdkUsK0hBQStIO0lBRS9ILDBFQUEwRTtJQUUxRSwwREFBMEQ7SUFFMUQsa0hBQWtIO1dBYnhHQTtNQWVYO0FBRUQsT0FBTyxJQUFBLEFBQUtDLDhDQUFBQTtJQUNWOzs7Ozs7O0dBT0M7SUFFRDs7Ozs7OztHQU9DO1dBakJTQTtNQW1CWDtBQWlIRCxPQUFPLElBQUEsQUFBS0MsK0NBQUFBO0lBQ1YsOEJBQThCO0lBRTlCLHFGQUFxRjtJQUVyRjs7O0dBR0M7SUFFRCx5RkFBeUY7SUFFekYsa0ZBQWtGO0lBRWxGLDZFQUE2RTtXQWRuRUE7TUFnQlgifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../../src/Shard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../../src/Shard.ts"],"names":[],"mappings":"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"}
@@ -140,7 +140,7 @@ export interface ShardEvents {
140
140
  /** The shard has started to identify itself to Discord. */
141
141
  identifying?: (shard: Shard) => unknown;
142
142
  /** The shard has successfully been identified itself with Discord. */
143
- identified?: (shard: Shard) => unknown;
143
+ ready?: (shard: Shard) => unknown;
144
144
  /** The shard has received a message from Discord. */
145
145
  message?: (shard: Shard, payload: Camelize<DiscordGatewayPayload>) => unknown;
146
146
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@discordeno/gateway",
3
- "version": "21.0.1-next.f6ea699",
3
+ "version": "21.0.1-next.fca0b40",
4
4
  "main": "./dist/esm/index.js",
5
5
  "types": "./dist/types/index.d.ts",
6
6
  "exports": {
@@ -34,8 +34,8 @@
34
34
  "test:test-type": "tsc --project tests/tsconfig.json"
35
35
  },
36
36
  "dependencies": {
37
- "@discordeno/types": "21.0.1-next.f6ea699",
38
- "@discordeno/utils": "21.0.1-next.f6ea699",
37
+ "@discordeno/types": "21.0.1-next.fca0b40",
38
+ "@discordeno/utils": "21.0.1-next.fca0b40",
39
39
  "ws": "^8.18.1"
40
40
  },
41
41
  "optionalDependencies": {