cHl0aG9uLXRvb2xib3gvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDc1NSAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDAwMDAwIDEzNDYzNDQxMjQwIDAxNTcyNQAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC9DT0RFX09GX0NPTkRVQ1QubWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDYyMjcgMTM0NjMzMzM0NjIgMDIwNTQxACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMgQ29udHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0CgojIyBPdXIgUGxlZGdlCgpJbiB0aGUgaW50ZXJlc3Qgb2YgZm9zdGVyaW5nIGFuIG9wZW4gYW5kIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgd2UgYXMgY29udHJpYnV0b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFraW5nIHBhcnRpY2lwYXRpb24gaW4gb3VyIHByb2plY3QgYW5kIG91ciBjb21tdW5pdHkgYSBoYXJhc3NtZW50LWZyZWUgZXhwZXJpZW5jZSBmb3IgZXZlcnlvbmUsIHJlZ2FyZGxlc3Mgb2YgYWdlLCBib2R5IHNpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgZ2VuZGVyIGlkZW50aXR5IGFuZCBleHByZXNzaW9uLCBsZXZlbCBvZiBleHBlcmllbmNlLCBuYXRpb25hbGl0eSwgcGVyc29uYWwgYXBwZWFyYW5jZSwgcmFjZSwgcmVsaWdpb24sIG9yIHNleHVhbCBpZGVudGl0eSBhbmQgb3JpZW50YXRpb24uCgojIyBPdXIgU3RhbmRhcmRzCgpFeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVzIHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQgaW5jbHVkZToKCiogVXNpbmcgd2VsY29taW5nIGFuZCBpbmNsdXNpdmUgbGFuZ3VhZ2UKKiBCZWluZyByZXNwZWN0ZnVsIG9mIGRpZmZlcmluZyB2aWV3cG9pbnRzIGFuZCBleHBlcmllbmNlcwoqIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KKiBGb2N1c2luZyBvbiB3aGF0IGlzIGJlc3QgZm9yIHRoZSBjb21tdW5pdHkKKiBTaG93aW5nIGVtcGF0aHkgdG93YXJkcyBvdGhlciBjb21tdW5pdHkgbWVtYmVycwoKRXhhbXBsZXMgb2YgdW5hY2NlcHRhYmxlIGJlaGF2aW9yIGJ5IHBhcnRpY2lwYW50cyBpbmNsdWRlOgoKKiBUaGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbCBhdHRlbnRpb24gb3IgYWR2YW5jZXMKKiBUcm9sbGluZywgaW5zdWx0aW5nL2Rlcm9nYXRvcnkgY29tbWVudHMsIGFuZCBwZXJzb25hbCBvciBwb2xpdGljYWwgYXR0YWNrcwoqIFB1YmxpYyBvciBwcml2YXRlIGhhcmFzc21lbnQKKiBQdWJsaXNoaW5nIG90aGVycycgcHJpdmF0ZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyBhIHBoeXNpY2FsIG9yIGVsZWN0cm9uaWMgYWRkcmVzcywgd2l0aG91dCBleHBsaWNpdCBwZXJtaXNzaW9uCiogT3RoZXIgY29uZHVjdCB3aGljaCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZSBpbiBhIHByb2Zlc3Npb25hbCBzZXR0aW5nCgojIyBPdXIgUmVzcG9uc2liaWxpdGllcwoKUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZiBhY2NlcHRhYmxlIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpciBjb3JyZWN0aXZlIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbnkgaW5zdGFuY2VzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvci4KClByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwgb3IgcmVqZWN0IGNvbW1lbnRzLCBjb21taXRzLCBjb2RlLCB3aWtpIGVkaXRzLCBpc3N1ZXMsIGFuZCBvdGhlciBjb250cmlidXRpb25zIHRoYXQgYXJlIG5vdCBhbGlnbmVkIHRvIHRoaXMgQ29kZSBvZiBDb25kdWN0LCBvciB0byBiYW4gdGVtcG9yYXJpbHkgb3IgcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5IGRlZW0gaW5hcHByb3ByaWF0ZSwgdGhyZWF0ZW5pbmcsIG9mZmVuc2l2ZSwgb3IgaGFybWZ1bC4KCiMjIFNjb3BlCgpUaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIGJvdGggd2l0aGluIHByb2plY3Qgc3BhY2VzIGFuZCBpbiBwdWJsaWMgc3BhY2VzIHdoZW4gYW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eS4gRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbiBvZmZpY2lhbCBwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEgYWNjb3VudCwgb3IgYWN0aW5nIGFzIGFuIGFwcG9pbnRlZCByZXByZXNlbnRhdGl2ZSBhdCBhbiBvbmxpbmUgb3Igb2ZmbGluZSBldmVudC4gUmVwcmVzZW50YXRpb24gb2YgYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kIGNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgoKIyMgRW5mb3JjZW1lbnQKCkluc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5IGJlIHJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBtYXJ2aW4tYWlAZ29vZ2xlZ3JvdXBzLmNvbS4gVGhlIHByb2plY3QgdGVhbSB3aWxsIHJldmlldyBhbmQgaW52ZXN0aWdhdGUgYWxsIGNvbXBsYWludHMsIGFuZCB3aWxsIHJlc3BvbmQgaW4gYSB3YXkgdGhhdCBpdCBkZWVtcyBhcHByb3ByaWF0ZSB0byB0aGUgY2lyY3Vtc3RhbmNlcy4gVGhlIHByb2plY3QgdGVhbSBpcyBvYmxpZ2F0ZWQgdG8gbWFpbnRhaW4gY29uZmlkZW50aWFsaXR5IHdpdGggcmVnYXJkIHRvIHRoZSByZXBvcnRlciBvZiBhbiBpbmNpZGVudC4gRnVydGhlciBkZXRhaWxzIG9mIHNwZWNpZmljIGVuZm9yY2VtZW50IHBvbGljaWVzIG1heSBiZSBwb3N0ZWQgc2VwYXJhdGVseS4KClByb2plY3QgbWFpbnRhaW5lcnMgd2hvIGRvIG5vdCBmb2xsb3cgb3IgZW5mb3JjZSB0aGUgQ29kZSBvZiBDb25kdWN0IGluIGdvb2QgZmFpdGggbWF5IGZhY2UgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudCByZXBlcmN1c3Npb25zIGFzIGRldGVybWluZWQgYnkgb3RoZXIgbWVtYmVycyBvZiB0aGUgcHJvamVjdCdzIGxlYWRlcnNoaXAuCgojIyBBdHRyaWJ1dGlvbgoKVGhpcyBDb2RlIG9mIENvbmR1Y3QgaXMgYWRhcHRlZCBmcm9tIHRoZSBbQ29udHJpYnV0b3IgQ292ZW5hbnRdW2hvbWVwYWdlXSwgdmVyc2lvbiAxLjQsIGF2YWlsYWJsZSBhdCBbaHR0cDovL2NvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZy92ZXJzaW9uLzEvNF1bdmVyc2lvbl0KCltob21lcGFnZV06IGh0dHA6Ly9jb250cmlidXRvci1jb3ZlbmFudC5vcmcKW3ZlcnNpb25dOiBodHRwOi8vY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNpb24vMS80LwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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CiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi5QSE9OWTogaGVscCBtYXJ2aW4gbWFydmluLXByb2QgdXBkYXRlIGNsZWFuLXB5YyBjbGVhbi1idWlsZCBjbGVhbi1yZXBvcnRzIGNsZWFuLWRlcHMgY2xlYW4gZ3JwYyBkaXN0cmlidXRpb24KCmhlbHA6CglAZWNobyAiICAgIG1hcnZpbiIKCUBlY2hvICIgICAgICAgIFByZXBhcmUgcHJvamVjdCB0byBiZSB1c2VkIGFzIGEgbWFydmluIHBhY2thZ2UuIgoJQGVjaG8gIiAgICBtYXJ2aW4tcHJvZCIKCUBlY2hvICIgICAgICAgIFByZXBhcmUgcHJvamVjdCB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQuIgoJQGVjaG8gIiAgICB1cGRhdGUiCglAZWNobyAiICAgICAgICBSZWluc3RhbGwgcmVxdWlyZW1lbnRzIGFuZCBzZXR1cC5weSBkZXBlbmRlbmNpZXMuIgoJQGVjaG8gIiAgICBjbGVhbi1hbGwiCglAZWNobyAiICAgICAgICBSZW1vdmUgYWxsIGdlbmVyYXRlZCBhcnRpZmFjdHMuIgoJQGVjaG8gIiAgICBjbGVhbi1weWMiCglAZWNobyAiICAgICAgICBSZW1vdmUgcHl0aG9uIGFydGlmYWN0cy4iCglAZWNobyAiICAgIGNsZWFuLWJ1aWxkIgoJQGVjaG8gIiAgICAgICAgUmVtb3ZlIGJ1aWxkIGFydGlmYWN0cy4iCglAZWNobyAiICAgIGNsZWFuLXJlcG9ydHMiCglAZWNobyAiICAgICAgICBSZW1vdmUgY292ZXJhZ2UgcmVwb3J0cy4iCglAZWNobyAiICAgIGNsZWFuLWRlcHMiCglAZWNobyAiICAgICAgICBSZW1vdmUgbWFydmluIHNldHVwLnB5IGRlcGVuZGVuY2llcy4iCglAZWNobyAiICAgIGdycGMiCglAZWNobyAiICAgICAgICBCdWlsZCBncnBjIHN0dWJzLiIKCUBlY2hvICIgICAgZGlzdHJpYnV0aW9uIgoJQGVjaG8gIiAgICAgICAgQnVpbGQgYW5kIHVwbG9hZCB0aGUgdG9vbGJveCBhcyBhIHdoZWVsIHBhY2thZ2UgaW4gcHlwaS4iCgptYXJ2aW46CglwaXAgaW5zdGFsbCAtZSAiLlt0ZXN0aW5nXSIKCXRvdWNoIC5kZXYKCW1hcnZpbiAtLWhlbHAKCnVwZGF0ZToKCXBpcCBpbnN0YWxsIC1lIC4gLVUKCm1hcnZpbi1wcm9kOgoJcGlwIGluc3RhbGwgLgoJcm0gLWYgLmRldgoJbWFydmluIC0taGVscAoKY2xlYW4tcHljOgoJZmluZCAuIC1uYW1lICcqLnB5YycgLWV4ZWMgcm0gLWYge30gKwoJZmluZCAuIC1uYW1lICcqLnB5bycgLWV4ZWMgcm0gLWYge30gKwoJZmluZCAuIC1uYW1lICcqficgLWV4ZWMgcm0gLWYgIHt9ICsKCmNsZWFuLWJ1aWxkOgoJcm0gLWYgLnByb2QKCXJtIC1yZiAqLmVnZy1pbmZvCglybSAtcmYgLmNhY2hlCglybSAtcmYgLmVnZ3MKCXJtIC1yZiBkaXN0CgpjbGVhbi1yZXBvcnRzOgoJcm0gLXJmIGNvdmVyYWdlX3JlcG9ydC8KCXJtIC1mIGNvdmVyYWdlLnhtbAoJcm0gLWYgLmNvdmVyYWdlCgpjbGVhbi1kZXBzOgoJcGlwIGZyZWV6ZSB8IGdyZXAgLXYgIl4tZSIgfCB4YXJncyBwaXAgdW5pbnN0YWxsIC15CgpjbGVhbjogY2xlYW4tYnVpbGQgY2xlYW4tcHljIGNsZWFuLXJlcG9ydHMgY2xlYW4tZGVwcwoKZ3JwYzoKCXB5dGhvbiAtbSBncnBjX3Rvb2xzLnByb3RvYyAtLXByb3RvX3BhdGg9bWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL3Byb3RvcyAtLXB5dGhvbl9vdXQ9bWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL3N0dWJzIC0tZ3JwY19weXRob25fb3V0PW1hcnZpbl9weXRob25fdG9vbGJveC9lbmdpbmVfYmFzZS9zdHVicyBtYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2UvcHJvdG9zL2FjdGlvbnMucHJvdG8KCWxzIC1sYSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2Uvc3R1YnMvKi5weQoKZGlzdHJpYnV0aW9uOiBjbGVhbi1idWlsZAoJcGlwIGluc3RhbGwgdHdpbmUKCXB5dGhvbiBzZXR1cC5weSBiZGlzdF93aGVlbCAtLXVuaXZlcnNhbAoJdHdpbmUgdXBsb2FkIGRpc3QvbWFydmluX3B5dGhvbl90b29sYm94Ki53aGwKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC8uYnVtcHZlcnNpb24uY2ZnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDAxNjcgMTM0NjMzMzM0NzYgMDIxMDU0ACAwAAAAAAAAAAAAAAAAAAAA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ADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly90cmF2aXMtY2kub3JnL21hcnZpbi1haS9tYXJ2aW4tcHl0aG9uLXRvb2xib3guc3ZnKV0oaHR0cHM6Ly90cmF2aXMtY2kub3JnL21hcnZpbi1haS9tYXJ2aW4tcHl0aG9uLXRvb2xib3gpIFshW2NvZGVjb3ZdKGh0dHBzOi8vY29kZWNvdi5pby9naC9tYXJ2aW4tYWkvbWFydmluLXB5dGhvbi10b29sYm94L2JyYW5jaC9tYXN0ZXIvZ3JhcGgvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9jb2RlY292LmlvL2doL21hcnZpbi1haS9tYXJ2aW4tcHl0aG9uLXRvb2xib3gpCgpbIVtKb2luIHRoZSBjaGF0IGF0IGh0dHBzOi8vZ2l0dGVyLmltL2dpdHRlckhRL2dpdHRlcl0oaHR0cHM6Ly9iYWRnZXMuZ2l0dGVyLmltL0pvaW4lMjBDaGF0LnN2ZyldKGh0dHBzOi8vZ2l0dGVyLmltL21hcnZpbi1haSkKCiMgTWFydmluIFRvb2xib3ggdjAuMC40CgohW10oaHR0cHM6Ly9pbWFnZXMtYW1lcmljYW5hcy5iMncuaW8vaW1nL19zdGFnaW5nL21hcnZpbi9tYXJ2aW4ucG5nKQoKIyBRdWljayBTdGFydAoKIyMgUmV2aWV3CgoqKk1hcnZpbioqIGlzIGFuIG9wZW4tc291cmNlIEFydGlmaWNpYWwgSW50ZWxsaWdlbmNlIHBsYXRmb3JtIHRoYXQgZm9jdXNlcyBvbiBoZWxwaW5nIGRhdGEgc2NpZW50aXN0cyBkZWxpdmVyIG1lYW5pbmdmdWwgc29sdXRpb25zIHRvIGNvbXBsZXggcHJvYmxlbXMuIFN1cHBvcnRlZCBieSBhIHN0YW5kYXJkaXplZCBsYXJnZS1zY2FsZSwgbGFuZ3VhZ2UtYWdub3N0aWMgYXJjaGl0ZWN0dXJlLCBNYXJ2aW4gc2ltcGxpZmllcyB0aGUgcHJvY2VzcyBvZiBleHBsb3JhdGlvbiBhbmQgbW9kZWxpbmcuCgojIyBHZXR0aW5nIFN0YXJ0ZWQKKiBbSW5zdGFsbGluZyBNYXJ2aW4gKFVidW50dSldKGh0dHBzOi8vbWFydmluLmFwYWNoZS5vcmcvbWFydmluLXBsYXRmb3JtLWJvb2svY2gyX3Rvb2xib3hfaW5zdGFsbGF0aW9uL3VidW50dS8pCiogW0luc3RhbGxpbmcgTWFydmluIChNYWNPUyldKGh0dHBzOi8vbWFydmluLmFwYWNoZS5vcmcvbWFydmluLXBsYXRmb3JtLWJvb2svY2gyX3Rvb2xib3hfaW5zdGFsbGF0aW9uL21hYy8pCiogW0luc3RhbGxpbmcgTWFydmluIChPdGhlciBPUykgVmFncmFudF0oaHR0cHM6Ly9tYXJ2aW4uYXBhY2hlLm9yZy9tYXJ2aW4tcGxhdGZvcm0tYm9vay9jaDJfdG9vbGJveF9pbnN0YWxsYXRpb24vdmFncmFudC8pCiogW0NyZWF0aW5nIGEgbmV3IGVuZ2luZV0oI2NyZWF0aW5nLWEtbmV3LWVuZ2luZSkKKiBbV29ya2luZyBpbiBhbiBleGlzdGluZyBlbmdpbmVdKCN3b3JraW5nLWluLWFuLWV4aXN0aW5nLWVuZ2luZSkKKiBbQ29tbWFuZCBsaW5lIGludGVyZmFjZV0oI2NvbW1hbmQtbGluZS1pbnRlcmZhY2UpCiogW1J1bm5pbmcgYW4gZXhhbXBsZSBlbmdpbmVdKCNydW5uaW5nLWEtZXhhbXBsZS1lbmdpbmUpCgoKIyMjIENyZWF0aW5nIGEgbmV3IGVuZ2luZQoxLiBUbyBjcmVhdGUgYSBuZXcgZW5naW5lCmBgYAp3b3Jrb24gcHl0aG9uLXRvb2xib3gtZW52Cm1hcnZpbiBlbmdpbmUtZ2VuZXJhdGUKYGBgClJlc3BvbmQgdG8gdGhlIHByb21wdCBhbmQgd2FpdCBmb3IgdGhlIGVuZ2luZSBlbnZpcm9ubWVudCBwcmVwYXJhdGlvbiB0byBjb21wbGV0ZS4gRG9uJ3QgZm9yZ2V0IHRvIHN0YXJ0IGRldiBib3ggYmVmb3JlIGlmIHlvdSBhcmUgdXNpbmcgdmFncmFudC4KCjIuIFRlc3QgdGhlIG5ldyBlbmdpbmUKYGBgCndvcmtvbiA8bmV3X2VuZ2luZV9uYW1lPi1lbnYKbWFydmluIHRlc3QKYGBgCgozLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgpgYGAKbWFydmluIC0taGVscApgYGAKCiMjIyBXb3JraW5nIGluIGFuIGV4aXN0aW5nIGVuZ2luZQoKMS4gU2V0IFZpcnR1YWxFbnYgYW5kIGdldCB0byB0aGUgZW5naW5lJ3MgcGF0aApgYGAKd29ya29uIDxlbmdpbmVfbmFtZT4tZW52CmBgYAoKMi4gVGVzdCB5b3VyIGVuZ2luZQpgYGAKbWFydmluIHRlc3QKYGBgCgozLiBCcmluZyB1cCB0aGUgbm90ZWJvb2sgYW5kIGFjY2VzcyBpdCBmcm9tIHlvdXIgYnJvd3NlcgpgYGAKbWFydmluIG5vdGVib29rCmBgYAoKIyMjIENvbW1hbmQgbGluZSBpbnRlcmZhY2UKVXNhZ2U6IG1hcnZpbiBbT1BUSU9OU10gQ09NTUFORCBbQVJHU10KCk9wdGlvbnM6CmBgYAogIC0tZGVidWcgICAgICAgI0VuYWJsZSBkZWJ1ZyBtb2RlLgogIC0tdmVyc2lvbiAgICAgI1Nob3cgdGhlIHZlcnNpb24gYW5kIGV4aXQuCiAgLS1oZWxwICAgICAgICAjU2hvdyB0aGlzIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgYW5kIGV4aXQuCmBgYAoKQ29tbWFuZHM6CmBgYAogIGVuZ2luZS1nZW5lcmF0ZSAgICAgI0dlbmVyYXRlIGEgbmV3IG1hcnZpbiBlbmdpbmUgcHJvamVjdC4KICBlbmdpbmUtZ2VuZXJhdGVlbnYgICNHZW5lcmF0ZSBhIG5ldyBtYXJ2aW4gZW5naW5lIGVudmlyb25tZW50LgogIGVuZ2luZS1ncnBjc2VydmVyICAgI01hcnZpbiBnUlBDIGVuZ2luZSBhY3Rpb24gc2VydmVyIHN0YXJ0cy4KICBlbmdpbmUtaHR0cHNlcnZlciAgICNNYXJ2aW4gaHR0cCBhcGkgc2VydmVyIHN0YXJ0cy4KICBoaXZlLWRhdGFpbXBvcnQgICAgICNJbXBvcnQgZGF0YSBzYW1wbGVzIGZyb20gYSBoaXZlIGRhdGFic2UgdG8gdGhlIGhpdmUgcnVubmluZyBpbiB0aGlzIHRvb2xib3guCiAgaGl2ZS1nZW5lcmF0ZWNvbmYgICAjR2VuZXJhdGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUuCiAgaGl2ZS1yZXNldHJlbW90ZSAgICAjRHJvcCBhbGwgcmVtb3RlIHRhYmxlcyBmcm9tIGluZm9ybWVkIGVuZ2luZSBvbiBob3N0LgogIG5vdGVib29rICAgICAgICAgICAgI1N0YXJ0IHRoZSBKdXB5dGVyIG5vdGVib29rIHNlcnZlci4KICBwa2ctYnVtcHZlcnNpb24gICAgICNCdW1wIHRoZSBwYWNrYWdlIHZlcnNpb24uCiAgcGtnLWNyZWF0ZXRhZyAgICAgICAjQ3JlYXRlIGdpdCB0YWcgdXNpbmcgdGhlIHBhY2thZ2UgdmVyc2lvbi4KICBwa2ctc2hvd2NoYW5nZXMgICAgICNTaG93IHRoZSBwYWNrYWdlIGNoYW5nZWxvZy4KICBwa2ctc2hvd2luZm8gICAgICAgICNTaG93IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrYWdlLgogIHBrZy1zaG93dmVyc2lvbiAgICAgI1Nob3cgdGhlIHBhY2thZ2UgdmVyc2lvbi4KICBwa2ctdXBkYXRlZGVwcyAgICAgICNVcGRhdGUgcmVxdWlyZW1lbnRzLnR4dC4KICB0ZXN0ICAgICAgICAgICAgICAgICNSdW4gdGVzdHMuCiAgdGVzdC1jaGVja3BlcDggICAgICAjQ2hlY2sgcHl0aG9uIGNvZGUgc3R5bGUuCiAgdGVzdC10ZGQgICAgICAgICAgICAjV2F0Y2ggZm9yIGNoYW5nZXMgdG8gcnVuIHRlc3RzIGF1dG9tYXRpY2FsbHkuCiAgdGVzdC10b3ggICAgICAgICAgICAjUnVuIHRlc3RzIHVzaW5nIGEgbmV3IHZpcnR1YWxlbnYuCmBgYAoKIyMjIFJ1bm5pbmcgYSBleGFtcGxlIGVuZ2luZSAKCjEuIENsb25lIHRoZSBleGFtcGxlIGVuZ2luZSBmcm9tIHRoZSByZXBvc2l0b3J5CmBg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aWNlbnNlLgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgppbXBvcnQgb3MucGF0aAppbXBvcnQgb3MKaW1wb3J0IHN5cwoKZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwpmcm9tIHNldHVwdG9vbHMuY29tbWFuZC50ZXN0IGltcG9ydCB0ZXN0IGFzIFRlc3RDb21tYW5kCgojIFBhY2thZ2UgYmFzaWMgaW5mbwpQQUNLQUdFX05BTUUgPSAnbWFydmluX3B5dGhvbl90b29sYm94JwpQQUNLQUdFX0RFU0NSSVBUSU9OID0gJ01hcnZpbiBQeXRob24gVG9vbGJveCcKClVSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vbWFydmluLWFpL21hcnZpbi1weXRob24tdG9vbGJveCcKCkFVVEhPUl9OQU1FID0gJ0RhbmllbCBUYWthYmF5YXNoaScKQVVUSE9SX0VNQUlMID0gJ2RhbmllbC50YWthYmF5YXNoaUBnbWFpbC5jb20nCgpQWVRIT05fMiA9IFRydWUKUFlUSE9OXzMgPSBUcnVlCgojIFByb2plY3Qgc3RhdHVzCiMgKHNob3VsZCBiZSAncGxhbm5pbmcnLCAncHJlLWFscGhhJywgJ2FscGhhJywgJ2JldGEnLCAnc3RhYmxlJywgJ21hdHVyZScgb3IgJ2luYWN0aXZlJykuClNUQVRVUyA9ICdzdGFibGUnCgojIFByb2plY3QgdG9waWMKIyBTZWUgaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT8lM0FhY3Rpb249bGlzdF9jbGFzc2lmaWVycyBmb3IgYSBsaXN0ClRPUElDID0gJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcycsCgojIEV4dGVybmFsIGRlcGVuZGVuY2llcwojIE1vcmUgaW5mbyBodHRwczovL3B5dGhvbmhvc3RlZC5vcmcvc2V0dXB0b29scy9zZXR1cHRvb2xzLmh0bWwjZGVjbGFyaW5nLWRlcGVuZGVuY2llcwpSRVFVSVJFTUVOVFNfRVhURVJOQUwgPSBbCiAgICAnc2l4Pj0xLjEwLjAnLAogICAgJ2J1bXB2ZXJzaW9uPj0wLjUuMycsCiAgICAnY2xpY2s+PTMuMycsCiAgICAnanVweXRlcj49MS4wLjAnLAogICAgJ2p1cHl0ZXJsYWI+PTAuMzIuMScsCiAgICAncGVwOD49MS43LjAnLAogICAgJ3ZpcnR1YWxlbnY+PTE1LjAuMScsCiAgICAnanNvbnNjaGVtYT49Mi41LjEnLAogICAgJ3B5dGhvbi1zbHVnaWZ5Pj0wLjEuMCcsCiAgICAncGFyYW1pa28+PTIuMS4yJywKICAgICdQeUhpdmU+PTAuMy4wJywKICAgICd0aHJpZnQ+PTAuMTAuMCcsCiAgICAndGhyaWZ0LXNhc2w+PTAuMi4xJywKICAgICd2aXJ0dWFsZW52d3JhcHBlcj49NC43LjEnLAogICAgJ3JlcXVlc3RzPj0yLjE5LjEnLAogICAgJ3B5dGhvbi1kYXRldXRpbD49Mi43LjMnLAogICAgJ3B5dGhvbi1zbHVnaWZ5Pj0wLjEuMCcsCiAgICAncGF0aC5weT49Ny4yJywKICAgICdodHRwcmV0dHk+PTAuOS41JywKICAgICd0b3JuYWRvPj00LjUuMycsCiAgICAnanNvbnNjaGVtYT49Mi41LjEnLAogICAgJ2dwcm9mMmRvdCcsCiAgICAndWpzb25wYXRoPj0wLjAuMicsCiAgICAnc2ltcGxlanNvbj49My4xMC4wJywKICAgICdjb25maWdvYmo+PTUuMC42JywKICAgICdmaW5kc3Bhcms+PTEuMS4wJywKICAgICdncnBjaW8+PTEuMTMuMCcsCiAgICAnZ3JwY2lvLXRvb2xzPj0xLjEzLjAnLAogICAgJ2pvYmxpYj49MC4xMScsCiAgICAnYXV0b3BlcDg+PTEuMy4zJywKICAgICdwcm9ncmVzc2JhcjI+PTMuMzQuMycsCiAgICAndXJsbGliMz09MS4yMS4xJywKICAgICd1bmlkZWNvZGU9PTEuMC4yMycsCiAgICAnaWRuYT49Mi41JywKICAgICdibGVhY2g+PTEuNS4wJywKICAgICdudW1weT09MS4xMy4zJwpdCgojIFRlc3QgZGVwZW5kZW5jaWVzClJFUVVJUkVNRU5UU19URVNUUyA9IFsKICAgICd0b3g+PTIuMi4wJywKICAgICdtb2NrPj0yLjAuMCcsCiAgICAncHl0ZXN0Pj0yLjkuMicsCiAgICAncHl0ZXN0LWNvdj49MS44LjEsPDIuNicsCiAgICAncHl0ZXN0LXdhdGNoPj00LjEuMCcsCiAgICAncHl0ZXN0LXRlc3Rtb24+PTAuOC4yJywKICAgICdLZXJhcz49Mi4yLjAnLAogICAgJ3RlbnNvcmZsb3c+PTEuOC4wJywKXQojIFRoaXMgaXMgbm9ybWFsbHkgYW4gZW1wdHkgbGlzdApERVBFTkRFTkNZX0xJTktTX0VYVEVSTkFMID0gW10KCiMgc2NyaXB0IHRvIGJlIHVzZWQKU0NSSVBUUyA9IFsnYmluL21hcnZpbicsICdtYXJ2aW4uaW5pJ10KCgpkZWYgX2dldF92ZXJzaW9uKCk6CiAgICAiIiJSZXR1cm4gdGhlIHByb2plY3QgdmVyc2lvbiBmcm9tIFZFUlNJT04gZmlsZS4iIiIKICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgUEFDS0FHRV9OQU1FLCAnVkVSU0lPTicpLCAncmInKSBhcyBmOgogICAgICAgIHZlcnNpb24gPSBmLnJlYWQoKS5kZWNvZGUoJ2FzY2lpJykuc3RyaXAoKQogICAgcmV0dXJuIHZlcnNpb24KCgpjbGFzcyBUb3goVGVzdENvbW1hbmQpOgogICAgIiIiUnVuIHRoZSB0ZXN0IGNhc2VzIHVzaW5nIFRPWCBjb21tYW5kLiIiIgogICAgdXNlcl9vcHRpb25zID0gWygndG94LWFyZ3M9JywgJ2EnLCAiQXJndW1lbnRzIHRvIHBhc3MgdG8gdG94IildCgogICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICBUZXN0Q29tbWFuZC5pbml0aWFsaXplX29wdGlvbnMoc2VsZikKICAgICAgICBzZWxmLnRveF9hcmdzID0gTm9uZQoKICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgIFRlc3RDb21tYW5kLmZpbmFsaXplX29wdGlvbnMoc2VsZikKICAgICAgICBzZWxmLnRlc3RfYXJncyA9IFtdCiAgICAgICAgc2VsZi50ZXN0X3N1aXRlID0gVHJ1ZQoKICAgIGRlZiBydW5fdGVzdHMoc2VsZik6CiAgICAgICAgIyBJbXBvcnQgaGVyZSwgY2F1c2Ugb3V0c2lkZSB0aGUgZWdncyBhcmVuJ3QgbG9hZGVkCiAgICAgICAgaW1wb3J0IHRveAogICAgICAgIGltcG9ydCBzaGxleAogICAgICAgIGFyZ3MgPSBzZWxmLnRveF9hcmdzCiAgICAgICAgaWYgYXJnczoKICAgICAgICAgICAgYXJncyA9IHNobGV4LnNwbGl0KHNlbGYudG94X2FyZ3MpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBSdW4gYWxsIHRlc3RzIGJ5IGRlZmF1bHQKICAgICAgICAgICAgYXJncyA9IFsnLWMnLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ3RveC5pbmknKSwgJ3Rlc3RzJ10KICAgICAgICBlcnJubyA9IHRveC5jbWRsaW5lKGFyZ3M9YXJncykKICAgICAgICBzeXMuZXhpdChlcnJubykKCgpERVZFTE9QTUVOVF9TVEFUVVMgPSB7CiAgICAncGxhbm5pbmcnOiAnMSAtIFBsYW5uaW5nJywKICAgICdwcmUtYWxwaGEnOiAnMiAtIFByZS1BbHBoYScsCiAgICAnYWxwaGEnOiAnQWxwaGEnLAogICAgJ2JldGEnOiAnNCAtIEJldGEnLAogICAgJ3N0YWJsZSc6ICc1IC0gUHJvZHVjdGlvbi9TdGFibGUnLAogICAgJ21hdHVyZSc6ICc2IC0gTWF0dXJlJywKICAgICdpbmFjdGl2ZSc6ICc3IC0gSW5hY3RpdmUnLAp9CgpDTEFTU0lGSUVSUyA9IFsnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IHt9Jy5mb3JtYXQoREVWRUxPUE1FTlRfU1RBVFVTW1NUQVRVU10pXQppZiBQWVRIT05fMjoKICAgIENMQVNTSUZJRVJTICs9IFsKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDInLAogICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywKICAgIF0KaWYgUFlUSE9OXzM6CiAgICBDTEFTU0lGSUVSUyArPSBbCiAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzJywKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNicsCiAgICBdCgpzZXR1cCgKICAgIG5hbWU9UEFDS0FHRV9OQU1FLAogICAgdmVyc2lvbj1fZ2V0X3ZlcnNpb24oKSwKICAgIHVybD1VUkwsCiAgICBkZXNjcmlwdGlvbj1QQUNLQUdFX0RFU0NSSVBUSU9OLAogICAgbG9uZ19kZXNjcmlwdGlvbj1vcGVuKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnUkVBRE1FLm1kJykpLnJlYWQoKSwKICAgIGF1dGhvcj1BVVRIT1JfTkFNRSwKICAgIG1haW50YWluZXI9QVVUSE9SX05BTUUsCiAgICBtYWludGFpbmVyX2VtYWlsPUFVVEhPUl9FTUFJTCwKICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT0oJ3Rlc3RzJywgJ3Rlc3RzLionKSksCiAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgemlwX3NhZmU9RmFsc2UsCiAgICBjbGFzc2lmaWVycz1DTEFTU0lGSUVSUywKICAgIGluc3RhbGxfcmVxdWlyZXM9UkVRVUlSRU1FTlRTX0VYVEVSTkFMLAogICAgdGVzdHNfcmVxdWlyZT1SRVFVSVJFTUVOVFNfVEVTVFMsCiAgICBleHRyYXNfcmVxdWlyZT17CiAgICAgICAgJ3Rlc3RpbmcnOiBSRVFVSVJFTUVOVFNfVEVTVFMsCiAgICB9LAogICAgZGVwZW5kZW5jeV9saW5rcz1ERVBFTkRFTkNZX0xJTktTX0VYVEVSTkFMLAogICAgc2NyaXB0cz1TQ1JJUFRTLAogICAgY21kY2xhc3M9eyd0ZXN0JzogVG94fSwKKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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cyBqc29uIGFuZCBLZXJhcyBzZXJpYWxpenNlciB0byBDbG9zZXMgIzg2IGFuZCBDbG9zZXMgIzk4CiAgIC0gU2F2aW5nIGFuZCBsb2FkaW5nIG1ldHJpY3MgYXJ0aWZhY3RzIGFzIGpzb24gZmlsZXMgdG8gRml4ICM5OAogICAtIEFkZGluZyBhIHN5bWxpbmsgdG8gdGhlIGRhdGEgcGF0aCBvbiBlbmdpbmUgZ2VuZXJhdGUuIGNsb3NlICM5MwogICAtIE1hcnZpbiBpcyBub3cgaW5zdGFsbGFibGUgd2l0aCBwaXAuIGZpeCAjODQKICAgLSBBU0NJSSBlbmNvZGUgZXJyb3IgZml4IGZvciBhY2NlbnRlZCB3b3JkcyBpbiBwcmVkaWN0IG1lc3NhZ2UKICAgLSBBZGQgSnVweXRlciBMYWIgY29tbWFuZC4gRml4ICM4NQogICAtIENsaSBwYXJhbWV0ZXIgY29uZmxpdCBmaXgKICAgLSBOZXcgcGFyYW0gdG8gZm9yY2UgcmVsb2FkICM4MAogICAtIEltcHJvdmluZyB0ZXN0IGNvdmVyYWdlCiAgIC0gTmV3IHB5dGhvbiBiaW5hcnkgcGFyYW1ldGVyIHRvIGJlIHVzZWQgaW4gdGhlIGNyZWF0aW9uIG9mIHZpcnR1YWwgZW52CiAgIC0gRml4IHRvcm5hZG8gNC41LjMgYW5kIHBpcCA5LjAuMQoKIyMjIDAuMC4zCgoJLSBQeXRob24gMyBzdXBwb3J0IGdlbmVyYWwgY29tcGF0aWJpbGl0eSByZWZhY3RvcmluZyAoIzY4KQogICAgLSBBZGQgbWFydmluXyBwcmVmaXggaW4gYXJ0ZWZhY3RzIGdldHRlcnMgYW5kIHNldHRlcnMgdG8gYXZvaWQgdXNlciBjb2RlIGNvbmZsaWN0cyAgIAogICAgLSBGaXhpbmcgIzY2IGJ1ZyByZWxhdGVkIHRvIG92ZXJyaWRlIHRoZSBwYXJhbXMgZGVmYXVsdCB2YWx1ZXMKICAgIC0gUmVmYWN0IGFydGlmYWN0cyBzZXR0ZXIgYW5kIGdldHRlciBpbiBlbmdpbmUgdGVtcGxhdGVzCiAgICAtIE1ha2luZyBtYXJ2aW4uaW5pIGZyb20gdG9vbGJveCBiZSBmb3VuZCBieSBkZWZhdWx0CiAgICAtIE1ha2luZyAicGFyYW1zIiBhcyBhbiBleGVjdXRlIG1ldGhvZCBwYXJhbWV0ZXIgdG8gYmUgcG9zc2libGUgdG8gb3ZlcnJpZGVuIGRlZmF1bHQgdmFsdWVzIGluIHJ1bnRpbWUKICAgIC0gRW5hYmxpbmcgdG8gaW5mb3JtIGV4dHJhIHBhcmFtZXRlcnMgZm9yIGV4ZWN1dG9yJ3MganZtIGN1c3RvbWl6YXRpb24uIEZpeCAjNjUKICAgIC0gSW1wcm92ZSBzcGFyayBjb25mIHBhcmFtZXRlciB1c2FnZSBpbiBjbGkncyBjb21tYW5kcyB0byB1c2UgU1BBUktfQ09ORl9ESVIgYW5kIFNQQVJLX0hPTUUgZW52cy4KICAgIC0gTm90IHVzZSBqc29uIGR1bXBzIGlmIHJlc3BvbnNlIHR5cGUgaXMgc3RyaW5nLiBGaXhlZCAjNjcKICAgIC0gQWRkaW5nIGdpdHRlciB0YWcgdG8gUkVBRE1FIGZpbGUuCiAgICAtIFJlbW92ZSBkZXBsb3kgdG8gcGlweSBmcm9tIGJ1aWxkCiAgICAtIEluc3RhbGwgdHdpbmUgaW4gZGlzdHJpYnV0aW9uIHRhc2sKICAgIC0gQWRkIC0tcHJvY2Vzcy1kZXBlbmRlbmN5LWxpbmtzIGluIHBpcCBpbnN0YWxsIGNvbW1hbmQKICAgIC0gR2VuZXJhbCBidWcgZml4ZXMKCiMjIyAwLjAuMgoKICAgIC0gY2hhbmdlIGV4ZWN1dG9yIHZtIHBhcmFtZXRlciBmcm9tIG1vZGVsUHJvdG9jb2wgdG8gcHJvdG9jb2wKICAgIC0gR2VuZXJpYyBEb2NrZXJmaWxlIHRlbXBsYXRlIGFuZCBtYWtlIGNvbW1hbmRzIHRvIGJlIHVzZWQgdG8gYnVpbGQsIHJ1biBhbmQgcHVzaCBjb250YWluZXJzICAgIAogICAgLSBmaXggc3BhcmsgY29uZiBkaXIgcGFyYW1ldGVyIGJ1ZwogICAgLSBjcmVhdGUgZGlzdHJpYnV0ZSB0YXNrIHRvIHNpbXBsaWZ5IHRoZSBweXBpIHBhY2thZ2UgZGlzdHJpYnV0aW9uLgoKIyMjIDAuMC4xCgogLSBpbml0aWFsIHZlcnNpb24KAAAAAAAAAAAAAAAAAAAAAAAA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YXJrZG93biIsCiAgICJtZXRhZGF0YSI6IHt9LAogICAic291cmNlIjogWwogICAgIiMgQ291bnQgREIgVGFibGVzIFJvd3MiCiAgIF0KICB9LAogIHsKICAgImNlbGxfdHlwZSI6ICJtYXJrZG93biIsCiAgICJtZXRhZGF0YSI6IHt9LAogICAic291cmNlIjogWwogICAgIiMjIEdldHRpbmcgc3Bhcmsgc2Vzc2lvbiIKICAgXQogIH0sCiAgewogICAiY2VsbF90eXBlIjogImNvZGUiLAogICAiZXhlY3V0aW9uX2NvdW50IjogMSwKICAgIm1ldGFkYXRhIjoge30sCiAgICJvdXRwdXRzIjogW10sCiAgICJzb3VyY2UiOiBbCiAgICAiZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmRhdGFfc291cmNlX3Byb3ZpZGVyIGltcG9ydCBnZXRfc3Bhcmtfc2Vzc2lvbiIKICAgXQogIH0sCiAgewogICAiY2VsbF90eXBlIjogImNvZGUiLAogICAiZXhlY3V0aW9uX2NvdW50IjogMiwKICAgIm1ldGFkYXRhIjoge30sCiAgICJvdXRwdXRzIjogW10sCiAgICJzb3VyY2UiOiBbCiAgICAic3BhcmsgPSBnZXRfc3Bhcmtfc2Vzc2lvbihlbmFibGVfaGl2ZT1UcnVlKSIKICAgXQogIH0sCiAgewogICAiY2VsbF90eXBlIjogIm1hcmtkb3duIiwKICAgIm1ldGFkYXRhIjoge30sCiAgICJzb3VyY2UiOiBbCiAgICAiIyMgR2V0dGluZyBhbGwgaGl2ZSBsb2NhbCBkYnMiCiAgIF0KICB9LAogIHsKICAgImNlbGxfdHlwZSI6ICJjb2RlIiwKICAgImV4ZWN1dGlvbl9jb3VudCI6IDMsCiAgICJtZXRhZGF0YSI6IHt9LAogICAib3V0cHV0cyI6IFtdLAogICAic291cmNlIjogWwogICAgImRicyA9IHNwYXJrLnNxbChcInNob3cgZGF0YWJhc2VzXCIpLmNvbGxlY3QoKSIKICAgXQogIH0sCiAgewogICAiY2VsbF90eXBlIjogImNvZGUiLAogICAiZXhlY3V0aW9uX2NvdW50IjogNCwKICAgIm1ldGFkYXRhIjoge30sCiAgICJvdXRwdXRzIjogWwogICAgewogICAgICJuYW1lIjogInN0ZG91dCIsCiAgICAgIm91dHB1dF90eXBlIjogInN0cmVhbSIsCiAgICAgInRleHQiOiBbCiAgICAgICJDb25uZWN0aW5nIHdpdGggY29yZSBkYiAuLi5cbiIsCiAgICAgICIgICBic2NfcHJvZHVjdCBbMTQ5NTMyMDRdXG4iLAogICAgICAiICAgbWlzX3Byb2R1Y3RfaGllcmFyY2h5IFs1Nzk2MjUxXVxuIiwKICAgICAgIkNvbm5lY3Rpbmcgd2l0aCBkZWZhdWx0IGRiIC4uLlxuIiwKICAgICAgIkNvbm5lY3Rpbmcgd2l0aCBtYXJ2aW4gZGIgLi4uXG4iLAogICAgICAiICAgc2ltcGxlX3Byb2R1Y3RfY2xhc3NpZmljYXRpb25fZW5naW5lX2NvcmVfYnNjX3Byb2R1Y3RfMTIwMzc0YWMxNmU1OGNkZjhmMGMwNTBkMGY2OThhZGRhZGYyYzQxYyBbMTQ5NTMyMDRdXG4iLAogICAgICAiICAgc2ltcGxlX3Byb2R1Y3RfY2xhc3NpZmljYXRpb25fZW5naW5lX2NvcmVfbWlzX3Byb2R1Y3RfaGllcmFyY2h5XzBiODA2OWYzYmEzMWVlZGNhNDRiMzBiYzhhNjExMzBmNTc3NmQxMTkgWzU3OTYyNTFdXG4iCiAgICAgXQogICAgfQogICBdLAogICAic291cmNlIjogWwogICAgImZvciBkYiBpbiBkYnM6XG4iLAogICAgIiAgICBkYl9uYW1lID0gZGJbJ2RhdGFiYXNlTmFtZSddXG4iLAogICAgIiAgICBwcmludChcIkNvbm5lY3Rpbmcgd2l0aCB7fSBkYiAuLi5cIi5mb3JtYXQoZGJfbmFtZSkpIFxuIiwKICAgICIgICAgc3Bhcmsuc3FsKFwidXNlIHt9XCIuZm9ybWF0KGRiX25hbWUpKVxuIiwKICAgICIgICAgdGFibGVzID0gc3Bhcmsuc3FsKFwic2hvdyB0YWJsZXNcIikuY29sbGVjdCgpXG4iLAogICAgIiAgICBcbiIsCiAgICAiICAgIGZvciB0YWJsZSBpbiB0YWJsZXM6XG4iLAogICAgIiAgICAgICAgdGFibGVfbmFtZSA9IHRhYmxlWyd0YWJsZU5hbWUnXVxuIiwKICAgICIgICAgICAgIGNvdW50ID0gc3Bhcmsuc3FsKFwic2VsZWN0IDEgZnJvbSB7fVwiLmZvcm1hdCh0YWJsZV9uYW1lKSkuY291bnQoKVxuIiwKICAgICIgICAgICAgIHByaW50IFwiICAge30gW3t9XVwiLmZvcm1hdCh0YWJsZV9uYW1lLCBjb3VudCkiCiAgIF0KICB9LAogIHsKICAgImNlbGxfdHlwZSI6ICJtYXJrZG93biIsCiAgICJtZXRhZGF0YSI6IHt9LAogICAic291cmNlIjogWwogICAgIiMjIFN0b3BpbmcgYW5kIHJlYWxlYXNlIHNwYXJrIHNlc3Npb24iCiAgIF0KICB9LAogIHsKICAgImNlbGxfdHlwZSI6ICJjb2RlIiwKICAgImV4ZWN1dGlvbl9jb3VudCI6IG51bGwsCiAgICJtZXRhZGF0YSI6IHsKICAgICJjb2xsYXBzZWQiOiB0cnVlCiAgIH0sCiAgICJvdXRwdXRzIjogW10sCiAgICJzb3VyY2UiOiBbCiAgICAic3Bhcmsuc3RvcCgpIgogICBdCiAgfSwKICB7CiAgICJjZWxsX3R5cGUiOiAiY29kZSIsCiAgICJleGVjdXRpb25fY291bnQiOiA2LAogICAibWV0YWRhdGEiOiB7fSwKICAgIm91dHB1dHMiOiBbCiAgICB7CiAgICAgImRhdGEiOiB7CiAgICAgICJ0ZXh0L3BsYWluIjogWwogICAgICAgIjE0OTUzMjA0IgogICAgICBdCiAgICAgfSwKICAgICAiZXhlY3V0aW9uX2NvdW50IjogNiwKICAgICAibWV0YWRhdGEiOiB7fSwKICAgICAib3V0cHV0X3R5cGUiOiAiZXhlY3V0ZV9yZXN1bHQiCiAgICB9CiAgIF0sCiAgICJzb3VyY2UiOiBbCiAgICAic3Bhcmsuc3FsKFwic2VsZWN0ICogZnJvbSBjb3JlLmJzY19wcm9kdWN0XCIpLmNvdW50KCkiCiAgIF0KICB9LAogIHsKICAgImNlbGxfdHlwZSI6ICJjb2RlIiwKICAgImV4ZWN1dGlvbl9jb3VudCI6IG51bGwsCiAgICJtZXRhZGF0YSI6IHt9LAogICAib3V0cHV0cyI6IFtd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bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiQ3VzdG9tIGxvZ2dpbmcgbW9kdWxlLgoKVGhpcyBtb2R1bGUgaXMgcmVzcG9uc2libGUgdG8gbWFuYWdlIGxvZyBtZXNzYWdlcyBhbmQgbG9nIGZpbGUuCiIiIgoKaW1wb3J0IG9zCmltcG9ydCBvcy5wYXRoCmltcG9ydCBsb2dnaW5nCgpERUZBVUxUX0xPR19MRVZFTCA9IGxvZ2dpbmcuV0FSTklORwpERUZBVUxUX0xPR19ESVIgPSAnL3RtcCcKCgpjbGFzcyBMb2dnZXIobG9nZ2luZy5nZXRMb2dnZXJDbGFzcygpKToKICAgICIiIkN1c3RvbSBsb2dnZXIgY2xhc3MuCgogICAgVXNlIHRoaXMgY2xhc3MgdG8gY3VzdG9taXplIHRoZSBsb2dnZXIgYmVoYXZpb3Igb3IgdG8gaW50ZXJjZXB0IHRoZQogICAgbWVzc2FnZXMuCiAgICAiIiIKICAgICMgZGVmIGVycm9yKHNlbGYsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICMgICAgICMgQWRkIGhlcmUgY29kZSB0byBpbnRlcmNlcHQgdGhlIHByb2plY3QgZXJyb3IgbWVzc2FnZXMKICAgICMgICAgIHN1cGVyKExvZ2dlciwgc2VsZikuZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpCgogICAgIyBkZWYgY3JpdGljYWwoc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgIyAgICAgIyBBZGQgaGVyZSBjb2RlIHRvIGludGVyY2VwdCB0aGUgcHJvamVjdCBjcml0aWNhbCBtZXNzYWdlcwogICAgIyAgICAgc3VwZXIoTG9nZ2VyLCBzZWxmKS5jcml0aWNhbChtc2csICphcmdzLCAqKmt3YXJncykKCgpsb2dnaW5nLnNldExvZ2dlckNsYXNzKExvZ2dlcikKCgpkZWYgZ2V0X2xvZ2dlcihuYW1lLCBuYW1lc3BhY2U9J21hcnZpbl9weXRob25fdG9vbGJveCcsCiAgICAgICAgICAgICAgIGxvZ19sZXZlbD1ERUZBVUxUX0xPR19MRVZFTCwgbG9nX2Rpcj1ERUZBVUxUX0xPR19ESVIpOgogICAgIiIiQnVpbGQgYSBsb2dnZXIgdGhhdCBvdXRwdXRzIHRvIGEgZmlsZSBhbmQgdG8gdGhlIGNvbnNvbGUsIiIiCgogICAgbG9nX2xldmVsID0gKG9zLmdldGVudigne31fTE9HX0xFVkVMJy5mb3JtYXQobmFtZXNwYWNlLnVwcGVyKCkpKSBvcgogICAgICAgICAgICAgICAgIG9zLmdldGVudignTE9HX0xFVkVMJywgbG9nX2xldmVsKSkKICAgIGxvZ19kaXIgPSAob3MuZ2V0ZW52KCd7fV9MT0dfRElSJy5mb3JtYXQobmFtZXNwYWNlLnVwcGVyKCkpKSBvcgogICAgICAgICAgICAgICBvcy5nZXRlbnYoJ0xPR19ESVInLCBsb2dfZGlyKSkKCiAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigne30ue30nLmZvcm1hdChuYW1lc3BhY2UsIG5hbWUpKQogICAgbG9nZ2VyLnNldExldmVsKGxvZ19sZXZlbCkKCiAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcigKICAgICAgICAnJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCgogICAgIyBDcmVhdGUgYSBjb25zb2xlIHN0cmVhbSBoYW5kbGVyCiAgICBjb25zb2xlX2hhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQogICAgY29uc29sZV9oYW5kbGVyLnNldExldmVsKGxvZ19sZXZlbCkKICAgIGNvbnNvbGVfaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQogICAgbG9nZ2VyLmFkZEhhbmRsZXIoY29uc29sZV9oYW5kbGVyKQoKICAgIHRyeToKICAgICAgICBsb2dfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChsb2dfZGlyKQogICAgICAgIGxvZ19maWxlbmFtZSA9ICd7bmFtZX0ue3BpZH0ubG9nJy5mb3JtYXQoCiAgICAgICAgICAgIG5hbWU9bmFtZXNwYWNlLCBwaWQ9b3MuZ2V0cGlkKCkpCgogICAgICAgIGZpbGVfcGF0aCA9IHN0cihvcy5wYXRoLmpvaW4obG9nX3BhdGgsIGxvZ19maWxlbmFtZSkpCgogICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2dfcGF0aCk6ICAjIHByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgb3MubWFrZWRpcnMobG9nX3BhdGgsIG1vZGU9Nzc0KQoKICAgICAgICAjIENyZWF0ZSBhIGZpbGUgaGFuZGxlcgogICAgICAgIGZpbGVfaGFuZGxlciA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoZmlsZV9wYXRoKQogICAgICAgIGZpbGVfaGFuZGxlci5zZXRMZXZlbChsb2dfbGV2ZWwpCiAgICAgICAgZmlsZV9oYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCiAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoZmlsZV9oYW5kbGVyKQogICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICBsb2dnZXIuZXJyb3IoJ0NvdWxkIG5vdCBjcmVhdGUgbG9nIGZpbGUge2ZpbGV9OiB7ZXJyb3J9Jy5mb3JtYXQoCiAgICAgICAgICAgIGZpbGU9ZmlsZV9wYXRoLCBlcnJvcj1lLnN0cmVycm9yKSkKCiAgICByZXR1cm4gbG9nZ2VyCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9jb25maWcucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwNDUzNyAxMzQ2MzMzMzQ2MiAwMjQyMjYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgb3MKaW1wb3J0IG9zLnBhdGgKaW1wb3J0IGNvcHkKCmltcG9ydCBjb25maWdwYXJzZXIKCmZyb20gLl9jb21wYXRpYmlsaXR5IGltcG9ydCBzaXgKZnJvbSAuX2xvZ2dpbmcgaW1wb3J0IGdldF9sb2dnZXIKCgpfX2FsbF9fID0gWydmaW5kX2luaWRpcicsICdwYXJzZV9pbmknXQoKCmxvZ2dlciA9IGdldF9sb2dnZXIoJ2NvbmZpZycpCgoKZGVmIGZpbmRfaW5pZGlyKGluaWZpbGVuYW1lPSdtYXJ2aW4uaW5pJyk6CiAgICBpbmlkaXIgPSBOb25lCiAgICBjdXJyZW50ZGlyID0gb3MuZ2V0Y3dkKCkKCiAgICB3aGlsZSBUcnVlOgogICAgICAgIGxvZ2dlci5kZWJ1ZygnTG9va2luZyBmb3IgbWFydmluaW5pIGluIHt9Jy5mb3JtYXQoY3VycmVudGRpcikpCiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGN1cnJlbnRkaXIsIGluaWZpbGVuYW1lKSk6CiAgICAgICAgICAgIGluaWRpciA9IGN1cnJlbnRkaXIKICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdtYXJ2aW5pbmkgZm91bmQge30nLmZvcm1hdChpbmlkaXIpKQogICAgICAgICAgICBicmVhawoKICAgICAgICBwYXJlbnRkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGN1cnJlbnRkaXIsIG9zLnBhcmRpcikpCiAgICAgICAgaWYgY3VycmVudGRpciA9PSBwYXJlbnRkaXI6CiAgICAgICAgICAgICMgY3VycmVudGRpciBpcyAnLycKICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdtYXJ2aW5pbmkgbm90IGZvdW5kJykKICAgICAgICAgICAgYnJlYWsKCiAgICAgICAgY3VycmVudGRpciA9IHBhcmVudGRpcgoKICAgIHJldHVybiBpbmlkaXIKCgpkZWYgcGFyc2VfaW5pKGluaXBhdGgsIGRlZmF1bHRzPU5vbmUpOgogICAgaWYgZGVmYXVsdHMgaXMgTm9uZToKICAgICAgICBkZWZhdWx0cyA9IHt9CgogICAgbG9nZ2VyLmRlYnVnKCJQYXJzaW5nIG1hcnZpbmluaSAne30nIHdpdGggZGVmYXVsdHMgJ3t9JyIuZm9ybWF0KGluaXBhdGgsIGRlZmF1bHRzKSkKCiAgICBjb25maWdfcmF3ID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCiAgICBjb25maWdfcmF3LnJlYWQoaW5pcGF0aCkKCiAgICBjb25maWcgPSBjb3B5LmRlZXBjb3B5KGRlZmF1bHRzKQoKICAgIGZvciBzZWN0aW9uIGluIGNvbmZpZ19yYXcuc2VjdGlvbnMoKToKICAgICAgICAjIEZpcnQgcGFzcwogICAgICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZ19yYXcuaXRlbXMoc2VjdGlvbik6CiAgICAgICAgICAgIGtleSA9ICdfJy5qb2luKChzZWN0aW9uLCBrZXkpKS5sb3dlcigpCiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUHJvY2Vzc2luZyB7fToge30nLmZvcm1hdChrZXksIHZhbHVlKSkKICAgICAgICAgICAgcHJvY2Vzc2VkX3ZhbHVlID0gdmFsdWUuZm9ybWF0KCoqY29uZmlnKQogICAgICAgICAgICBjb25maWdba2V5XSA9IHByb2Nlc3NlZF92YWx1ZQoKICAgICMgU2Vjb25kIHBhc3MKICAgIGZvciBrZXksIHZhbHVlIGluIGNvbmZpZy5pdGVtcygpOgogICAg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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgb3MKCmZyb20gLm1hbmFnZSBpbXBvcnQgKgpmcm9tIC5jb21tb24gaW1wb3J0ICoKZnJvbSAuZW5naW5lX2Jhc2UgaW1wb3J0ICoKCiMgR2V0IHBhY2thZ2UgdmVyc2lvbiBudW1iZXIgZnJvbSAiVkVSU0lPTiIgZmlsZQp3aXRoIG9wZW4ob3MucGF0aC5q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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS91c3IvYmluL2VudiBweXRob24KIyBjb2Rpbmc9dXRmLTgKCiMgQ29weXJpZ2h0IFsyMDE3XSBbQjJXIERpZ2l0YWxdCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmltcG9ydCBpbXAKZnJvbSBpbnNwZWN0IGltcG9ydCBnZXRtZW1iZXJzCmltcG9ydCBjbGljawoKCmRlZiBsb2FkX2NvbW1hbmRzX2Zyb21fZmlsZShwYXRoKToKICAgIG1vZHVsZSA9IGltcC5sb2FkX3NvdXJjZSgnY3VzdG9tX2NvbW1hbmRzJywgcGF0aCkKICAgIGNvbW1hbmRzID0gW29iaiBm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bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiQ29tcGF0aWJpbGl0eSBtb2R1bGUuCgpJbXBvcnQgdGhpcyBtb2R1bGUgdG8gaGVscCB0byB3cml0ZSBjb2RlIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMiBhbmQgMy4KIiIiCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCmZyb20gc2l4Lm1vdmVzLnVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UsIHF1b3RlCmZyb20gc2l4IGltcG9ydCBTdHJpbmdJTywgaXRlcml0ZW1zLCB0ZXh0X3R5cGUKZnJvbSBzaXgubW92ZXMgaW1wb3J0IHhyYW5nZQppbXBvcnQgc2l4CgpfX2FsbF9fID0gWydzaXgnXQoKIyBBZGQgaGVyZSBhbnkgY29kZSB0aGF0IGhhdmUgdG8gZGlm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IExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gZnVuY3Rvb2xzIGltcG9ydCB1cGRhdGVfd3JhcHBlcgpmcm9tIGNsaWNrLmRlY29yYXRvcnMgaW1wb3J0IHBhc3NfY29udGV4dApmcm9tIGNsaWNrLmRlY29yYXRvcnMgaW1wb3J0IGNvbW1hbmQgYXMgY2xpY2tfY29tbWFuZAoKCmRlZiBjb21tYW5kKCphcmdzLCAqKmt3YXJncyk6CiAgICBkZWYgd3JhcHBlcihmdW5jKToKICAgICAgICBAcGFzc19jb250ZXh0CiAgICAgICAgZGVmIG5ld19mdW5jKGN0eCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgICAgcmV0dXJuIGN0eC5pbnZva2UoZnVuYywgY3R4LCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgcmV0dXJuIGNsaWNrX2NvbW1hbmQoKmFyZ3MsICoqa3dhcmdzKSh1cGRhdGVfd3JhcHBlcihuZXdfZnVuYywgZnVuYykpCiAgICByZXR1cm4gd3JhcHBlcgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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c2UgYXQKLy8KLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAovLwovLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgovLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZGVmaW5lKFsKICAgICdiYXNlL2pzL25hbWVzcGFjZScsCiAgICAnYmFzZS9qcy9ldmVudHMnLApdLCBmdW5jdGlvbigKICAgIEp1cHl0ZXIsCiAgICBldmVudHMKKSB7CgkidXNlIHN0cmljdCI7CgoJdmFyIGxvZ19wcmVmaXggPSAnW01BUlZJTl0nOwoKICAgIGZ1bmN0aW9uIGxvYWRfaXB5dGhvbl9leHRlbnNpb24oKSB7CiAgICAJCiAgICAJdmFyIGFkZF9tYXJ2aW5fb3B0aW9ucyA9IGZ1bmN0aW9uICgpIHsKICAgIAkJdmFyIHNlbGVjdCA9ICQoJzxzZWxlY3QvPicpLmF0dHIoImNsYXNzIiwgImZvcm0tY29udHJvbCBzZWxlY3QteHMiKS5hdHRyKCJpZCIsICJtYXJ2aW5fYWN0aW9uIik7CiAgICAJCXNlbGVjdC5hcHBlbmQoJCgnPG9wdGlvbi8+JykpOwogICAgCQlzZWxlY3QuYXBwZW5kKCQoJzxvcHRpb24vPicpLmF0dHIoJ3ZhbHVlJywgJ2FjcXVpc2l0b3InKS5hdHRyKCJpZCIsICJhY3F1aXNpdG9yIikudGV4dCgnQWNxdWlzaXRvciBhbmQgQ2xlYW5lcicpKTsKICAgIAkJc2VsZWN0LmFwcGVuZCgkKCc8b3B0aW9uLz4nKS5hdHRyKCd2YWx1ZScsICd0cHJlcGFyYXRvcicpLmF0dHIoImlkIiwgInRwcmVwYXJhdG9yIikudGV4dCgnVHJhaW5pbmcgUHJlcGFyYXRvcicpKTsKICAgIAkJc2VsZWN0LmFwcGVuZCgkKCc8b3B0aW9uLz4nKS5hdHRyKCd2YWx1ZScsICd0cmFpbmVyJykuYXR0cigiaWQiLCAidHJhaW5lciIpLnRleHQoJ1RyYWluZXInKSk7CiAgICAJCXNlbGVjdC5hcHBlbmQoJCgnPG9wdGlvbi8+JykuYXR0cigndmFsdWUnLCAnZXZhbHVhdG9yJykuYXR0cigiaWQiLCAiZXZhbHVhdG9yIikudGV4dCgnTWV0cmljcyBFdmFsdWF0b3InKSk7CiAgICAJCXNlbGVjdC5hcHBlbmQoJCgnPG9wdGlvbi8+JykuYXR0cigndmFsdWUnLCAncHByZXBhcmF0b3InKS5hdHRyKCJpZCIsICJwcHJlcGFyYXRvciIpLnRleHQoJ1ByZWRpY3Rpb24gUHJlcGFyYXRvcicpKTsKICAgIAkJc2VsZWN0LmFwcGVuZCgkKCc8b3B0aW9uLz4nKS5hdHRyKCd2YWx1ZScsICdwcmVkaWN0b3InKS5hdHRyKCJpZCIsICJwcmVkaWN0b3IiKS50ZXh0KCdQcmVkaWN0b3InKSk7CiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmQoJCgnPG9wdGlvbi8+JykuYXR0cigndmFsdWUnLCAnZmVlZGJhY2snKS5hdHRyKCJpZCIsICJmZWVkYmFjayIpLnRleHQoJ0ZlZWRiYWNrJykpOwogICAgCQlKdXB5dGVyLnRvb2xiYXIuZWxlbWVudC5hcHBlbmQoc2VsZWN0KTsKICAgIAl9OwoKICAgIAl2YXIgaGFuZGxlciA9IGZ1bmN0aW9uICgpIHsKICAgIAkJCiAgICAJCXZhciBjZWxsID0gSnVweXRlci5ub3RlYm9vay5nZXRfc2VsZWN0ZWRfY2VsbCgpOwogICAgCQlpZiAoY2VsbC5jZWxsX3R5cGUgIT0gImNvZGUiKXsKICAgIAkJCWFsZXJ0KCJUaGlzIGlzIG5vdCBhIHB5dGhvbiBjb2RlIGNlbGwgISEhIik7CiAgICAJCQlyZXR1cm47CiAgICAJCX0KCiAgICAJCXZhciBtYXJ2aW5fYWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcnZpbl9hY3Rpb24iKTsKCQkJaWYgKG1hcnZpbl9hY3Rpb24uc2VsZWN0ZWRJbmRleCA9PSAwICYmICFjZWxsLm1ldGFkYXRhLm1hcnZpbl9jZWxsKXsKCQkJCW1hcnZpbl9hY3Rpb24uZm9jdXMoKTsKCQkJCXJldHVybjsKCQkJfQoKCQkJaWYoY2VsbC5tZXRhZGF0YS5tYXJ2aW5fY2VsbCl7CgkJCQltYXJ2aW5fYWN0aW9uLm9wdGlvbnMubmFtZWRJdGVtKGNlbGwubWV0YWRhdGEubWFydmluX2NlbGwpLmRpc2FibGVkID0gZmFsc2U7CgkJCQl1cGRhdGVfZGl2KGNlbGwsIGNlbGwubWV0YWRhdGEubWFydmluX2NlbGwpOwoJCQkJZGVsZXRlIGNlbGwubWV0YWRhdGEubWFydmluX2NlbGw7CgkJCQljb25zb2xlLmxvZyhsb2dfcHJlZml4LCAiVW5tYXJrIGNlbGwgJXMgYXMgbWFydmluX2NlbGwhIiwgY2VsbC5jZWxsX2lkKTsKCgkJCX1lbHNlewoJCQkJbWFydmluX2FjdGlvbi5zZWxlY3RlZE9wdGlvbnNbMF0uZGlzYWJsZWQgPSB0cnVlOwoJCQkJY2VsbC5tZXRhZGF0YS5tYXJ2aW5fY2VsbCA9IG1hcnZpbl9hY3Rpb24uc2VsZWN0ZWRPcHRpb25zWzBdLnZhbHVlOwoJCQkJdXBkYXRlX2RpdihjZWxsLCBjZWxsLm1ldGFkYXRhLm1hcnZpbl9jZWxsKTsKCQkJCWNvbnNvbGUubG9nKGxvZ19wcmVmaXgsICJNYXJrIGNlbGwgJXMgYXMgbWFydmluX2NlbGwhIiwgY2VsbC5jZWxsX2lkKTsKCQkJfQogICAgICAgIH07CgogICAgICAgIHZhciB1cGRhdGVfZGl2ID0gZnVuY3Rpb24gKGNlbGwsIGFjdGlvbil7CgogICAgICAgIAlpZihjZWxsLmlucHV0WzBdLnN0eWxlLmJvcmRlclJpZ2h0Lmxlbmd0aCA9PSAwKXsKICAgICAgICAJCWNlbGwuaW5wdXRbMF0uc3R5bGUuYm9yZGVyUmlnaHQgPSAiMTBweCBzb2xpZCBsaWdodGdyZWVuIjsKCiAgICAgICAgCQl2YXIgYWN0aW9uX3RleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFydmluX2FjdGlvbiIpLm9wdGlvbnMubmFtZWRJdGVtKGNlbGwubWV0YWRhdGEubWFydmluX2NlbGwpLnRleHQ7CgogICAgICAgIAkJdmFyIGxhYmVsID0gJCgnPGRpdi8+JykuYXR0cigiaWQiLCAibWFydmluXyIgKyBjZWxsLmNlbGxfaWQpLnRleHQoYWN0aW9uX3RleHQpOwogICAgICAgIAkJbGFiZWxbMF0uc3R5bGUgPSAiZm9udC1zaXplOiBzbWFsbGVyOyBjb2xvcjogZ3JheTsiOwoKICAgICAgICAJCWNlbGwuaW5wdXRbMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobGFiZWxbMF0sIGNlbGwuaW5wdXRbMF0ubmV4dFNpYmxpbmcpCgogICAgICAgIAl9ZWxzZXsKICAgICAgICAJCWNlbGwuaW5wdXRbMF0uc3R5bGUuYm9yZGVyUmlnaHQgPSAiIjsKICAgICAgICAJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXJ2aW5fIiArIGNlbGwuY2VsbF9pZCkucmVtb3ZlKCk7CgkJCX0KCiAgICAgICAgCWNvbnNvbGUubG9nKGxvZ19wcmVmaXgsICJ1cGRhdGluZyBjZWxsICVkIiwgY2VsbC5jZWxsX2lkKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgaW5pdGlhbGl6ZV9tYXJ2aW5fY2VsbHMgPSBmdW5jdGlvbiAoKSB7CgkgICAgICAgIGNvbnNvbGUubG9nKGxvZ19wcmVmaXgsICd1cGRhdGluZyBhbGwgbWFydmluIGNlbGxzJyk7CgkgICAgICAgIHZhciBjZWxscyA9IEp1cHl0ZXIubm90ZWJvb2suZ2V0X2NlbGxzKCk7CgkgICAgICAgIAoJICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7CgkgICAgICAgICAgICB2YXIgY2VsbCA9IGNlbGxzW2ldOwoJICAgICAgICAgICAgaWYgKGNlbGwuY2VsbF90eXBlID09ICJjb2RlIiAmJiBjZWxsLm1ldGFkYXRhLm1hcnZpbl9jZWxsKSB7CgkgICAgICAgICAgICAJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcnZpbl9hY3Rpb24iKS5vcHRpb25zLm5hbWVkSXRlbShjZWxsLm1ldGFkYXRhLm1hcnZpbl9jZWxsKS5kaXNhYmxlZCA9IHRydWU7CgkgICAgICAgICAgICAJdXBkYXRlX2RpdihjZWxsLCBjZWxsLm1ldGFkYXRhLm1hcnZpbl9jZWxsKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoKCSAgICAgICAgdmFyIGNlbGwgPSBKdXB5dGVyLm5vdGVib29rLmdldF9zZWxlY3RlZF9jZWxsKCk7CgkgICAgICAgIGlmIChjZWxsLmNlbGxfdHlwZSAhPSAiY29kZSIpewogICAgICAgIAkJJCgnYnV0dG9uW2RhdGEtanVweXRlci1hY3Rpb249Im1hcnZpbl9leHRlbnNpb246ZXhwb3J0Il0nKVswXS5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgCX0KCgkgICAgfTsKCiAgICAgICAgZXZlbnRzLm9uKCJzZWxlY3QuQ2VsbCIsIGZ1bmN0aW9uKGV2ZW50LCBwYXJhbXMpewogICAgICAgIAl2YXIgY2VsbCA9IHBhcmFtcy5jZWxsOwoKICAgICAgICAJaWYgKGNlbGwuY2VsbF90eXBlICE9ICJjb2RlIil7CiAgICAgICAgCQkkKCdidXR0b25bZGF0YS1qdXB5dGVyLWFjdGlvbj0ibWFydmluX2V4dGVuc2lvbjpleHBvcnQiXScpWzBdLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAJfWVsc2V7CiAgICAgICAgCQkkKCdidXR0b25bZGF0YS1qdXB5dGVyLWFjdGlvbj0ibWFydmluX2V4dGVuc2lvbjpleHBvcnQiXScpWzBdLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgCX0KCiAgICAgICAgCWlmIChjZWxsLmNlbGxfdHlwZSA9PSAiY29kZSIgJiYgY2VsbC5tZXRhZGF0YS5tYXJ2aW5fY2VsbCl7CiAgICAgICAgCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFydmluX2FjdGlvbiIpLnZhbHVlID0gY2VsbC5tZXRhZGF0YS5tYXJ2aW5fY2VsbDsKICAgICAgICAJfWVsc2V7CiAgICAgICAgCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFydmluX2FjdGlvbiIpLnZhbHVlID0gIiI7CiAgICAgICAgCX0KICAgICAgICB9KTsKCiAgICAgICAgZXZlbnRzLm9uKCJkZWxldGUuQ2VsbCIsIGZ1bmN0aW9uKGV2ZW50LCBwYXJhbXMpewogICAgICAgIAl2YXIgY2VsbCA9IHBhcmFtcy5jZWxsOwoKICAgICAgICAJaWYgKGNlbGwuY2VsbF90eXBlID09ICJjb2RlIiAmJiBjZWxsLm1ldGFkYXRhLm1hcnZpbl9jZWxsKXsKICAgICAgICAJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYXJ2aW5fYWN0aW9uIikub3B0aW9ucy5uYW1lZEl0ZW0oY2VsbC5tZXRhZGF0YS5tYXJ2aW5fY2VsbCkuZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAJfQogICAgICAgIH0pOwoKICAgICAgICB2YXIgYWN0aW9uID0gewogICAgICAgICAgICBpY29uOiAnZmEtY29kZScsCiAgICAgICAgICAgIGhlbHAgICAgOiAnTWFyayBhbmQgVW5tYXJrIGNlbGwgYXMgbWFydmluIGFjdGlvbi4gVG8gZXhwb3J0IGNvZGUgc2F2ZSB0aGUgbm90ZWJvb2suJywKICAgICAgICAgICAgaGVscF9pbmRleCA6ICdtbScsCiAgICAgICAgICAgIGhhbmRsZXIgOiBoYW5kbGVyCiAgICAgICAgfTsKCiAgICAgICAgdmFyIGZ1bGxfYWN0aW9uX25hbWUgPSBKdXB5dGVyLmFjdGlvbnMucmVnaXN0ZXIoYWN0aW9uLCAnZXhwb3J0JywgJ21hcnZpbl9leHRlbnNpb24nKTsKICAgICAgICAKICAgICAgICBhZGRfbWFydmluX29wdGlvbnMoKTsKICAgICAgICBKdXB5dGVyLnRvb2xiYXIuYWRkX2J1dHRvbnNfZ3JvdXAoW2Z1bGxfYWN0aW9uX25hbWVdKTsKCiAgICAgICAgaWYgKEp1cHl0ZXIubm90ZWJvb2sgIT09IHVuZGVmaW5lZCAmJiBKdXB5dGVyLm5vdGVib29rLl9mdWxseV9sb2FkZWQpIHsKICAgICAgICAgICAgaW5pdGlhbGl6ZV9tYXJ2aW5fY2VsbHMoKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBsb2FkX2lweXRob25fZXh0ZW5zaW9uOiBsb2FkX2lweXRob25fZXh0ZW5zaW9uCiAgICB9Owp9KTsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9leHRyYXMvbm90ZWJvb2tfZXh0ZW5zaW9ucy9qdXB5dGVyX25vdGVib29rX2NvbmZpZy5weQAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwNzY0NSAxMzQ2MzMzMzQ2MiAwMzUzMjAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgoKZGVmIG1hcnZpbl9jb2RlX2V4cG9ydChtb2RlbCwgKiprd2FyZ3MpOgoKICAgIGltcG9ydCBhdXRvcGVwOAogICAgaW1wb3J0IGluc3BlY3QKICAgIGltcG9ydCByZQogICAgZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmNvbmZpZyBpbXBvcnQgQ29uZmlnCgogICAgcHJpbnQoIkV4ZWN1dGluZyB0aGUgbWFydmluIGV4cG9ydCBob29rIHNjcmlwdC4uLiIpCgogICAgaWYgbW9kZWxbJ3R5cGUnXSAhPSAnbm90ZWJvb2snOgogICAgICAgIHJldHVybgoKICAgICMgaW1wb3J0IGlwZGI7IGlwZGIuc2V0X3RyYWNlKCkKCiAgICBjZWxscyA9IG1vZGVsWydjb250ZW50J11bJ2NlbGxzJ10KCiAgICBhcnRpZmFjdHMgPSB7CiAgICAgICAgJ21hcnZpbl9pbml0aWFsX2RhdGFzZXQnOiByZS5jb21waWxlKHIiKFxibWFydmluX2luaXRpYWxfZGF0YXNldFxiKSIpLAogICAgICAgICdtYXJ2aW5fZGF0YXNldCc6IHJlLmNvbXBpbGUociIoXGJtYXJ2aW5fZGF0YXNldFxiKSIpLAogICAgICAgICdtYXJ2aW5fbW9kZWwnOiByZS5jb21waWxlKHIiKFxibWFydmluX21vZGVsXGIpIiksCiAgICAgICAgJ21hcnZpbl9tZXRyaWNzJzogcmUuY29tcGlsZShyIihcYm1hcnZpbl9tZXRyaWNzXGIpIikKICAgIH0KCiAgICBiYXRjaF9leGVjX3BhdHRlcm4gPSByZS5jb21waWxlKCIoZGVmXHMrZXhlY3V0ZVxzKlwoXHMqc2VsZlxzKixccypwYXJhbXNccyosXHMqXCpcKmt3YXJnc1xzKlwpXHMqOikiKQogICAgb25saW5lX2V4ZWNfcGF0dGVybiA9IHJlLmNvbXBpbGUoIihkZWZccytleGVjdXRlXHMqXChccypzZWxmXHMqLFxzKmlucHV0X21lc3NhZ2VccyosXHMqcGFyYW1zXHMqLFxzKlwqXCprd2FyZ3NccypcKVxzKjopIikKCiAgICBDTEFaWkVTID0gewogICAgICAgICJhY3F1aXNpdG9yIjogIkFjcXVpc2l0b3JBbmRDbGVhbmVyIiwKICAgICAgICAidHByZXBhcmF0b3IiOiAiVHJhaW5pbmdQcmVwYXJhdG9yIiwKICAgICAgICAidHJhaW5lciI6ICJUcmFpbmVyIiwKICAgICAgICAiZXZhbHVhdG9yIjogIk1ldHJpY3NFdmFsdWF0b3IiLAogICAgICAgICJwcHJlcGFyYXRvciI6ICJQcmVkaWN0aW9uUHJlcGFyYXRvciIsCiAgICAgICAgInByZWRpY3RvciI6ICJQcmVkaWN0b3IiLAogICAgICAgICJmZWVkYmFjayI6ICJGZWVkYmFjayIKICAgIH0KCiAgICBmb3IgY2VsbCBpbiBjZWxsczoKICAgICAgICBpZiBjZWxsWydjZWxsX3R5cGUnXSA9PSAnY29kZScgYW5kIGNlbGxbIm1ldGFkYXRhIl0uZ2V0KCJtYXJ2aW5fY2VsbCIsIEZhbHNlKToKICAgICAgICAgICAgc291cmNlID0gY2VsbFsic291cmNlIl0KICAgICAgICAgICAgbmV3X3NvdXJjZSA9IGF1dG9wZXA4LmZpeF9jb2RlKHNvdXJjZSwgb3B0aW9ucz17J21heF9saW5lX2xlbmd0aCc6IDE2MH0pCgogICAgICAgICAgICBtYXJ2aW5fYWN0aW9uID0gY2VsbFsibWV0YWRhdGEiXVsibWFydmluX2NlbGwiXQogICAgICAgICAgICBtYXJ2aW5fYWN0aW9uX2NsYXp6ID0gZ2V0YXR0cihfX2ltcG9ydF9fKENvbmZpZy5nZXQoInBhY2thZ2UiKSksIENMQVpaRVNbbWFydmluX2FjdGlvbl0pCiAgICAgICAgICAgIHNvdXJjZV9wYXRoID0gaW5zcGVjdC5nZXRzb3VyY2VmaWxlKG1hcnZpbl9hY3Rpb25fY2xhenopCgogICAgICAgICAgICBmbmV3X3NvdXJjZV9saW5lcyA9IFtdCiAgICAgICAgICAgIGZvciBuZXdfbGluZSBpbiBuZXdfc291cmNlLnNwbGl0KCJcbiIpOgogICAgICAgICAgICAgICAgZm5ld19saW5lID0gIiAgICAgICAgIiArIG5ld19saW5lICsgIlxuIiBpZiBuZXdfbGluZS5zdHJpcCgpIGVsc2UgIlxuIgoKICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdfbGluZS5zdGFydHN3aXRoKCJpbXBvcnQiKSBhbmQgbm90IG5ld19saW5lLnN0YXJ0c3dpdGgoImZyb20iKSBhbmQgbm90IG5ld19saW5lLnN0YXJ0c3dpdGgoInByaW50Iik6CiAgICAgICAgICAgICAgICAgICAgZm9yIGFydGlmYWN0IGluIGFydGlmYWN0cy5rZXlzKCk6CiAgICAgICAgICAgICAgICAgICAgICAgIGZuZXdfbGluZSA9IHJlLnN1YihhcnRpZmFjdHNbYXJ0aWZhY3RdLCAnc2VsZi4nICsgYXJ0aWZhY3QsIGZuZXdfbGluZSkKCiAgICAgICAgICAgICAgICBmbmV3X3NvdXJjZV9saW5lcy5hcHBlbmQoZm5ld19saW5lKQoKICAgICAgICAgICAgaWYgbWFydmluX2FjdGlvbiA9PSAicHJlZGljdG9yIjoKICAgICAgICAgICAgICAgIGZuZXdfc291cmNlX2xpbmVzLmFwcGVuZCgiICAgICAgICByZXR1cm4gZmluYWxfcHJlZGljdGlvblxuIikKICAgICAgICAgICAgICAgIGV4ZWNfcGF0dGVybiA9IG9ubGluZV9leGVjX3BhdHRlcm4KCiAgICAgICAgICAgIGVsaWYgbWFydmluX2FjdGlvbiA9PSAicHByZXBhcmF0b3IiOgogICAgICAgICAgICAgICAgZm5ld19zb3VyY2VfbGluZXMuYXBwZW5kKCIgICAgICAgIHJldHVybiBpbnB1dF9tZXNzYWdlXG4iKQogICAgICAgICAgICAgICAgZXhlY19wYXR0ZXJuID0gb25saW5lX2V4ZWNfcGF0dGVybgoKICAgICAgICAgICAgZWxpZiBtYXJ2aW5fYWN0aW9uID09ICJmZWVkYmFjayI6CiAgICAgICAgICAgICAgICBmbmV3X3NvdXJjZV9saW5lcy5hcHBlbmQoIiAgICAgICAgcmV0dXJuIFwiVGhhbmtzIGZvciB0aGUgZmVlZGJhY2shXCJcbiIpCiAgICAgICAgICAgICAgICBleGVjX3BhdHRlcm4gPSBvbmxpbmVfZXhlY19wYXR0ZXJuCgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgZXhlY19wYXR0ZXJuID0gYmF0Y2hfZXhlY19wYXR0ZXJuCgogICAgICAgICAgICBmbmV3X3NvdXJjZSA9ICIiLmpvaW4oZm5ld19zb3VyY2VfbGluZXMpCgogICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlX3BhdGgsICdyKycpIGFzIGZwOgogICAgICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQogICAgICAgICAgICAgICAgZnAuc2VlaygwKQogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgICAgICAgICAgICAgaWYgcmUuZmluZGFsbChleGVjX3BhdHRlcm4sIGxpbmUpOgogICAgICAgICAgICAgICAgICAgICAgICBmcC53cml0ZShsaW5lKQogICAgICAgICAgICAgICAgICAgICAgICBmcC53cml0ZShmbmV3X3NvdXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgZnAudHJ1bmNhdGUoKQoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBmcC53cml0ZShsaW5lKQoKICAgICAgICAgICAgcHJpbnQgKCJGaWxlIHt9IHVwZGF0ZWQhIi5mb3JtYXQoc291cmNlX3BhdGgpKQoKICAgIHByaW50KCJGaW5pc2hlZCB0aGUgbWFydmluIGV4cG9ydCBob29rIHNjcmlwdC4uLiIpCgoKYy5GaWxlQ29udGVudHNNYW5hZ2VyLnByZV9zYXZlX2hvb2sgPSBtYXJ2aW5fY29kZV9leHBvcnQKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9jb21tb24vZGF0YV9zb3VyY2VfcHJvdmlkZXIucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwMjQwNCAxMzQ2MzMzMzQ2MiAwMzA0NDMAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0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eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgoiIiJDb25maWd1cmF0aW9uIG1vZHVsZS4KIiIiCgppbXBvcnQgb3MKZnJvbSBjb25maWdwYXJzZXIgaW1wb3J0IENvbmZpZ1BhcnNlciwgTm9TZWN0aW9uRXJyb3IKZnJvbSBjb25maWdvYmogaW1wb3J0IENvbmZpZ09iagoKIyBVc2Ugc2l4IHRvIGNyZWF0ZSBjb2RlIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMiBhbmQgMy4KIyBTZWUgaHR0cDovL3B5dGhvbmhvc3RlZC5vcmcvc2l4Lwpmcm9tIC4uX2NvbXBhdGliaWxpdHkgaW1wb3J0IHNpeApmcm9tIC4uX2xvZ2dpbmcgaW1wb3J0IGdldF9sb2dnZXIKCmZyb20gLmV4Y2VwdGlvbnMgaW1wb3J0IEludmFsaWRDb25maWdFeGNlcHRpb24KZnJvbSAudXRpbHMgaW1wb3J0IGZyb21fanNvbgoKCl9fYWxsX18gPSBbJ0NvbmZpZ3VyYXRpb24nLCAnQ29uZmlnJywgJ2xvYWRfY29uZl9mcm9tX2ZpbGUnXQoKCmxvZ2dlciA9IGdldF9sb2dnZXIoJ2NvcmUnKQoKCmRlZiBsb2FkX2NvbmZfZnJvbV9maWxlKHBhdGg9Tm9uZSwgc2VjdGlvbj0nbWFydmluJyk6CiAgICBkYXRhID0ge30KICAgIGNvbmZpZ19wYXRoID0gcGF0aCAgIyB0cnkgdG8gZ2V0IGNvbmZpZyBwYXRoIGZyb20gYXJncwogICAgaWYgbm90IGNvbmZpZ19wYXRoOiAgIyB0cnkgdG8gZ2V0IGNvbmZpZyBmaWxlIGZyb20gZW52CiAgICAgICAgY29uZmlnX3BhdGggPSBvcy5nZXRlbnYoJ01BUlZJTl9DT05GSUdfRklMRScpIG9yIG9zLmdldGVudignQ09ORklHX0ZJTEUnKQogICAgaWYgbm90IGNvbmZpZ19wYXRoOiAgIyB1c2UgZGVmYXVsdCBmaWxlCiAgICAgICAgY29uZmlnX3BhdGggPSBvcy5nZXRlbnYoIkRFRkFVTFRfQ09ORklHX1BBVEgiKQogICAgbG9nZ2VyLmluZm8oJ0xvYWRpbmcgY29uZmlndXJhdGlvbiB2YWx1ZXMgZnJvbSAie3BhdGh9Ii4uLicuZm9ybWF0KHBhdGg9Y29uZmlnX3BhdGgpKQogICAgY29uZmlnX3BhcnNlciA9IENvbmZpZ09iaihjb25maWdfcGF0aCkKICAgIHRyeToKICAgICAgICBkYXRhID0gY29uZmlnX3BhcnNlcltzZWN0aW9uXQogICAgZXhjZXB0IE5vU2VjdGlvbkVycm9yOgogICAgICAgIGxvZ2dlci53YXJuKCdDb3VsZG5cJ3QgZmluZCAie3NlY3Rpb259IiBzZWN0aW9uIGluICJ7cGF0aH0iJy5mb3JtYXQoCiAgICAgICAgICAgIHNlY3Rpb249c2VjdGlvbiwgcGF0aD1jb25maWdfcGF0aAogICAgICAgICkpCgogICAgcmV0dXJuIGRhdGEKCgpERUZBVUxUX1BSRUZJWCA9ICdtYXJ2aW4uJwpERUZBVUxUX1NFQ1QgPSAnbWFydmluJwoKCmNsYXNzIENvbmZpZ3VyYXRpb24ob2JqZWN0KToKICAgICIiIgogICAgQWJzdHJhY3RzIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbi4KCiAgICBSZWFkcyBjb25maWd1cmF0aW9ucyBhbmQgZGVmYXVsdHMgZnJvbSBhIGAvZXRjL21hcnZpbi9tYXJ2aW4uaW5pYCBmaWxlLgoKICAgIFVzYWdlOgoKICAgICAgICBDb25maWd1cmF0aW9uLmdldCgnbXkua2V5JykKCiAgICAiIiIKICAgIF9jb25mID0ge30KICAgIF9kZWZhdWx0X3NlY3QgPSBERUZBVUxUX1NFQ1QKICAgIFBSRUZJWCA9IERFRkFVTFRfUFJFRklYCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgcmVzZXQoY2xzKToKICAgICAgICBjbHMuX2NvbmYgPSB7fQogICAgICAgIGNscy5fZGVmYXVsdF9zZWN0ID0gREVGQVVMVF9TRUNUCiAgICAgICAgY2xzLlBSRUZJWCA9IERFRkFVTFRfUFJFRklYCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgX2xvYWQoY2xzLCBzZWN0aW9uPU5vbmUpOgogICAgICAgIHNlY3Rpb24gPSBzZWN0aW9uIG9yIGNscy5fZGVmYXVsdF9zZWN0CiAgICAgICAgY2xzLl9jb25mW3NlY3Rpb25dID0gbG9hZF9jb25mX2Zyb21fZmlsZShzZWN0aW9uPXNlY3Rpb24pCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZ2V0KGNscywga2V5LCBzZWN0aW9uPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAiIiIKICAgICAgICBSZXRyaWV2ZXMgYSBjb25maWcgdmFsdWUgZnJvbSBkaWN0LgogICAgICAgIElmIG5vdCBmb3VuZCB0d3Jvd3MgYW4gSW52YWxpZFNjYW5ib29jb25maWdFeGNlcHRpb24uCiAgICAgICAgIiIiCiAgICAgICAgc2VjdGlvbiA9IHNlY3Rpb24gb3IgY2xzLl9kZWZhdWx0X3NlY3QKICAgICAgICBpZiBzZWN0aW9uIG5vdCBpbiBjbHMuX2NvbmY6CiAgICAgICAgICAgIGNscy5fbG9hZChzZWN0aW9uPXNlY3Rpb24pCgogICAgICAgIHZhbHVlID0gY2xzLl9jb25mW3NlY3Rpb25dLmdldChrZXkpCgogICAgICAgICMgaWYgbm90IGZvdW5kIGluIGNvbnRleHQgcmVhZCBkZWZhdWx0CiAgICAgICAgaWYgbm90IHZhbHVlIGFuZCBzZWN0aW9uICE9IGNscy5fZGVmYXVsdF9zZWN0OgogICAgICAgICAgICB2YWx1ZSA9IGNscy5fY29uZltjbHMuX2RlZmF1bHRfc2VjdF0uZ2V0KGtleSkgaWYgY2xzLl9kZWZhdWx0X3NlY3QgaW4gY2xzLl9jb25mIGVsc2UgTm9uZQoKICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgogICAgICAgICAgICBpZiAnZGVmYXVsdCcgaW4ga3dhcmdzOiAgIyBiZWhhdmUgYXMge30uZ2V0KHgsIGRlZmF1bHQ9J2ZhbGxiYWNrJykKICAgICAgICAgICAgICAgIF9kZWZfdmFsdWUgPSBrd2FyZ3NbJ2RlZmF1bHQnXQogICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlN0YXRpYyBjb25maWd1cmF0aW9uIFt7fV0gd2FzIG5vdCBmb3VuZC4gVXNpbmcgdGhlIGRlZmF1bHQgdmFsdWUgW3t9XS4iLmZvcm1hdChrZXksIF9kZWZfdmFsdWUpKQogICAgICAgICAgICAgICAgcmV0dXJuIF9kZWZfdmFsdWUKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRDb25maWdFeGNlcHRpb24odSdOb3QgZm91bmQgZW50cnk6IHt9Jy5mb3JtYXQoa2V5KSkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICB2YWx1ZSA9IGZyb21fanNvbih2YWx1ZSkgICMgcGFyc2UgdmFsdWUKICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgIHBhc3MgICMgaWYgbm90IGpzb24gcGFyc2VhYmxlLCB0aGVuIGtlZXAgdGhlIHN0cmluZyB2YWx1ZQoKICAgICAgICByZXR1cm4gdmFsdWUKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBrZXlzKGNscywgc2VjdGlvbj1Ob25lKToKICAgICAgICAiIiJHZXQgYSBsaXN0IHdpdGggYWxsIGNvbmZpZyBrZXlzIiIiCiAgICAgICAgc2VjdGlvbiA9IHNlY3Rpb24gb3IgY2xzLl9kZWZhdWx0X3NlY3QKICAgICAgICBpZiBzZWN0aW9uIG5vdCBpbiBjbHMuX2NvbmY6CiAgICAgICAgICAgIGNscy5fbG9hZChzZWN0aW9uPXNlY3Rpb24pCiAgICAgICAgcmV0dXJuIGNscy5fY29uZltzZWN0aW9uXS5rZXlzKCkKCgojIEFsaWFzCkNvbmZpZyA9IENvbmZpZ3VyYXRpb24KCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9jb21tb24vaHR0cF9jbGllbnQucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAxMzc0MiAxMzQ2MzMzMzQ2MiAwMjY1NjQAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgoiIiJIdHRwIENsaWVudCBNb2R1bGUuCgoiIiIKaW1wb3J0IHJlcXVlc3RzCmltcG9ydCBtYXRoCgpmcm9tIC51dGlscyBpbXBvcnQgdG9fanNvbgoKIyBVc2Ugc2l4IHRvIGNyZWF0ZSBjb2RlIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMiBhbmQgMy4KIyBTZWUgaHR0cDovL3B5dGhvbmhvc3RlZC5vcmcvc2l4Lwpmcm9tIC4uX2NvbXBhdGliaWxpdHkgaW1wb3J0IHNpeApmcm9tIC4uX2xvZ2dpbmcgaW1wb3J0IGdldF9sb2dnZXIKZnJvbSAuZXhjZXB0aW9ucyBpbXBvcnQgSFRUUEV4Y2VwdGlvbgoKCl9fYWxsX18gPSBbJ0h0dHBDbGllbnQnLCAnTGlzdFJlc3VsdFNldCcsICdIdHRwUmVzcG9uc2UnLCAnQXBpQ2xpZW50J10KCgpsb2dnZXIgPSBnZXRfbG9nZ2VyKCdodHRwX2NsaWVudCcpCgoKY2xhc3MgSHR0cENsaWVudChvYmplY3QpOgogICAgIiIiCiAgICBIdHRwIFJFU1QgY2xpZW50CgogICAgdXNlZCBhcyBzdXBlcmNsYXNzIGZvciB0aGUgc3BlY2lmaWMgQVBJIGNsYXNzZXMKICAgIG92ZXJyaWRlIHRoZSBgaG9zdGAgcHJvcGVydHkgbWV0aG9kIHRvIHJldHVybiB0aGUgYXBpIHNlcnZlciBob3N0CgogICAgdXNhZ2U6CgogICAgICAgIGNsYXNzIE15QXBpQ2xpZW50KG9iamVjdCk6CiAgICAgICAgICAgIEBwcm9wZXJ0eQogICAgICAgICAgICBkZWYgaG9zdChzZWxmKToKICAgICAgICAgICAgICAgIHJldHVybiAiaHR0cDovL215YXBpdXJsOjgwMDAiCgogICAgIiIiCgogICAgZGVmIHVybChzZWxmLCBwYXRoKToKICAgICAgICAiIiIKICAgICAgICBCdWlsZCB1cmwgZm9yIHRoZSBzcGVjaWZpZWQgcGF0aC4KCiAgICAgICAgOnBhcmFtIHBhdGg6IFtzdHJpbmddIHRoZSB1cmwgcGF0aCBmb3IgdGhlIGFwaSBlbmRwb2ludAoKICAgICAgICA6cmV0dXJuOiBbc3RyaW5nXSBmb3JtYXRlZCB1cmwKICAgICAgICAiIiIKCiAgICAgICAgaWYgJ2h0dHA6Ly8nIGluIHBhdGggb3IgJ2h0dHBzOi8vJyBpbiBwYXRoOgogICAgICAgICAgICByZXR1cm4gcGF0aAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmhvc3QgKyBwYXRoCgogICAgZGVmIHBhcnNlX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKToKICAgICAgICAiIiIKICAgICAgICBQYXJzZSB0aGUgcmVzcG9uc2UgYW5kIGJ1aWxkIGEgYHNjYW5ib29fY29tbW9uLmh0dHBfY2xpZW50Lkh0dHBSZXNwb25zZWAgb2JqZWN0LgogICAgICAgIEZvciBzdWNjZXNzZnVsIHJlc3BvbnNlcywgY29udmVydCB0aGUganNvbiBkYXRhIGludG8gYSBkaWN0LgoKICAgICAgICA6cGFyYW0gcmVzcG9uc2U6IHRoZSBgcmVxdWVzdHNgIHJlc3BvbnNlCgogICAgICAgIDpyZXR1cm46IFtIdHRwUmVzcG9uc2VdIHJlc3BvbnNlIG9iamVjdAogICAgICAgICIiIgogICAgICAgIHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c19jb2RlCiAgICAgICAgaWYgcmVzcG9uc2Uub2s6CiAgICAgICAgICAgIGRhdGEgPSByZXNwb25zZS5qc29uKCkKICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNwb25zZShvaz1yZXNwb25zZS5vaywgc3RhdHVzPXN0YXR1cywgZXJyb3JzPU5vbmUsIGRhdGE9ZGF0YSkKICAgICAgICBlbHNlOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBlcnJvcnMgPSByZXNwb25zZS5qc29uKCkKICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICBlcnJvcnMgPSByZXNwb25zZS5jb250ZW50CiAgICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2Uob2s9cmVzcG9uc2Uub2ssIHN0YXR1cz1zdGF0dXMsIGVycm9ycz1lcnJvcnMsIGRhdGE9Tm9uZSkKCiAgICBkZWYgcmVxdWVzdF9oZWFkZXIoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQnVpbGQgYSBoZWFkZXJzIGRpY3Qgd2l0aDoKICAgICAgICAgIC0gdGhlIGNvbnRlbnQgdHlwZSBhcyBqc29uCgogICAgICAgIDpyZXR1cm46IFtkaWN0XSBoZWFkZXJzIGRpY3QKICAgICAgICAiIiIKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICAgICAnQ3NyZi1Ub2tlbic6ICdub2NoZWNrJywKICAgICAgICB9CgogICAgZGVmIGdldF9hbGwoc2VsZiwgcGF0aCwgZGF0YT1Ob25lLCBsaW1pdD0xMDApOgogICAgICAgICIiIkVuY2Fwc3VsYXRlcyBHRVQgYWxsIHJlcXVlc3RzIiIiCiAgICAgICAgcmV0dXJuIExpc3RSZXN1bHRTZXQocGF0aD1wYXRoLCBkYXRhPWRhdGEgb3Ige30sIGxpbWl0PWxpbWl0KQoKICAgIGRlZiBnZXQoc2VsZiwgcGF0aCwgZGF0YT1Ob25lKToKICAgICAgICAiIiJFbmNhcHN1bGF0ZXMgR0VUIHJlcXVlc3RzIiIiCiAgICAgICAgZGF0YSA9IGRhdGEgb3Ige30KICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldChzZWxmLnVybChwYXRoKSwgcGFyYW1zPWRhdGEsIGhlYWRlcnM9c2VsZi5yZXF1ZXN0X2hlYWRlcigpKQogICAgICAgIHJldHVybiBzZWxmLnBhcnNlX3Jlc3BvbnNlKHJlc3BvbnNlKQoKICAgIGRlZiBwb3N0KHNlbGYsIHBhdGgsIGRhdGE9Tm9uZSk6CiAgICAgICAgIiIiRW5jYXBzdWxhdGVzIFBPU1QgcmVxdWVzdHMiIiIKICAgICAgICBkYXRhID0gZGF0YSBvciB7fQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMucG9zdChzZWxmLnVybChwYXRoKSwgZGF0YT10b19qc29uKGRhdGEpLCBoZWFkZXJzPXNlbGYucmVxdWVzdF9oZWFkZXIoKSkKICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV9yZXNwb25zZShyZXNwb25zZSkKCiAgICBkZWYgcHV0KHNlbGYsIHBhdGgsIGRhdGE9Tm9uZSk6CiAgICAgICAgIiIiRW5jYXBzdWxhdGVzIFBVVCByZXF1ZXN0cyIiIgogICAgICAgIGRhdGEgPSBkYXRhIG9yIHt9CiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5wdXQoc2VsZi51cmwocGF0aCksIGRhdGE9dG9fanNvbihkYXRhKSwgaGVhZGVycz1zZWxmLnJlcXVlc3RfaGVhZGVyKCkpCiAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfcmVzcG9uc2UocmVzcG9uc2UpCgogICAgZGVmIGRlbGV0ZShzZWxmLCBwYXRoLCBkYXRhPU5vbmUpOgogICAgICAgICIiIkVuY2Fwc3VsYXRlcyBERUxFVEUgcmVxdWVzdHMiIiIKICAgICAgICBkYXRhID0gZGF0YSBvciB7fQogICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZGVsZXRlKHNlbGYudXJsKHBhdGgpLCBkYXRhPXRvX2pzb24oZGF0YSksIGhlYWRlcnM9c2VsZi5yZXF1ZXN0X2hlYWRlcigpKQogICAgICAgIHJldHVybiBzZWxmLnBhcnNlX3Jlc3BvbnNlKHJlc3BvbnNlKQoKCmNsYXNzIExpc3RSZXN1bHRTZXQob2JqZWN0KToKICAgICIiIgogICAgVXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgcmVzdWx0IG9mIHJlcXVlc3RzIG9mIGxpc3RzLgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGRhdGE9Tm9uZSwgbGltaXQ9NTAsIHBhZ2U9MSk6CiAgICAgICAgc2VsZi5wYXRoID0gcGF0aAogICAgICAgIHNlbGYucGFyYW1zID0gZGF0YSBvciB7fQogICAgICAgIHNlbGYubGltaXQgPSBsaW1pdAogICAgICAgIHNlbGYucGFnZSA9IHBhZ2UKCiAgICAgICAgc2VsZi5yZXNwb25zZSA9IE5vbmUKICAgICAgICBzZWxmLl9vYmplY3RzID0gW10KCiAgICAgICAgc2VsZi5fcHJvY2VzcygpCgogICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucmVzcG9uc2UuZGF0YS5nZXQoJ3RvdGFsJywgMCkKCiAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgbW9yZV9yZXN1bHRzID0gVHJ1ZQoKICAgICAgICB3aGlsZSBtb3JlX3Jlc3VsdHM6CiAgICAgICAgICAgIGZvciBpdGVtIGluIHNlbGYuX29iamVjdHM6CiAgICAgICAgICAgICAgICB5aWVsZCBpdGVtCgogICAgICAgICAgICBuZXh0X3BhZ2UgPSBzZWxmLl9uZXh0X3BhZ2UoKQogICAgICAgICAgICBpZiBuZXh0X3BhZ2U6CiAgICAgICAgICAgICAgICBzZWxmLnBhZ2UgPSBuZXh0X3BhZ2UKICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MoKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgbW9yZV9yZXN1bHRzID0gRmFsc2UKCiAgICBkZWYgX25leHRfcGFnZShzZWxmKToKICAgICAgICBuZXdfcGFnZSA9IE5vbmUKICAgICAgICBpZiBtYXRoLmNlaWwoc2VsZi5yZXNwb25zZS5kYXRhWyd0b3RhbCddIC8gZmxvYXQoc2VsZi5saW1pdCkpID49IChzZWxmLnBhZ2UgKyAxKToKICAgICAgICAgICAgbmV3X3BhZ2UgPSBzZWxmLnBhZ2UgKyAxCiAgICAgICAgcmV0dXJuIG5ld19wYWdlCgogICAgZGVmIF9wcm9jZXNzKHNlbGYpOgogICAgICAgIHVybCA9IGFwaV9jbGllbnQudXJsKHNlbGYucGF0aCkKICAgICAgICBzZWxmLnBhcmFtcy51cGRhdGUoeydwYWdlJzogc2VsZi5wYWdlLCAncGVyX3BhZ2UnOiBzZWxmLmxpbWl0fSkKCiAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsLCBwYXJhbXM9c2VsZi5wYXJhbXMsIGhlYWRlcnM9YXBpX2NsaWVudC5yZXF1ZXN0X2hlYWRlcigpKQogICAgICAgIHJlc3BvbnNlID0gYXBpX2NsaWVudC5wYXJzZV9yZXNwb25zZShyZXNwb25zZSkKCiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLl9vYmplY3RzID0gcmVzcG9uc2UuZGF0YVsnb2JqZWN0cyddCiAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgcmFpc2UgSFRUUEV4Y2VwdGlvbihyZXNwb25zZS5lcnJvcnMpCiAgICAgICAgc2VsZi5yZXNwb25zZSA9IHJlc3BvbnNlCgoKY2xhc3MgQXBpQ2xpZW50KEh0dHBDbGllbnQpOgogICAgIiIiCiAgICBEYXRhIEFwaSBjbGllbnQgYWJzdHJhY3R0aW9uLgogICAgU2VlIGBzY2FuYm9vX2NvbW1vbi5odHRwX2NsaWVudC5IdHRwQ2xpZW50YCBmb3IgbW9yZSBpbmZvLgogICAgIiIiCgogICAgQHByb3BlcnR5CiAgICBkZWYgaG9zdChzZWxmKToKICAg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b3J0IHJlCmltcG9ydCBkYXRldGltZQppbXBvcnQgdGltZQppbXBvcnQganNvbgppbXBvcnQgc2ltcGxlanNvbgppbXBvcnQgdXVpZAppbXBvcnQgaGFzaGxpYgppbXBvcnQganNvbnNjaGVtYQppbXBvcnQgd2FybmluZ3MKZnJvbSBzbHVnaWZ5IGltcG9ydCBzbHVnaWZ5CgojIFVzZSBzaXggdG8gY3JlYXRlIGNvZGUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyIGFuZCAzLgojIFNlZSBodHRwOi8vcHl0aG9uaG9zdGVkLm9yZy9zaXgvCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgeHJhbmdlLCB0ZXh0X3R5cGUsIHF1b3RlCmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgpmcm9tIC5leGNlcHRpb25zIGltcG9ydCBJbnZhbGlkSnNvbkV4Y2VwdGlvbgoKCmxvZ2dlciA9IGdldF9sb2dnZXIoJ3V0aWxzJykKCgpjbGFzcyBtZW1vaXplZF9jbGFzc19wcm9wZXJ0eShvYmplY3QpOgogICAgIiIiQ3JlYXRlcyBhIHNpbmdsZXRvbiBjbGFzcyBwcm9wZXJ0eQoKICAgIFVzYWdlOgoKICAgICAgICBjbGFzcyBNeUNsYXNzOgogICAgICAgICAgICBAbWVtb2l6ZWRfY2xhc3NfcHJvcGVydHkKICAgICAgICAgICAgZGVmIGJsYShjbHMpOgogICAgICAgICAgICAgICAgcHJpbnQgJ29ubHkgb25jZScKICAgICAgICAgICAgICAgIHJldHVybiA0MgoKICAgICAgICBNeUNsYXNzLmJsYQogICAgICAgICMgJ29ubHkgb25jZScKICAgICAgICAjIDQyCgogICAgICAgIE15Q2xhc3MuYmxhCiAgICAgICAgIyA0MgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyYXBwZWQpOgogICAgICAgIHNlbGYud3JhcHBlZCA9IHdyYXBwZWQKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuX19kb2NfXyA9IHdyYXBwZWQuX19kb2NfXwogICAgICAgIGV4Y2VwdDogICMgcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICBwYXNzCgogICAgIyBpZiBjYWxsZWQgb24gYSBjbGFzcywgaW5zdCBpcyBOb25lIGFuZCBvYmp0eXBlIGlzIHRoZSBjbGFzcwogICAgIyBpZiBjYWxsZWQgb24gYW4gaW5zdGFuY2UsIGluc3QgaXMgdGhlIGluc3RhbmNlLCBhbmQgb2JqdHlwZQogICAgIyB0aGUgY2xhc3MKICAgIGRlZiBfX2dldF9fKHNlbGYsIGluc3QsIG9ianR5cGU9Tm9uZSk6CiAgICAgICAgdmFsID0gc2VsZi53cmFwcGVkKG9ianR5cGUpCiAgICAgICAgc2V0YXR0cihvYmp0eXBlLCBzZWxmLndyYXBwZWQuX19uYW1lX18sIHZhbCkKICAgICAgICByZXR1cm4gdmFsCgoKY2xhc3MgY2xhc3NfcHJvcGVydHkob2JqZWN0KToKICAgICIiIkNyZWF0ZXMgYSBjbGFzcyBwcm9wZXJ0eQoKICAgIFVzYWdlOgoKICAgICAgICBjbGFzcyBNeUNsYXNzOgogICAgICAgICAgICBAY2xhc3Nwcm9wZXJ0eQogICAgICAgICAgICBkZWYgYmxhKGNscyk6CiAgICAgICAgICAgICAgICBwcmludCAnaGknCiAgICAgICAgICAgICAgICByZXR1cm4gNDIKCiAgICAgICAgTXlDbGFzcy5ibGEKICAgICAgICAjICdoaScKICAgICAgICAjIDQyCgogICAgICAgIE15Q2xhc3MuYmxhCiAgICAgICAgIyAnaGknCiAgICAgICAgIyA0MgogICAgIiIiCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHdyYXBwZWQpOgogICAgICAgIHNlbGYud3JhcHBlZCA9IHdyYXBwZWQKICAgICAgICB0cnk6CiAgICAgICAgICAgIHNlbGYuX19kb2NfXyA9IHdyYXBwZWQuX19kb2NfXwogICAgICAgIGV4Y2VwdDogICMgcHJhZ21hOiBubyBjb3ZlcgogICAgICAgICAgICBwYXNzCgogICAgZGVmIF9fZ2V0X18oc2VsZiwgaW5zdCwgb2JqdHlwZT1Ob25lKToKICAgICAgICB2YWwgPSBzZWxmLndyYXBwZWQob2JqdHlwZSkKICAgICAgICByZXR1cm4gdmFsCgoKZGVmIGNodW5rcyhsc3QsIHNpemUpOgogICAgIiIiWWllbGQgc3VjY2Vzc2l2ZSBuLXNpemVkIGNodW5rcyBmcm9tIGxzdC4iIiIKICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4obHN0KSwgc2l6ZSk6CiAgICAgICAgeWllbGQgbHN0W2k6aSArIHNpemVdCgoKZGVmIF90b19qc29uX2RlZmF1bHQob2JqKToKICAgICIiIkhlbHBlciB0byBjb252ZXJ0IG5vbiBkZWZhdWx0IG9iamVjdHMgdG8ganNvbi4KCiAgICBVc2FnZToKICAgICAgICBzaW1wbGVqc29uLmR1bXBzKGRhdGEsIGRlZmF1bHQ9X3RvX2pzb25fZGVmYXVsdCkKICAgICIiIgogICAgIyBEYXRldGltZQogICAgaWYgaXNpbnN0YW5jZShvYmosIGRhdGV0aW1lLmRhdGV0aW1lKToKICAgICAgICByZXR1cm4gb2JqLmlzb2Zvcm1hdCgpCgogICAgIyBVVUlECiAgICBpZiBpc2luc3RhbmNlKG9iaiwgdXVpZC5VVUlEKToKICAgICAgICByZXR1cm4gc3RyKG9iaikKCiAgICAjIG51bXB5CiAgICBpZiBoYXNhdHRyKG9iaiwgJ2l0ZW0nKToKICAgICAgICByZXR1cm4gb2JqLml0ZW0oKQoKICAgICMgIyBFbnVtCiAgICAjIGlmIGhhc2F0dHIob2JqLCAndmFsdWUnKToKICAgICMgICAgIHJldHVybiBvYmoudmFsdWUKCiAgICB0cnk6CiAgICAgICAgcmV0dXJuIG9iai5pZAogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3tvYmp9IGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScuZm9ybWF0KG9iaj1yZXByKG9iaikpKQoKCmRhdGV0aW1lX3JlZ2V4ID0gcmUuY29tcGlsZSgnKFxkezR9KS0oXGR7Mn0pLShcZHsyfSlUKFxkezJ9KTooXGR7Mn0pOihcZHsyfSknKQp1dWlkX3JlZ2V4ID0gcmUuY29tcGlsZSgnXlswLTlhLWZdezh9KC1bMC05YS1mXXs0fSl7M30tWzAtOWEtZl17MTJ9JCcpCgoKZGVmIF9mcm9tX2pzb25fb2JqZWN0X2hvb2sob2JqKToKICAgICIiIkNvbnZlcnRzIGEganNvbiBzdHJpbmcsIHdoZXJlIGRhdGV0aW1lIGFuZCBVVUlEIG9iamVjdHMgd2VyZSBjb252ZXJ0ZWQKICAgIGludG8gc3RyaW5ncyB1c2luZyB0aGUgJ190b19qc29uX2RlZmF1bHQnLCBpbnRvIGEgcHl0aG9uIG9iamVjdC4KCiAgICBVc2FnZToKICAgICAgICBzaW1wbGVqc29uLmxvYWRzKGRhdGEsIG9iamVjdF9ob29rPV9mcm9tX2pzb25fb2JqZWN0X2hvb2spCiAgICAiIiIKCiAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvYmouaXRlbXMoKToKICAgICAgICAjIENoZWNrIGZvciBkYXRldGltZSBvYmplY3RzCiAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKICAgICAgICAgICAgZHRfcmVzdWx0ID0gZGF0ZXRpbWVfcmVnZXgubWF0Y2godmFsdWUpCiAgICAgICAgICAgIGlmIGR0X3Jlc3VsdDoKICAgICAgICAgICAgICAgIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kID0gbWFwKAogICAgICAgICAgICAgICAgICAgIGxhbWJkYSB4OiBpbnQoeCksIGR0X3Jlc3VsdC5ncm91cHMoKSkKICAgICAgICAgICAgICAgIG9ialtrZXldID0gZGF0ZXRpbWUuZGF0ZXRpbWUoCiAgICAgICAgICAgICAgICAgICAgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkdF9yZXN1bHQgPSB1dWlkX3JlZ2V4Lm1hdGNoKHZhbHVlKQogICAgICAgICAgICAgICAgaWYgZHRfcmVzdWx0OgogICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdXVpZC5VVUlEKHZhbHVlKQogICAgcmV0dXJuIG9iagoKCmRlZiB0b19qc29uKGRhdGEpOgogICAgIiIiQ29udmVydCBub24gZGVmYXVsdCBvYmplY3RzIHRvIGpzb24uIiIiCiAgICByZXR1cm4ganNvbi5kdW1wcyhkYXRhLCBkZWZhdWx0PV90b19qc29uX2RlZmF1bHQpCgoKZGVmIGZyb21fanNvbihqc29uX3N0cik6CiAgICByZXR1cm4gc2ltcGxlanNvbi5sb2Fkcyhqc29uX3N0ciwgb2JqZWN0X2hvb2s9X2Zyb21fanNvbl9vYmplY3RfaG9vaykKCgpkZWYgdmFsaWRhdGVfanNvbihkYXRhLCBzY2hlbWEpOgogICAgaWYgaXNpbnN0YW5jZShkYXRhLCBzdHIpOgogICAgICAgIGRhdGEgPSBmcm9tX2pzb24oZGF0YSkKICAgIGlmIGlzaW5zdGFuY2Uoc2NoZW1hLCBzdHIpOgogICAgICAgIHNjaGVtYSA9IGZyb21fanNvbihzY2hlbWEpCgogICAgdHJ5OgogICAgICAgIGpzb25zY2hlbWEudmFsaWRhdGUoZGF0YSwgc2NoZW1hKQogICAgZXhjZXB0IGpzb25zY2hlbWEuVmFsaWRhdGlvbkVycm9yIGFzIGU6CiAgICAgICAgcmFpc2UgSW52YWxpZEpzb25FeGNlcHRpb24oZS5tZXNzYWdlKQoKCmRlZiBpc192YWxpZF9qc29uKGRhdGEsIHNjaGVtYSk6CiAgICByZXQgPSBUcnVlCiAgICB0cnk6CiAgICAgICAgdmFsaWRhdGVfanNvbihkYXRhLCBzY2hlbWEpCiAgICBleGNlcHQgSW52YWxpZEpzb25FeGNlcHRpb246CiAgICAgICAgcmV0ID0gRmFsc2UKICAgIHJldHVybiByZXQKCgpkZWYgZ2VuZXJhdGVfa2V5KHN0cmluZyk6CiAgICByZXR1cm4gaGFzaGxpYi5zaGEyNTYoc3RyaW5nLmVuY29kZSgndXRmLTgnKSkuaGV4ZGlnZXN0KCkKCgpkZWYgdG9fc2x1ZyhzdHJ2YWx1ZSk6CiAgICAiIiJXcmFwcGVyIHRvIGNvbnZlcnQgYW55IHN0cmluZyBvbiBzbHVnIiIiCiAgICByZXR1cm4gc2x1Z2lmeShzdHJ2YWx1ZSkKCgpkZWYgZ2V0YXR0cl9xdWFsaWZpZWQob2JqLCBuYW1lLCAqYXJncyk6CiAgICBpZiBsZW4oYXJncykgPiAxOgogICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgJ2dldGF0dHJfcXVhbGlmaWVkIGV4cGVjdGVkIGF0IG1vc3QgMyBhcmd1bWVudHMsIGdvdCB7fScuZm9ybWF0KGxlbihhcmdzKSArIDIpKQogICAgaGFzX2RlZmF1bHQgPSBGYWxzZQogICAgaWYgYXJnczoKICAgICAgICBkZWZhdWx0ID0gYXJnc1swXQogICAgICAgIGhhc19kZWZhdWx0ID0gVHJ1ZQogICAgIyBnZXQgYXR0cmlidXRlIG5hbWVzCiAgICBmb3IgYXR0ciBpbiBuYW1lLnNwbGl0KCIuIik6CiAgICAgICAga2V5ID0gTm9uZQogICAgICAgICMgY2hlY2sgaWYgaXMgYSBkaWN0CiAgICAgICAgaWYgJ1snIGluIGF0dHI6CiAgICAgICAgICAgICMgZ2V0IHRoZSBhdHRyIG5hbWUgYW5kIGtleQogICAgICAgICAgICBhdHRyLCBrZXkgPSBhdHRyWzotMV0uc3BsaXQoJ1snKQogICAgICAgICAgICAjIHJlbW92ZSBxdW90ZXMKICAgICAgICAgICAgaWYga2V5WzBdIGluICgnIicsICInIikgYW5kIGtleVswXSA9PSBrZXlbLTFdOgogICAgICAgICAgICAgICAga2V5ID0ga2V5WzE6LTFdCiAgICAgICAgdHJ5OgogICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgYXR0cikKICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgIGlmIG5vdCBoYXNfZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgICAgaWYga2V5OgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvYmogPSBvYmpba2V5XQogICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICBpZiBub3QgaGFzX2RlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICByZXR1cm4gb2JqCgoKZGVmIGNoZWNrX3BhdGgocGF0aCwgY3JlYXRlPUZhbHNlKToKICAgICIiIgogICAgQ2hlY2sgZm9yIGEgcGF0aCBvbiBmaWxlc3lzdGVtCgogICAgOnBhcmFtIHBhdGg6IHN0ciAtIHBhdGggbmFtZQogICAgOnBhcmFtIGNyZWF0ZTogYm9vbCAtIGNyZWF0ZSBpZiBkbyBub3QgZXhpc3QKICAgIDpyZXR1cm46IGJvb2wgLSBwYXRoIGV4aXN0cwogICAgIiIiCiAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgaWYgY3JlYXRlOgogICAgICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQogICAgICAgICAgICByZXR1cm4gb3MucGF0aC5leGlzdHMocGF0aCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKCiAgICByZXR1cm4gVHJ1ZQoKCmRlZiBnZXRfZGF0ZXRpbWUoKToKICAgICIiIgogICAgR2V0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgaW4gVVRDCgogICAgOnJldHVybjogc3RyaW5nCiAgICAiIiIKICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKHRpbWUudGltZSgpKS5zdHJmdGltZSgnJVktJW0tJWQgJUg6JU06JVMnKSArICcgVVRDJwoKCmRlZiBkZXByZWNhdGVkKGZ1bmMpOgogICAgZGVmIG5ld19mdW5jKCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdhbHdheXMnLCBEZXByZWNhdGlvbldhcm5pbmcpICAjIHR1cm4gb2ZmIGZpbHRlcgogICAgICAgIHdhcm5pbmdzLndhcm4oIkNhbGwgdG8gZGVwcmVjYXRlZCBmdW5jdGlvbiB7fS4iLmZvcm1hdCgKICAgICAgICAgICAgZnVuYy5fX25hbWVfXyksIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZGVmYXVsdCcsIERlcHJlY2F0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LAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gaHR0cC5jbGllbnQgaW1wb3J0IEhUVFBFeGNlcHRpb24gYXMgSFRUUEV4Y2VwdGlvbkJhc2UKCgpjbGFzcyBDb25maWdFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICIiIgogICAgTWFydmluIENvbmZpZyBCYXNlIEV4Y2VwdGlvbgogICAgIiIiCgpjbGFzcyBJbnZhbGlkQ29uZmlnRXhjZXB0aW9uKENvbmZpZ0V4Y2VwdGlvbik6CiAgICAiIiIKICAgIEludmFsaWQgTWFydmluIENvbmZpZyBCYXNlIEV4Y2VwdGlvbgogICAgIiIiCgpjbGFzcyBJbnZhbGlkSnNvbkV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgIiIiCiAgICBJbnZhbGlkIEpTT04KICAgICIiIgoKY2xhc3MgSFRUUEV4Y2VwdGlvbihIVFRQRXhjZXB0aW9uQmFzZSk6CiAgICAiIiIKICAgIEhUVFAgZXhjZXB0aW9uCiAgICAiIiIKAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L2NvbW1vbi9leGNlcHRpb25zLnB5YwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDAyNDA0IDEzNDYzNDQzMjA0IDAyNjU2MAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAA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QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiRGF0YSBNb2R1bGUuCgoiIiIKCmltcG9ydCBvcwppbXBvcnQgcmVxdWVzdHMKaW1wb3J0IHByb2dyZXNzYmFyCgojIFVzZSBzaXggdG8gY3JlYXRlIGNvZGUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyIGFuZCAzLgojIFNlZSBodHRwOi8vcHl0aG9uaG9zdGVkLm9yZy9zaXgvCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgc2l4CmZyb20gLnV0aWxzIGltcG9ydCBjaGVja19wYXRoCmZyb20gLmV4Y2VwdGlvbnMgaW1wb3J0IEludmFsaWRDb25maWdFeGNlcHRpb24KZnJvbSBzaXggaW1wb3J0IHdpdGhfbWV0YWNsYXNzCmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKbG9nZ2VyID0gZ2V0X2xvZ2dlcignY29tbW9uLmRhdGEnKQoKCmNsYXNzIEFic3RyYWN0TWFydmluRGF0YSh0eXBlKToKICAgIEBwcm9wZXJ0eQogICAgZGVmIGRhdGFfcGF0aChjbHMpOgogICAgICAgIHJldHVybiBjbHMuZ2V0X2RhdGFfcGF0aCgpCgoKY2xhc3MgTWFydmluRGF0YSh3aXRoX21ldGFjbGFzcyhBYnN0cmFjdE1hcnZpbkRhdGEpKToKICAgIF9rZXkgPSAnTUFSVklOX0RBVEFfUEFUSCcKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBnZXRfZGF0YV9wYXRoKGNscyk6CiAgICAgICAgIiIiCiAgICAgICAgUmVhZCBkYXRhIHBhdGggZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMgaW4gb3JkZXIgb2YgcHJpb3JpdHk6CgogICAgICAgIDEuIEVudmlyb25tZW50IHZhcmlhYmxlCgogICAgICAgIElmIG5vdCBmb3VuZCByYWlzZXMgYW4gZXhjZXB0aW9uCgogICAgICAgIDpyZXR1cm46IHN0ciAtIGRhdGFwYXRoCiAgICAgICAgIiIiCiAgICAgICAgbWFydmluX3BhdGggPSBvcy5lbnZpcm9uLmdldChjbHMuX2tleSkKICAgICAgICBpZiBub3QgbWFydmluX3BhdGg6CiAgICAgICAgICAgIHJhaXNlIEludmFsaWRDb25maWdFeGNlcHRpb24oJ0RhdGEgcGF0aCBub3Qgc2V0IScpCgogICAgICAgIGlzX3BhdGhfY3JlYXRlZCA9IGNoZWNrX3BhdGgobWFydmluX3BhdGgsIGNyZWF0ZT1UcnVlKQogICAgICAgIGlmIG5vdCBpc19wYXRoX2NyZWF0ZWQ6CiAgICAgICAgICAgIHJhaXNlIEludmFsaWRDb25maWdFeGNlcHRpb24oJ0RhdGEgcGF0aCBkb2VzIG5vdCBleGlzdCEnKQoKICAgICAgICByZXR1cm4gbWFydmluX3BhdGgKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBfY29udmVydF9wYXRoX3RvX2tleShjbHMsIHBhdGgpOgogICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aChvcy5wYXRoLnNlcCk6CiAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLnJlbHBhdGgocGF0aCwgc3RhcnQ9Y2xzLmRhdGFfcGF0aCkKICAgICAgICByZXR1cm4gJy8nLmpvaW4ocGF0aC5zcGxpdChvcy5wYXRoLnNlcCkpCgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgbG9hZF9kYXRhKGNscywgcmVscGF0aCk6CiAgICAgICAgIiIiCiAgICAgICAgTG9hZCBkYXRhIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzIGluIG9yZGVyIG9mIHByaW9yaXR5OgoKICAgICAgICAxLiBGaWxlc3lzdGVtCgogICAgICAgIDpwYXJhbSByZWxwYXRoOiBwYXRoIHJlbGF0aXZlIHRvICJkYXRhX3BhdGgiCiAgICAgICAgOnJldHVybjogc3RyIC0gZGF0YSBjb250ZW50CiAgICAgICAgIiIiCiAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oY2xzLmRhdGFfcGF0aCwgcmVscGF0aCkKICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgpIGFzIGZwOgogICAgICAgICAgICBjb250ZW50ID0gZnAucmVhZCgpCgogICAgICAgIHJldHVybiBjb250ZW50CgogICAgQGNsYXNzbWV0aG9kCiAgICBkZWYgZG93bmxvYWRfZmlsZShjbHMsIHVybCwgbG9jYWxfZmlsZV9uYW1lPU5vbmUsIGZvcmNlPUZhbHNlLCBjaHVua19zaXplPTEwMjQpOgogICAgICAgICIiIgogICAgICAgIERvd25sb2FkIGZpbGUgZnJvbSBhIGdpdmVuIHVybAogICAgICAgICIiIgoKICAgICAgICBsb2NhbF9maWxlX25hbWUgPSBsb2NhbF9maWxlX25hbWUgaWYgbG9jYWxfZmlsZV9uYW1lIGVsc2UgdXJsLnNwbGl0KCcvJylbLTFdCiAgICAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4oY2xzLmRhdGFfcGF0aCwgbG9jYWxfZmlsZV9uYW1lKQoKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIGZvcmNlOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBoZWFkZXJzID0gcmVxdWVzdHMuaGVhZCh1cmwsIGFsbG93X3JlZGlyZWN0cz1UcnVlKS5oZWFkZXJzCiAgICAgICAgICAgICAgICBsZW5ndGggPSBoZWFkZXJzLmdldCgnQ29udGVudC1MZW5ndGgnKQoKICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGluZyBkb3dubG9hZCBvZiB7fSBmaWxlIHdpdGgge30gYnl0ZXMgLi4uIi5mb3JtYXQodXJsLCBsZW5ndGgpKQoKICAgICAgICAgICAgICAgIHdpZGdldHMgPSBbCiAgICAgICAgICAgICAgICAgICAgJ0Rvd25sb2FkaW5nIGZpbGUgcGxlYXNlIHdhaXQuLi4nLCBwcm9ncmVzc2Jhci5QZXJjZW50YWdlKCksCiAgICAgICAgICAgICAgICAgICAgJyAnLCBwcm9ncmVzc2Jhci5CYXIoKSwKICAgICAgICAgICAgICAgICAgICAnICcsIHByb2dyZXNzYmFyLkVUQSgpLAogICAgICAgICAgICAgICAgICAgICcgJywgcHJvZ3Jlc3NiYXIuRmlsZVRyYW5zZmVyU3BlZWQoKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIGJhciA9IHByb2dyZXNzYmFyLlByb2dyZXNzQmFyKHdpZGdldHM9d2lkZ2V0cywgbWF4X3ZhbHVlPWludChsZW5ndGgpICsgY2h1bmtfc2l6ZSkuc3RhcnQoKQoKICAgICAgICAgICAgICAgIHIgPSByZXF1ZXN0cy5nZXQodXJsLCBzdHJlYW09VHJ1ZSkKCiAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICd3YicpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgdG90YWxfY2h1bmsgPSAwCgogICAgICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiByLml0ZXJfY29udGVudChjaHVua19zaXplKToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2h1bms6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGNodW5rKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfY2h1bmsgKz0gY2h1bmtfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyLnVwZGF0ZSh0b3RhbF9jaHVuaykKCiAgICAgICAgICAgICAgICBiYXIuZmluaXNoKCkKCiAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZpbGVwYXRoKToKICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZXBhdGgpCgogICAgICAgICAgICAgICAgcmFpc2UKCiAgICAgICAgcmV0dXJuIGZpbGVwYXRoCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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ZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgb3MKaW1wb3J0IGpzb24KaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IGNQcm9maWxlCmltcG9ydCBwc3RhdHMKaW1wb3J0IHV1aWQKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgU3RyaW5nSU8KCmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKbG9nZ2VyID0gZ2V0X2xvZ2dlcigncHJvZmlsaW5nJykKCgpjbGFzcyBQcm9maWxlKGNQcm9maWxlLlByb2ZpbGUpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvcnRieT0ndG90dGltZScsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgc2VsZi5zb3J0YnkgPSBzb3J0YnkKICAgICAgICBzZWxmLmltYWdlX3BhdGggPSBOb25lCiAgICAgICAgc3VwZXIoUHJvZmlsZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBfcmVwcl9odG1sXyhzZWxmKToKICAgICAgICBzID0gU3RyaW5nSU8oKQogICAgICAgIHN0YXRzID0gcHN0YXRzLlN0YXRzKHNlbGYsIHN0cmVhbT1zKS5zb3J0X3N0YXRzKHNlbGYuc29ydGJ5KQogICAgICAgIHN0YXRzLnByaW50X3N0YXRzKDEwKQogICAgICAgIHN0YXRzX3ZhbHVlID0gcy5nZXR2YWx1ZSgpCiAgICAgICAgaHRtbCA9ICc8cHJlPnt9PC9wcmU+Jy5mb3JtYXQoc3RhdHNfdmFsdWUpCiAgICAgICAgaWYgc2VsZi5pbWFnZV9wYXRoOgogICAgICAgICAgICBodG1sICs9ICc8aW1nIHNyYz0ie30iIHN0eWxlPSJtYXJnaW46IDAgYXV0bzsiPicuZm9ybWF0KHNlbGYuaW1hZ2VfcGF0aCkKICAgICAgICByZXR1cm4gaHRtbAoKCmNsYXNzIHByb2ZpbGluZyhvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGVuYWJsZT1UcnVlLCBvdXRwdXRfcGF0aD0ncHJvZmlsaW5nJywgdWlkPXV1aWQudXVpZDQsIGluZm89Tm9uZSwgc29ydGJ5PSd0b3R0aW1lJyk6CiAgICAgICAgc2VsZi5lbmFibGUgPSBlbmFibGUKICAgICAgICBzZWxmLm91dHB1dF9wYXRoID0gb3V0cHV0X3BhdGgKICAgICAgICBzZWxmLnVpZCA9IHVpZAogICAgICAgIHNlbGYuaW5mbyA9IGluZm8KICAgICAgICBzZWxmLnNvcnRieSA9IHNvcnRieQoKICAgICAgICBzZWxmLmVuYWJsZV9wcm9maWxpbmcgPSBlbmFibGUKCiAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuYyk6CgogICAgICAgIEB3cmFwcyhmdW5jKQogICAgICAgIGRlZiBmdW5jX3dyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgICAgZW5hYmxlXyA9IHNlbGYuZW5hYmxlCiAgICAgICAgICAgIGlmIGNhbGxhYmxlKGVuYWJsZV8pOgogICAgICAgICAgICAgICAgZW5hYmxlXyA9IGVuYWJsZV8oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICAgICAgICAgc2VsZi5lbmFibGVfcHJvZmlsaW5nID0gYm9vbChlbmFibGVfKQoKICAgICAgICAgICAgaWYgc2VsZi5lbmFibGVfcHJvZmlsaW5nOgogICAgICAgICAgICAgICAgc2VsZi5fX2VudGVyX18oKQogICAgICAgICAgICByZXNwb25zZSA9IE5vbmUKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBmdW5jKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICBpZiBzZWxmLmVuYWJsZV9wcm9maWxpbmc6CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3BhdGhfID0gc2VsZi5vdXRwdXRfcGF0aAogICAgICAgICAgICAgICAgICAgIGlmIGNhbGxhYmxlKG91dHB1dF9wYXRoXyk6CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0X3BhdGggPSBvdXRwdXRfcGF0aF8oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICAgICAgICAgICAgIHVpZF8gPSBzZWxmLnVpZAogICAgICAgICAgICAgICAgICAgIGlmIGNhbGxhYmxlKHVpZF8pOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVpZCA9IHVpZF8oKQogICAgICAgICAgICAgICAgICAgIGluZm9fID0gc2VsZi5pbmZvCiAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGFibGUoaW5mb18pOgogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluZm8gPSBpbmZvXyhyZXNwb25zZSwgKmFyZ3MsICoqa3dhcmdzKQoKICAgICAgICAgICAgICAgICAgICBzZWxmLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCgogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKCiAgICAgICAgcmV0dXJuIGZ1bmNfd3JhcHBlcgoKICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgcHIgPSBOb25lCiAgICAgICAgaWYgc2VsZi5lbmFibGVfcHJvZmlsaW5nOgogICAgICAgICAgICBwciA9IFByb2ZpbGUoc29ydGJ5PXNlbGYuc29ydGJ5KQogICAgICAgICAgICBwci5lbmFibGUoKQogICAgICAgIHNlbGYucHIgPSBwcgogICAgICAgIHJldHVybiBwcgoKICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICBpZiBzZWxmLmVuYWJsZV9wcm9maWxpbmc6CiAgICAgICAgICAgIHByID0gc2VsZi5wcgogICAgICAgICAgICBwci5kaXNhYmxlKCkKICAgICAgICAgICAgIyBhcmdzIGFjY2VwdCBmdW5jdGlvbnMKICAgICAgICAgICAgb3V0cHV0X3BhdGggPSBzZWxmLm91dHB1dF9wYXRoCiAgICAgICAgICAgIHVpZCA9IHNlbGYudWlkCiAgICAgICAgICAgIGluZm8gPSBzZWxmLmluZm8KICAgICAgICAgICAgaWYgY2FsbGFibGUodWlkKToKICAgICAgICAgICAgICAgIHVpZCA9IHVpZCgpCgogICAgICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IHBhdGggZXhpc3RzCiAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwdXRfcGF0aCk6ICAjIHByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKG91dHB1dF9wYXRoLCBtb2RlPTBvNzc0KQoKICAgICAgICAgICAgIyBjb2xsZWN0IHByb2ZpbGluZyBpbmZvCiAgICAgICAgICAgIHN0YXRzID0gcHN0YXRzLlN0YXRzKHByKQogICAgICAgICAgICBzdGF0cy5zb3J0X3N0YXRzKHNlbGYuc29ydGJ5KQogICAgICAgICAgICBpbmZvX3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsICd7fS5qc29uJy5mb3JtYXQodWlkKSkKICAgICAgICAgICAgc3RhdHNfcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwgJ3t9LnBzdGF0cycuZm9ybWF0KHVpZCkpCiAgICAgICAgICAgIGRvdF9wYXRoID0gb3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCAne30uZG90Jy5mb3JtYXQodWlkKSkKICAgICAgICAgICAgcG5nX3BhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsICd7fS5wbmcnLmZvcm1hdCh1aWQpKQogICAgICAgICAgICBpZiBpbmZvOgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihpbmZvX3BhdGgsICd3JykgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24uZHVtcChpbmZvLCBmcCwgaW5kZW50PTIsIGVuY29kaW5nPSd1dGYtOCcpCiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9u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cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gYWJjIGltcG9ydCBBQkNNZXRhCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgc2l4CmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKZnJvbSAuZW5naW5lX2Jhc2VfYWN0aW9uIGltcG9ydCBFbmdpbmVCYXNlQmF0Y2hBY3Rpb24KCgpfX2FsbF9fID0gWydFbmdpbmVCYXNlRGF0YUhhbmRsZXInXQpsb2dnZXIgPSBnZXRfbG9nZ2VyKCdlbmdpbmVfYmFzZV9kYXRhX2hhbmRsZXInKQoKCmNsYXNzIEVuZ2luZUJhc2VEYXRhSGFuZGxlcihFbmdpbmVCYXNlQmF0Y2hBY3Rpb24pOgogICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKCiAgICBfaW5pdGlhbF9kYXRhc2V0ID0gTm9uZQogICAgX2RhdGFzZXQgPSBOb25lCgogICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICAgICBzZWxmLl9pbml0aWFsX2RhdGFzZXQgPSBzZWxmLl9nZXRfYXJnKGt3YXJncz1rd2FyZ3MsIGFyZz0naW5pdGlhbF9kYXRhc2V0JykKICAgICAgICBzZWxmLl9kYXRhc2V0ID0gc2VsZi5fZ2V0X2FyZyhrd2FyZ3M9a3dhcmdzLCBhcmc9J2RhdGFzZXQnKQogICAgICAgIHN1cGVyKEVuZ2luZUJhc2VEYXRhSGFuZGxlciwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCgogICAgQHByb3BlcnR5CiAgICBkZWYgbWFydmluX2luaXRpYWxfZGF0YXNldChzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9vYmoob2JqZWN0X3JlZmVyZW5jZT0nX2luaXRpYWxfZGF0YXNldCcpCgogICAgQG1hcnZpbl9pbml0aWFsX2RhdGFzZXQuc2V0dGVyCiAgICBkZWYgbWFydmluX2luaXRpYWxfZGF0YXNldChzZWxmLCBpbml0aWFsX2RhdGFzZXQpOgogICAgICAgIHNlbGYuX3NhdmVfb2JqKG9iamVjdF9yZWZlcmVuY2U9J19pbml0aWFsX2RhdGFzZXQnLCBvYmo9aW5pdGlhbF9kYXRhc2V0KQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIG1hcnZpbl9kYXRhc2V0KHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9sb2FkX29iaihvYmplY3RfcmVmZXJlbmNlPSdfZGF0YXNldCcpCgogICAgQG1hcnZpbl9kYXRhc2V0LnNldHRlcgogICAgZGVmIG1hcnZpbl9kYXRhc2V0KHNlbGYsIGRhdGFzZXQpOgogICAgICAgIHNlbGYuX3NhdmVfb2JqKG9iamVjdF9yZWZlcmVuY2U9J19kYXRhc2V0Jywgb2JqPWRhdGFzZXQpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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YXNlX3ByZWRpY3Rpb24ucHlSEgAAAC0AAABzAgAAAAACYwEAAAABAAAAAwAAAEMAAABzEAAAAHwAAGoAAGQBAGQCAIMAAVMoAwAAAE5SEAAAAFIMAAAAKAEAAABSEQAAACgBAAAAUg8AAAAoAAAAACgAAAAAc1YAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2UvZW5naW5lX2Jhc2VfcHJlZGljdGlvbi5weXQOAAAAbWFydmluX21ldHJpY3MxAAAAcwIAAAAAAmMCAAAAAgAAAAUAAABDAAAAcxoAAAB8AABqAABkAQBkAgBkAwB8AQCDAAIBZAAAUygEAAAATlIQAAAAUgwAAABSEwAAACgBAAAAUhQAAAAoAgAAAFIPAAAAUgkAAAAoAAAAACgAAAAAc1YAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2UvZW5naW5lX2Jhc2VfcHJlZGljdGlvbi5weVIVAAAANQAAAHMCAAAAAAJOKAwAAAB0CAAAAF9fbmFtZV9fdAoAAABfX21vZHVsZV9fUgAAAAB0DQAAAF9fbWV0YWNsYXNzX190BAAAAE5vbmVSCwAAAFIMAAAAUg4AAAB0CAAAAHByb3BlcnR5UhIAAAB0BgAAAHNldHRlclIVAAAAKAAAAAAoAAAAACgAAAAAc1YAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2UvZW5naW5lX2Jhc2VfcHJlZGljdGlvbi5weVIEAAAAHQAAAHMQAAAABgEGAgYBBgIJBg8EEgQPBE4oCwAAAHQDAAAAYWJjUgAAAAB0DgAAAF9jb21wYXRpYmlsaXR5UgEAAAB0CAAAAF9sb2dnaW5nUgIAAAB0EgAAAGVuZ2luZV9iYXNlX2FjdGlvblIDAAAAdAcAAABfX2FsbF9fdAYAAABsb2dnZXJSBAAAACgAAAAAKAAAAAAoAAAAAHNWAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL2VuZ2luZV9iYXNlX3ByZWRpY3Rpb24ucHl0CAAAADxtb2R1bGU+EgAAAHMMAAAAEAEQARACEAMJAQwDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9lbmdpbmVfYmFzZS9fX2luaXRfXy5weQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwMTcxNCAxMzQ2MzMzMzQ2MiAwMjY3NTEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIC5lbmdpbmVfYmFzZV9hY3Rpb24gaW1wb3J0IEVuZ2luZUJhc2VBY3Rpb24sIEVuZ2luZUJhc2VPbmxpbmVBY3Rpb24sIEVuZ2luZUJhc2VCYXRjaEFjdGlvbgpmcm9tIC5lbmdpbmVfYmFzZV9wcmVkaWN0aW9uIGltcG9ydCBFbmdpbmVCYXNlUHJlZGljdGlvbgpmcm9tIC5lbmdpbmVfYmFzZV9kYXRhX2hhbmRsZXIgaW1wb3J0IEVuZ2luZUJhc2VEYXRhSGFuZGxl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bmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gYWJjIGltcG9ydCBBQkNNZXRhCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgc2l4CmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKZnJvbSAuZW5naW5lX2Jhc2VfYWN0aW9uIGltcG9ydCBFbmdpbmVCYXNlQmF0Y2hBY3Rpb24KCgpfX2FsbF9fID0gWydFbmdpbmVCYXNlVHJhaW5pbmcnXQpsb2dnZXIgPSBnZXRfbG9nZ2VyKCdlbmdpbmVfYmFzZV90cmFpbmluZycpCgoKY2xhc3MgRW5naW5lQmFzZVRyYWluaW5nKEVuZ2luZUJhc2VCYXRjaEFjdGlvbik6CiAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQoKICAgIF9kYXRhc2V0ID0gTm9uZQogICAgX21vZGVsID0gTm9uZQogICAgX21ldHJpY3MgPSBOb25lCgogICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICAgICBzZWxmLl9kYXRhc2V0ID0gc2VsZi5fZ2V0X2FyZyhrd2FyZ3M9a3dhcmdzLCBhcmc9J2RhdGFzZXQnKQogICAgICAgIHNlbGYuX21vZGVsID0gc2VsZi5fZ2V0X2FyZyhrd2FyZ3M9a3dhcmdzLCBhcmc9J21vZGVsJykKICAgICAgICBzZWxmLl9tZXRyaWNzID0gc2VsZi5fZ2V0X2FyZyhrd2FyZ3M9a3dhcmdzLCBhcmc9J21ldHJpY3MnKQoKICAgICAgICBzdXBlcihFbmdpbmVCYXNlVHJhaW5pbmcsIHNlbGYpLl9faW5pdF9fKCoqa3dhcmdzKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIG1hcnZpbl9kYXRhc2V0KHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLl9sb2FkX29iaihvYmplY3RfcmVmZXJlbmNlPSdfZGF0YXNldCcpCgogICAgQG1hcnZpbl9kYXRhc2V0LnNldHRlcgogICAgZGVmIG1hcnZpbl9kYXRhc2V0KHNlbGYsIGRhdGFzZXQpOgogICAgICAgIHNlbGYuX3NhdmVfb2JqKG9iamVjdF9yZWZl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dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQpmcm9tIC4uX2NvbXBhdGliaWxpdHkgaW1wb3J0IHNpeApmcm9tIC4uX2xvZ2dpbmcgaW1wb3J0IGdldF9sb2dnZXIKCmZyb20gLmVuZ2luZV9iYXNlX2FjdGlvbiBpbXBvcnQgRW5naW5lQmFzZU9ubGluZUFjdGlvbgoKCl9fYWxsX18gPSBbJ0VuZ2luZUJhc2VQcmVkaWN0aW9uJ10KbG9nZ2VyID0gZ2V0X2xvZ2dlcignZW5naW5lX2Jhc2VfcHJlZGljdGlvbicpCgoKY2xhc3MgRW5naW5lQmFzZVByZWRpY3Rpb24oRW5naW5lQmFzZU9ubGluZUFjdGlvbik6CiAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQoKICAgIF9tb2RlbCA9IE5vbmUKICAgIF9tZXRyaWNzID0gTm9uZQoKICAgIGRlZiBfX2luaXRf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IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCmltcG9ydCBvcwoKZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCmltcG9ydCBqb2JsaWIgYXMgc2VyaWFsaXplcgpmcm9tIGNvbmN1cnJlbnQgaW1wb3J0IGZ1dHVyZXMKaW1wb3J0IGdycGMKaW1wb3J0IGpzb24KCmZyb20gLnN0dWJzLmFjdGlvbnNfcGIyIGltcG9ydCBCYXRjaEFjdGlvblJlc3BvbnNlLCBPbmxpbmVBY3Rpb25SZXNwb25zZSwgUmVsb2FkUmVzcG9uc2UsIEhlYWx0aENoZWNrUmVzcG9uc2UKZnJvbSAuc3R1YnMgaW1wb3J0IGFjdGlvbnNfcGIyX2dycGMKCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgc2l4CmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKCl9fYWxsX18gPSBbJ0VuZ2luZUJhc2VBY3Rpb24nLCAnRW5naW5lQmFzZUJhdGNoQWN0aW9uJywgJ0VuZ2luZUJhc2VPbmxpbmVBY3Rpb24nXQpsb2dnZXIgPSBnZXRfbG9nZ2VyKCdlbmdpbmVfYmFzZV9hY3Rpb24nKQoKCmNsYXNzIEVuZ2luZUJhc2VBY3Rpb24oKToKICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCgogICAgX3BhcmFtcyA9IHt9CiAgICBfcGVyc2lzdGVuY2VfbW9kZSA9IE5vbmUKICAgIF9kZWZhdWx0X3Jvb3RfcGF0aCA9IE5vbmUKICAgIF9wcmV2aW91c19zdGVwID0gTm9uZQogICAgX2lzX3JlbW90ZV9jYWxsaW5nID0gRmFsc2UKICAgIF9sb2NhbF9zYXZlZF9vYmplY3RzID0ge30KCiAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgogICAgICAgIHNlbGYuYWN0aW9uX25hbWUgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogICAgICAgIHNlbGYuX3BhcmFtcyA9IHNlbGYuX2dldF9hcmcoa3dhcmdzPWt3YXJncywgYXJnPSdwYXJhbXMnKQogICAgICAgIHNlbGYuX3BlcnNpc3RlbmNlX21vZGUgPSBzZWxmLl9nZXRfYXJnKGt3YXJncz1rd2FyZ3MsIGFyZz0ncGVyc2lzdGVuY2VfbW9kZScsIGRlZmF1bHRfdmFsdWU9J21lbW9yeScpCiAgICAgICAgc2VsZi5fZGVmYXVsdF9yb290X3BhdGggPSBzZWxmLl9nZXRfYXJnKGt3YXJncz1rd2FyZ3MsIGFyZz0nZGVmYXVsdF9yb290X3BhdGgnLCBkZWZhdWx0X3ZhbHVlPW9zLnBhdGguam9pbihvcy5lbnZpcm9uWydNQVJWSU5fREFUQV9QQVRIJ10sICcuYXJ0aWZhY3RzJykpCiAgICAgICAgc2VsZi5faXNfcmVtb3RlX2NhbGxpbmcgPSBzZWxmLl9nZXRfYXJnKGt3YXJncz1rd2FyZ3MsIGFyZz0naXNfcmVtb3RlX2NhbGxpbmcnLCBkZWZhdWx0X3ZhbHVlPUZhbHNlKQogICAgICAgIGxvZ2dlci5kZWJ1ZygiU3RhcnRpbmcge30gZW5naW5lIGFjdGlvbiB3aXRoIHt9IHBlcnNpc3RlbmNlIG1vZGUuLi4iLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5fcGVyc2lzdGVuY2VfbW9kZSkpCgogICAgZGVmIF9nZXRfYXJnKHNlbGYsIGt3YXJncywgYXJnLCBkZWZhdWx0X3ZhbHVlPU5vbmUpOgogICAgICAgIHJldHVybiBrd2FyZ3MuZ2V0KGFyZywgZGVmYXVsdF92YWx1ZSkKCiAgICBkZWYgX2dldF9vYmplY3RfZmlsZV9wYXRoKHNlbGYsIG9iamVjdF9yZWZlcmVuY2UpOgogICAgICAgIGVuZ2luZV9uYW1lID0gc2VsZi5fX21vZHVsZV9fLnNwbGl0KCcuJylbMF0ucmVwbGFjZSgnbWFydmluXycsICcnKS5yZXBsYWNlKCdfZW5naW5lJywgJycpCiAgICAgICAgZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKHNlbGYuX2RlZmF1bHRfcm9vdF9wYXRoLCBlbmdpbmVfbmFtZSkKCiAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcmVjdG9yeSk6CiAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcmVjdG9yeSkKCiAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihkaXJlY3RvcnksICJ7fSIuZm9ybWF0KG9iamVjdF9yZWZlcmVuY2UucmVwbGFjZSgnXycsICcnKSkpCgogICAgZGVmIF9zZXJpYWxpemVyX2R1bXAoc2VsZiwgb2JqLCBvYmplY3RfZmlsZV9wYXRoKToKICAgICAgICBpZiBvYmplY3RfZmlsZV9wYXRoLnNwbGl0KG9zLnNlcClbLTFdID09ICdtZXRyaWNzJzoKICAgICAgICAgICAgd2l0aCBvcGVuKG9iamVjdF9maWxlX3BhdGgsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgIGpzb24uZHVtcChvYmosIGYsIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZXJpYWxpemVyLmR1bXAob2JqLCBvYmplY3RfZmlsZV9wYXRoLCBwcm90b2NvbD0yLCBjb21wcmVzcz0zKQoKICAgIGRlZiBfc2VyaWFsaXplcl9sb2FkKHNlbGYsIG9iamVjdF9maWxlX3BhdGgpOgogICAgICAgIGlmIG9iamVjdF9maWxlX3BhdGguc3BsaXQob3Muc2VwKVstMV0gPT0gJ21ldHJpY3MnOgogICAgICAgICAgICB3aXRoIG9wZW4ob2JqZWN0X2ZpbGVfcGF0aCwgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZChmKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLmxvYWQob2JqZWN0X2ZpbGVfcGF0aCkKCiAgICBkZWYgX3NhdmVfb2JqKHNlbGYsIG9iamVjdF9yZWZlcmVuY2UsIG9iaik6CiAgICAgICAgaWYgbm90IHNlbGYuX2lzX3JlbW90ZV9jYWxsaW5nOgogICAgICAgICAgICBpZiBnZXRhdHRyKHNlbGYsIG9iamVjdF9yZWZlcmVuY2UsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJPYmplY3Qge30gbXVzdCBiZSBhc3NpZ24gb25seSBvbmNlIGluIGVhY2ggYWN0aW9uIi5mb3JtYXQob2JqZWN0X3JlZmVyZW5jZSkpCiAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ011bHRpcGxlQXNzaWduRXhjZXB0aW9uJywgb2JqZWN0X3JlZmVyZW5jZSkKCiAgICAgICAgc2V0YXR0cihzZWxmLCBvYmplY3RfcmVmZXJlbmNlLCBvYmopCgogICAgICAgIGlmIHNlbGYuX3BlcnNpc3RlbmNlX21vZGUgPT0gJ2xvY2FsJzoKICAgICAgICAgICAgb2JqZWN0X2ZpbGVfcGF0aCA9IHNlbGYuX2dldF9vYmplY3RfZmlsZV9wYXRoKG9iamVjdF9yZWZlcmVuY2UpCiAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTYXZpbmcgb2JqZWN0IHRvIHt9Ii5mb3JtYXQob2JqZWN0X2ZpbGVfcGF0aCkpCiAgICAgICAgICAgIHNlbGYuX3NlcmlhbGl6ZXJfZHVtcChvYmosIG9iamVjdF9maWxlX3BhdGgpCiAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPYmplY3Qge30gc2F2ZWQhIi5mb3JtYXQob2JqZWN0X3JlZmVyZW5jZSkpCiAgICAgICAgICAgIHNlbGYuX2xvY2FsX3NhdmVkX29iamVjdHNbb2JqZWN0X3JlZmVyZW5jZV0gPSBvYmplY3RfZmlsZV9wYXRoCgogICAgZGVmIF9sb2FkX29iaihzZWxmLCBvYmplY3RfcmVmZXJlbmNlLCBmb3JjZT1GYWxzZSk6CiAgICAgICAgb2JqZWN0X3JlZmVyZW5jZSA9IG9iamVjdF9yZWZlcmVuY2UgaWYgb2JqZWN0X3JlZmVyZW5jZS5zdGFydHN3aXRoKCdfJykgZWxzZSAnXyVzJyAlIG9iamVjdF9yZWZlcmVuY2UKICAgICAgICBpZiAoZ2V0YXR0cihzZWxmLCBvYmplY3RfcmVmZXJlbmNlLCBOb25lKSBpcyBOb25lIGFuZCBzZWxmLl9wZXJzaXN0ZW5jZV9tb2RlID09ICdsb2NhbCcpIG9yIGZvcmNlOgogICAgICAgICAgICBvYmplY3RfZmlsZV9wYXRoID0gc2VsZi5fZ2V0X29iamVjdF9maWxlX3BhdGgob2JqZWN0X3JlZmVyZW5jZSkKICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxvYWRpbmcgb2JqZWN0IGZyb20ge30iLmZvcm1hdChvYmplY3RfZmlsZV9wYXRoKSkKICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBvYmplY3RfcmVmZXJlbmNlLCBzZWxmLl9zZXJpYWxpemVyX2xvYWQob2JqZWN0X2ZpbGVfcGF0aCkpCiAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJPYmplY3Qge30gbG9hZGVkISIuZm9ybWF0KG9iamVjdF9yZWZlcmVuY2UpKQoKICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBvYmplY3RfcmVmZXJlbmNlKQoKICAgIGRlZiBfcmVsZWFzZV9sb2NhbF9zYXZlZF9vYmplY3RzKHNlbGYpOgogICAgICAgIGZvciBvYmplY3RfcmVmZXJlbmNlIGluIHNlbGYuX2xvY2FsX3NhdmVkX29iamVjdHMua2V5cygpOgogICAgICAgICAgICBsb2dnZXIuaW5mbygiUmVtb3Zpbmcgb2JqZWN0IHt9IGZyb20gbWVtb3J5Li4iLmZvcm1hdChvYmplY3RfcmVmZXJlbmNlKSkKICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBvYmplY3RfcmVmZXJlbmNlLCBOb25lKQoKICAgICAgICBzZWxmLl9sb2NhbF9zYXZlZF9vYmplY3RzID0ge30KCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiByZXRyaWV2ZV9vYmooc2VsZiwgb2JqZWN0X2ZpbGVfcGF0aCk6CiAgICAgICAgbG9nZ2VyLmluZm8oIlJldHJpZXZlIG9iamVjdCBmcm9tIHt9Ii5mb3JtYXQob2JqZWN0X2ZpbGVfcGF0aCkpCiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIubG9hZChvYmplY3RfZmlsZV9wYXRoKQoKICAgIGRlZiBfcmVtb3RlX3JlbG9hZChzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICAgICBwcm90b2NvbCA9IHJlcXVlc3QucHJvdG9jb2wKICAgICAgICBhcnRpZmFjdHMgPSByZXF1ZXN0LmFydGlmYWN0cwoKICAgICAgICBsb2dnZXIuaW5mbygiUmVjZWl2ZWQgbWVzc2FnZSBmcm9tIGNsaWVudCB3aXRoIHByb3RvY29sIFt7fV0gdG8gcmVsb2FkIHRoZSBbe31dIGFydGlmYWN0cy4uLiIuZm9ybWF0KHByb3RvY29sLCBhcnRpZmFjdHMpKQoKICAgICAgICBtZXNzYWdlID0gIlJlbG9hZGVkIgoKICAgICAgICBpZiBhcnRpZmFjdHM6CiAgICAgICAgICAgIGZvciBhcnRpZmFjdCBpbiBhcnRpZmFjdHMuc3BsaXQoIiwiKToKICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRfb2JqKG9iamVjdF9yZWZlcmVuY2U9YXJ0aWZhY3QsIGZvcmNlPVRydWUpCgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIG1lc3NhZ2UgPSAiTm90aGluZyB0byByZWxvYWQiCgogICAgICAgIHJlc3BvbnNlX21lc3NhZ2UgPSBSZWxvYWRSZXNwb25zZShtZXNzYWdlPW1lc3NhZ2UpCgogICAgICAgIGxvZ2dlci5pbmZvKCJSZXR1cm4gZmluYWwgcmVzdWx0cyB0byB0aGUgY2xpZW50ISIpCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlX21lc3NhZ2UKCiAgICBkZWYgX2hlYWx0aF9jaGVjayhzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICAgICBsb2dnZXIuaW5mbygiUmVjZWl2ZWQgbWVzc2FnZSBmcm9tIGNsaWVudCB3aXRoIHByb3RvY29sIGhlYWx0aCBjaGVjayBbe31dIGFydGlmYWN0cy4uLiIuZm9ybWF0KHJlcXVlc3QuYXJ0aWZhY3RzKSkKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlmIHJlcXVlc3QuYXJ0aWZhY3RzOgogICAgICAgICAgICAgICAgZm9yIGFydGlmYWN0IGluIHJlcXVlc3QuYXJ0aWZhY3RzLnNwbGl0KCIsIik6CiAgICAgICAgICAgICAgICAgICAgaWYgbm90IGdldGF0dHIoc2VsZiwgYXJ0aWZhY3QpOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSGVhbHRoQ2hlY2tSZXNwb25zZShzdGF0dXM9SGVhbHRoQ2hlY2tSZXNwb25zZS5OT0spCiAgICAgICAgICAgIHJldHVybiBIZWFsdGhDaGVja1Jlc3BvbnNlKHN0YXR1cz1IZWFsdGhDaGVja1Jlc3BvbnNlLk9LKQoKICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlKQogICAgICAgICAgICByZXR1cm4gSGVhbHRoQ2hlY2tSZXNwb25zZShzdGF0dXM9SGVhbHRoQ2hlY2tSZXNwb25zZS5OT0spCgoKY2xhc3MgRW5naW5lQmFzZUJhdGNoQWN0aW9uKEVuZ2luZUJhc2VBY3Rpb24pOgogICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKCiAgICBAYWJzdHJhY3RtZXRob2QKICAgIGRlZiBleGVjdXRlKHNlbGYsIHBhcmFtcywgKiprd2FyZ3MpOgogICAgICAgIHBhc3MKCiAgICBkZWYgX3BpcGVsaW5lX2V4ZWN1dGUoc2VsZiwgcGFyYW1zKToKICAgICAgICBpZiBzZWxmLl9wcmV2aW91c19zdGVwOgogICAgICAgICAgICBzZWxmLl9wcmV2aW91c19zdGVwLl9waXBlbGluZV9leGVjdXRlKHBhcmFtcykKCiAgICAgICAgbG9nZ2VyLmluZm8oIlN0YXJ0IG9mIHRoZSB7fSBleGVjdXRlIG1ldGhvZCEiLmZvcm1hdChzZWxmLmFjdGlvbl9uYW1lKSkKICAgICAgICBzZWxmLmV4ZWN1dGUocGFyYW1zKQogICAgICAgIGxvZ2dlci5pbmZvKCJGaW5pc2ggb2YgdGhlIHt9IGV4ZWN1dGUgbWV0aG9kISIuZm9ybWF0KHNlbGYuYWN0aW9uX25hbWUpKQoKICAgIGRlZiBfcmVtb3RlX2V4ZWN1dGUoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAgICAgbG9nZ2VyLmluZm8oIlJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBjbGllbnQgYW5kIHNlbmRpbmcgdG8gZW5naW5lIGFjdGlvbi4uLiIpCiAgICAgICAgbG9nZ2VyLmRlYnVnKCJSZWNlaXZlZCBQYXJhbXM6IHt9Ii5mb3JtYXQocmVxdWVzdC5wYXJhbXMpKQoKICAgICAgICBwYXJhbXMgPSBqc29uLmxvYWRzKHJlcXVlc3QucGFyYW1zKSBpZiByZXF1ZXN0LnBhcmFtcyBlbHNlIHNlbGYuX3BhcmFtcwoKICAgICAgICBzZWxmLl9waXBlbGluZV9leGVjdXRlKHBhcmFtcz1wYXJhbXMpCgogICAgICAgIHNlbGYuX3JlbGVhc2VfbG9jYWxfc2F2ZWRfb2JqZWN0cygpCgogICAgICAgIGxvZ2dlci5pbmZvKCJIYW5kbGluZyByZXR1cm5lZCBtZXNzYWdlIGZyb20gZW5naW5lIGFjdGlvbi4uLiIpCiAgICAgICAgcmVzcG9uc2VfbWVzc2FnZSA9IEJhdGNoQWN0aW9uUmVzcG9uc2UobWVzc2FnZT0iRG9uZSIpCgogICAgICAgIGxvZ2dlci5pbmZvKCJSZXR1cm4gZmluYWwgcmVzdWx0cyB0byB0aGUgY2xpZW50ISIpCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlX21lc3NhZ2UKCiAgICBkZWYgX3ByZXBhcmVfcmVtb3RlX3NlcnZlcihzZWxmLCBwb3J0LCB3b3JrZXJzLCBycGNfd29ya2Vycyk6CiAgICAgICAgc2VydmVyID0gZ3JwYy5zZXJ2ZXIodGhyZWFkX3Bvb2w9ZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9d29ya2VycyksIG1heGltdW1fY29uY3VycmVudF9ycGNzPXJwY193b3JrZXJzKQogICAgICAgIGFjdGlvbnNfcGIyX2dycGMuYWRkX0JhdGNoQWN0aW9uSGFuZGxlclNlcnZpY2VyX3RvX3NlcnZlcihzZWxmLCBzZXJ2ZXIpCiAgICAgICAgc2VydmVyLmFkZF9pbnNlY3VyZV9wb3J0KCdbOjpdOnt9Jy5mb3JtYXQocG9ydCkpCiAgICAgICAgcmV0dXJuIHNlcnZlcgoKCmNsYXNzIEVuZ2luZUJhc2VPbmxpbmVBY3Rpb24oRW5naW5lQmFzZUFjdGlvbik6CiAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQoKICAgIEBhYnN0cmFjdG1ldGhvZAogICAgZGVmIGV4ZWN1dGUoc2VsZiwgaW5wdXRfbWVzc2FnZSwgcGFyYW1zLCAqKmt3YXJncyk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBfcGlwZWxpbmVfZXhlY3V0ZShzZWxmLCBpbnB1dF9tZXNzYWdlLCBwYXJhbXMpOgogICAgICAgIGlmIHNlbGYuX3ByZXZpb3VzX3N0ZXA6CiAgICAgICAgICAgIGlucHV0X21lc3NhZ2UgPSBzZWxmLl9wcmV2aW91c19zdGVwLl9waXBlbGluZV9leGVjdXRlKGlucHV0X21lc3NhZ2UsIHBhcmFtcykKCiAgICAgICAgbG9nZ2VyLmluZm8oIlN0YXJ0IG9mIHRoZSB7fSBleGVjdXRlIG1ldGhvZCEiLmZvcm1hdChzZWxmLmFjdGlvbl9uYW1lKSkKICAgICAgICByZXR1cm4gc2VsZi5leGVjdXRlKGlucHV0X21lc3NhZ2UsIHBhcmFtcykKICAgICAgICBsb2dnZXIuaW5mbygiRmluaXNoIG9mIHRoZSB7fSBleGVjdXRlIG1ldGhvZCEiLmZvcm1hdChzZWxmLmFjdGlvbl9uYW1lKSkKCiAgICBkZWYgX3JlbW90ZV9leGVjdXRlKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgICAgIGxvZ2dlci5pbmZvKCJSZWNlaXZlZCBtZXNzYWdlIGZyb20gY2xpZW50IGFuZCBzZW5kaW5nIHRvIGVuZ2luZSBhY3Rpb24uLi4iKQogICAgICAgIGxvZ2dlci5kZWJ1ZygiUmVjZWl2ZWQgUGFyYW1zOiB7fSIuZm9ybWF0KHJlcXVlc3QucGFyYW1zKSkKICAgICAgICBsb2dnZXIuZGVidWcoIlJlY2VpdmVkIE1lc3NhZ2U6IHt9Ii5mb3JtYXQocmVxdWVzdC5tZXNzYWdlKSkKCiAgICAgICAgaW5wdXRfbWVzc2FnZSA9IGpzb24ubG9hZHMocmVxdWVzdC5tZXNzYWdlKSBpZiByZXF1ZXN0Lm1lc3NhZ2UgZWxzZSBOb25lCiAgICAgICAgcGFyYW1zID0ganNvbi5sb2FkcyhyZXF1ZXN0LnBhcmFtcykgaWYgcmVxdWVzdC5wYXJhbXMgZWxzZSBzZWxmLl9wYXJhbXMKCiAgICAgICAgX21lc3NhZ2UgPSBzZWxmLl9waXBlbGluZV9leGVjdXRlKGlucHV0X21lc3NhZ2U9aW5wdXRfbWVzc2FnZSwgcGFyYW1zPXBhcmFtcykKCiAgICAgICAgbG9nZ2VyLmluZm8oIkhhbmRsaW5nIHJldHVybmVkIG1lc3NhZ2UgZnJvbSBlbmdpbmUgYWN0aW9uLi4uIikKCiAgICAgICAgaWYgdHlwZShfbWVzc2FnZSkgIT0gc3RyOgogICAgICAgICAgICBfbWVzc2FnZSA9IGpzb24uZHVtcHMoX21lc3NhZ2UpCgogICAgICAgIHJlc3BvbnNlX21lc3NhZ2UgPSBPbmxpbmVBY3Rpb25SZXNwb25zZShtZXNzYWdlPV9tZXNzYWdlKQoKICAgICAgICBsb2dnZXIuaW5mbygiUmV0dXJuIGZpbmFsIHJlc3VsdHMgdG8gdGhlIGNsaWVudCEiKQogICAgICAgIHJldHVybiByZXNwb25zZV9tZXNzYWdlCgogICAgZGVmIF9wcmVwYXJlX3JlbW90ZV9zZXJ2ZXIoc2VsZiwgcG9ydCwgd29ya2VycywgcnBjX3dvcmtlcnMpOgogICAgICAgIHNlcnZlciA9IGdycGMuc2VydmVyKHRocmVhZF9wb29sPWZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKG1heF93b3JrZXJzPXdvcmtlcnMp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YXNlL2VuZ2luZV9iYXNlX3RyYWluaW5nLnB5UhcAAAA3AAAAcwIAAAAAAmMBAAAAAQAAAAMAAABDAAAAcxAAAAB8AABqAABkAQBkAgCDAAFTKAMAAABOUhIAAABSDgAAACgBAAAAUhMAAAAoAQAAAFIRAAAAKAAAAAAoAAAAAHNUAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL2VuZ2luZV9iYXNlX3RyYWluaW5nLnB5dA4AAABtYXJ2aW5fbWV0cmljczsAAABzAgAAAAACYwIAAAACAAAABQAAAEMAAABzGgAAAHwAAGoAAGQBAGQCAGQDAHwBAIMAAgFkAABTKAQAAABOUhIAAABSDgAAAFIVAAAAKAEAAABSFgAAACgCAAAAUhEAAABSCgAAACgAAAAAKAAAAABzVAAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9lbmdpbmVfYmFzZS9lbmdpbmVfYmFzZV90cmFpbmluZy5weVIYAAAAPwAAAHMCAAAAAAJOKA4AAAB0CAAAAF9fbmFtZV9fdAoAAABfX21vZHVsZV9fUgAAAAB0DQAAAF9fbWV0YWNsYXNzX190BAAAAE5vbmVSDAAAAFINAAAAUg4AAABSEAAAAHQIAAAAcHJvcGVydHlSFAAAAHQGAAAAc2V0dGVyUhcAAABSGAAAACgAAAAAKAAAAAAoAAAAAHNUAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL2VuZ2luZV9iYXNlX3RyYWluaW5nLnB5UgQAAAAdAAAAcxYAAAAGAQYCBgEGAQYCCQcPBBIEDwQSBA8ETigLAAAAdAMAAABhYmNSAAAAAHQOAAAAX2NvbXBhdGliaWxpdHlSAQAAAHQIAAAAX2xvZ2dpbmdSAgAAAHQSAAAAZW5naW5lX2Jhc2VfYWN0aW9uUgMAAAB0BwAAAF9fYWxsX190BgAAAGxvZ2dlclIEAAAAKAAAAAAoAAAAACgAAAAAc1QAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rv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d3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmltcG9ydCBvcwpmcm9tIC4uLl9sb2dnaW5nIGltcG9ydCBnZXRfbG9nZ2VyCgpsb2dnZXIgPSBnZXRfbG9nZ2VyKCdlbmdpbmVfYmFzZV9kYXRhX2hhbmRsZXInKQpfX2FsbF9fID0gWydLZXJhc1NlcmlhbGl6ZXInXQoKCmNsYXNzIEtlcmFzU2VyaWFsaXplcihvYmplY3QpOgogICAgZGVmIF9zZXJpYWxpemVyX2xvYWQoc2VsZiwgb2JqZWN0X2ZpbGVfcGF0aCk6CiAgICAgICAgaWYgb2JqZWN0X2ZpbGVfcGF0aC5zcGxpdChvcy5zZXApWy0xXSA9PSAnbW9kZWwnOgogICAgICAgICAgICBmcm9tIGtlcmFzLm1vZGVscyBpbXBvcnQgbG9hZF9tb2RlbAoKICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJMb2FkaW5nIG1vZGVsIHt9IHVzaW5nIGtlcmFzIHNlcmlhbGl6ZXIuIi5mb3JtYXQob2JqZWN0X2ZpbGVfcGF0aCkpCiAgICAgICAgICAgIHJldHVybiBsb2FkX21vZGVsKG9iamVjdF9maWxlX3BhdGgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEtlcmFzU2VyaWFsaXplciwgc2VsZikuX3NlcmlhbGl6ZXJfbG9hZChvYmplY3RfZmlsZV9wYXRoKQoKICAgIGRlZiBfc2VyaWFsaXplcl9kdW1wKHNlbGYsIG9iaiwgb2JqZWN0X2ZpbGVfcGF0aCk6CiAgICAgICAgaWYgb2JqZWN0X2ZpbGVfcGF0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AAAAAC8qKiBDb3B5cmlnaHQgWzIwMTddIFtCMlcgRGlnaXRhbF0KCiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoqKi8KCnN5bnRheCA9ICJwcm90bzMiOwoKc2VydmljZSBPbmxpbmVBY3Rpb25IYW5kbGVyIHsKCXJwYyBfcmVtb3RlX2V4ZWN1dGUgKE9ubGluZUFjdGlvblJlcXVlc3QpIHJldHVybnMgKE9ubGluZUFjdGlvblJlc3BvbnNlKSB7fQoJcnBjIF9yZW1vdGVfcmVsb2FkIChSZWxvYWRSZXF1ZXN0KSByZXR1cm5zIChSZWxvYWRSZXNwb25zZSkge30KCXJwYyBfaGVhbHRoX2NoZWNrIChIZWFsdGhDaGVja1JlcXVlc3QpIHJldHVybnMgKEhlYWx0aENoZWNrUmVzcG9uc2UpIHt9Cn0KCnNlcnZpY2UgQmF0Y2hBY3Rpb25IYW5kbGVyIHsKCXJwYyBfcmVtb3RlX2V4ZWN1dGUgKEJhdGNoQWN0aW9uUmVxdWVzdCkgcmV0dXJucyAoQmF0Y2hBY3Rpb25SZXNwb25zZSkge30KCXJwYyBfcmVtb3RlX3JlbG9hZCAoUmVsb2FkUmVxdWVzdCkgcmV0dXJucyAoUmVsb2FkUmVzcG9uc2UpIHt9CglycGMgX2hlYWx0aF9jaGVjayAoSGVhbHRoQ2hlY2tSZXF1ZXN0KSByZXR1cm5zIChIZWFsdGhDaGVja1Jlc3BvbnNlKSB7fQp9CgptZXNzYWdlIE9ubGluZUFjdGlvblJlcXVlc3QgewoJc3RyaW5nIG1lc3NhZ2UgPSAxOwoJc3RyaW5nIHBhcmFtcyA9IDI7Cn0KCm1lc3NhZ2UgT25saW5lQWN0aW9uUmVzcG9uc2UgewoJc3RyaW5nIG1lc3NhZ2UgPSAxOwp9CgptZXNzYWdlIEJhdGNoQWN0aW9uUmVxdWVzdCB7CglzdHJpbmcgcGFyYW1zID0gMTsKfQoKbWVzc2FnZSBCYXRjaEFjdGlvblJlc3BvbnNlIHsKCXN0cmluZyBtZXNzYWdlID0gMTsKfQoKbWVzc2FnZSBSZWxvYWRSZXF1ZXN0IHsKCXN0cmluZyBwcm90b2NvbCA9IDE7CglzdHJpbmcgYXJ0aWZhY3RzID0gMjsKfQoKbWVzc2FnZSBSZWxvYWRSZXNwb25zZSB7CglzdHJpbmcgbWVzc2FnZSA9IDE7Cn0KCm1lc3NhZ2UgSGVhbHRoQ2hlY2tSZXF1ZXN0IHsKCXN0cmluZyBhcnRpZmFjdHMgPSAyOwp9CgptZXNzYWdlIEhlYWx0aENoZWNrUmVzcG9uc2UgewoJZW51bSBTdGF0dXMgewoJCU9LID0gMDsKCQlOT0sgPSAxOwoJfQoJU3RhdHVzIHN0YXR1cyA9IDE7Cn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL3N0dWJzL2FjdGlvbnNfcGIyX2dycGMucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDEzNzQ0IDEzNDYzMzMzNDYyIDAzMTU3NgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIEdlbmVyYXRlZCBieSB0aGUgZ1JQQyBQeXRob24gcHJvdG9jb2wgY29tcGlsZXIgcGx1Z2luLiBETyBOT1QgRURJVCEKaW1wb3J0IGdycGMKCiMgZnJvbSAuYWN0aW9uc19wYjIgaW1wb3J0ICogL3B5dGhvbjMKIyBpbXBvcnQgYWN0aW9uc19wYjIgYXMgYWN0aW9uc19fcGIyIC9weXRob24yCmZyb20gLi5zdHVicyBpbXBvcnQgYWN0aW9uc19wYjIgYXMgYWN0aW9uc19fcGIyCgoKY2xhc3MgT25saW5lQWN0aW9uSGFuZGxlclN0dWIob2JqZWN0KToKICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICBwYXNzCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLl9yZW1vdGVfZXhlY3V0ZSA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9PbmxpbmVBY3Rpb25IYW5kbGVyL19yZW1vdGVfZXhlY3V0ZScsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWFjdGlvbnNfX3BiMi5PbmxpbmVBY3Rpb25SZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1hY3Rpb25zX19wYjIuT25saW5lQWN0aW9uUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLl9yZW1vdGVfcmVsb2FkID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL09ubGluZUFjdGlvbkhhbmRsZXIvX3JlbW90ZV9yZWxvYWQnLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1hY3Rpb25zX19wYjIuUmVsb2FkUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLlJlbG9hZFJlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQogICAgc2VsZi5faGVhbHRoX2NoZWNrID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL09ubGluZUFjdGlvbkhhbmRsZXIvX2hlYWx0aF9jaGVjaycsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWFjdGlvbnNfX3BiMi5IZWFsdGhDaGVja1JlcXVlc3QuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPWFjdGlvbnNfX3BiMi5IZWFsdGhDaGVja1Jlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgKQoKCmNsYXNzIE9ubGluZUFjdGlvbkhhbmRsZXJTZXJ2aWNlcihvYmplY3QpOgogICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogIHBhc3MKCiAgZGVmIF9yZW1vdGVfZXhlY3V0ZShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgcGFzcwogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgZGVmIF9yZW1vdGVfcmVsb2FkKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICBwYXNzCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgX2hlYWx0aF9jaGVjayhzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgcGFzcwogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX09ubGluZUFjdGlvbkhhbmRsZXJTZXJ2aWNlcl90b19zZXJ2ZXIoc2VydmljZXIsIHNlcnZlcik6CiAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgJ19yZW1vdGVfZXhlY3V0ZSc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuX3JlbW90ZV9leGVjdXRlLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLk9ubGluZUFjdGlvblJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLk9ubGluZUFjdGlvblJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnX3JlbW90ZV9yZWxvYWQnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLl9yZW1vdGVfcmVsb2FkLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLlJlbG9hZFJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLlJlbG9hZFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnX2hlYWx0aF9jaGVjayc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuX2hlYWx0aF9jaGVjaywKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWFjdGlvbnNfX3BiMi5IZWFsdGhDaGVja1JlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLkhlYWx0aENoZWNrUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ09ubGluZUFjdGlvbkhhbmRsZXInLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogIHNlcnZlci5hZGRfZ2VuZXJpY19ycGNfaGFuZGxlcnMoKGdlbmVyaWNfaGFuZGxlciwpKQoKCmNsYXNzIEJhdGNoQWN0aW9uSGFuZGxlclN0dWIob2JqZWN0KToKICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICBwYXNzCgogIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICIiIkNvbnN0cnVjdG9yLgoKICAgIEFyZ3M6CiAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgIiIiCiAgICBzZWxmLl9yZW1vdGVfZXhlY3V0ZSA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgJy9CYXRjaEFjdGlvbkhhbmRsZXIvX3JlbW90ZV9leGVjdXRlJywKICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLkJhdGNoQWN0aW9uUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICByZXNwb25zZV9kZXNlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLkJhdGNoQWN0aW9uUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLl9yZW1vdGVfcmVsb2FkID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAnL0JhdGNoQWN0aW9uSGFuZGxlci9fcmVtb3RlX3JlbG9hZCcsCiAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPWFjdGlvbnNfX3BiMi5SZWxvYWRSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1hY3Rpb25zX19wYjIuUmVsb2FkUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICApCiAgICBzZWxmLl9oZWFsdGhfY2hlY2sgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICcvQmF0Y2hBY3Rpb25IYW5kbGVyL19oZWFsdGhfY2hlY2snLAogICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1hY3Rpb25zX19wYjIuSGVhbHRoQ2hlY2tSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1hY3Rpb25zX19wYjIuSGVhbHRoQ2hlY2tSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICkKCgpjbGFzcyBCYXRjaEFjdGlvbkhhbmRsZXJTZXJ2aWNlcihvYmplY3QpOgogICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogIHBhc3MKCiAgZGVmIF9yZW1vdGVfZXhlY3V0ZShzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgcGFzcwogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgZGVmIF9yZW1vdGVfcmVsb2FkKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICBwYXNzCiAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICBkZWYgX2hlYWx0aF9jaGVjayhzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgcGFzcwogICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgpkZWYgYWRkX0JhdGNoQWN0aW9uSGFuZGxlclNlcnZpY2VyX3RvX3NlcnZlcihzZXJ2aWNlciwgc2VydmVyKToKICBycGNfbWV0aG9kX2hhbmRsZXJzID0gewogICAgICAnX3JlbW90ZV9leGVjdXRlJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICBzZXJ2aWNlci5fcmVtb3RlX2V4ZWN1dGUsCiAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1hY3Rpb25zX19wYjIuQmF0Y2hBY3Rpb25SZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPWFjdGlvbnNfX3BiMi5CYXRjaEFjdGlvblJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnX3JlbW90ZV9yZWxvYWQnOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgIHNlcnZpY2VyLl9yZW1vdGVfcmVsb2FkLAogICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLlJlbG9hZFJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLlJlbG9hZFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICApLAogICAgICAnX2hlYWx0aF9jaGVjayc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgc2VydmljZXIuX2hlYWx0aF9jaGVjaywKICAgICAgICAgIHJlcXVlc3RfZGVzZXJpYWxpemVyPWFjdGlvbnNfX3BiMi5IZWFsdGhDaGVja1JlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9YWN0aW9uc19fcGIyLkhlYWx0aENoZWNrUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICksCiAgfQogIGdlbmVyaWNfaGFuZGxlciA9IGdycGMubWV0aG9kX2hhbmRsZXJzX2dlbmVyaWNfaGFuZGxlcigKICAgICAgJ0JhdGNoQWN0aW9uSGFuZGxlcicsIHJwY19tZXRob2RfaGFuZGxlcnMpCiAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2Uvc3R1YnMvYWN0aW9uc19wYjIucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwNzQ3MzAgMTM0NjMzMzM0NjIgMDMwNTY1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMgR2VuZXJhdGVkIGJ5IHRoZSBwcm90b2NvbCBidWZmZXIgY29tcGlsZXIuICBETyBOT1QgRURJVCEKIyBzb3VyY2U6IGFjdGlvbnMucHJvdG8KCmltcG9ydCBzeXMKX2I9c3lzLnZlcnNpb25faW5mb1swXTwzIGFuZCAobGFtYmRhIHg6eCkgb3IgKGxhbWJkYSB4OnguZW5jb2RlKCdsYXRpbjEnKSkKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IGRlc2NyaXB0b3IgYXMgX2Rlc2NyaXB0b3IKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IG1lc3NhZ2UgYXMgX21lc3NhZ2UKZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHJlZmxlY3Rpb24gYXMgX3JlZmxlY3Rpb24KZnJvbSBnb29nbGUucHJvdG9idWYgaW1wb3J0IHN5bWJvbF9kYXRhYmFzZSBhcyBfc3ltYm9sX2RhdGFiYXNlCmZyb20gZ29vZ2xlLnByb3RvYnVmIGltcG9ydCBkZXNjcmlwdG9yX3BiMgojIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChpbXBvcnRzKQoKX3N5bV9kYiA9IF9zeW1ib2xfZGF0YWJhc2UuRGVmYXVsdCgpCgoKCgpERVNDUklQVE9SID0gX2Rlc2NyaXB0b3IuRmlsZURlc2NyaXB0b3IoCiAgbmFtZT0nYWN0aW9ucy5wcm90bycsCiAgcGFja2FnZT0nJywKICBzeW50YXg9J3Byb3RvMycsCiAgc2VyaWFsaXplZF9wYj1fYignXG5ccmFjdGlvbnMucHJvdG9cIjZcblx4MTNPbmxpbmVBY3Rpb25SZXF1ZXN0XHgxMlx4MGZcblx4MDdtZXNzYWdlXHgxOFx4MDEgXHgwMShcdFx4MTJceDBlXG5ceDA2cGFyYW1zXHgxOFx4MDIgXHgwMShcdFwiXCdcblx4MTRPbmxpbmVBY3Rpb25SZXNwb25zZVx4MTJceDBmXG5ceDA3bWVzc2FnZVx4MThceDAxIFx4MDEoXHRcIiRcblx4MTJceDQyXHg2MXRjaEFjdGlvblJlcXVlc3RceDEyXHgwZVxuXHgwNnBhcmFtc1x4MThceDAxIFx4MDEoXHRcIiZcblx4MTNceDQyXHg2MXRjaEFjdGlvblJlc3BvbnNlXHgxMlx4MGZcblx4MDdtZXNzYWdlXHgxOFx4MDEgXHgwMShcdFwiNFxuXHJSZWxvYWRSZXF1ZXN0XHgxMlx4MTBcblx4MDhwcm90b2NvbFx4MThceDAxIFx4MDEoXHRceDEyXHgxMVxuXHRhcnRpZmFjdHNceDE4XHgwMiBceDAxKFx0XCIhXG5ceDBlUmVsb2FkUmVzcG9uc2VceDEyXHgwZlxuXHgwN21lc3NhZ2VceDE4XHgwMSBceDAxKFx0XCJcJ1xuXHgxMkhlYWx0aENoZWNrUmVxdWVzdFx4MTJceDExXG5cdGFydGlmYWN0c1x4MThceDAyIFx4MDEoXHRcIl1cblx4MTNIZWFsdGhDaGVja1Jlc3BvbnNlXHgxMitcblx4MDZzdGF0dXNceDE4XHgwMSBceDAxKFx4MGVceDMyXHgxYi5IZWFsdGhDaGVja1Jlc3BvbnNlLlN0YXR1c1wiXHgxOVxuXHgwNlN0YXR1c1x4MTJceDA2XG5ceDAyT0tceDEwXHgwMFx4MTJceDA3XG5ceDAzTk9LXHgxMFx4MDFceDMyXHhjYVx4MDFcblx4MTNPbmxpbmVBY3Rpb25IYW5kbGVyXHgxMkBcblx4MGZfcmVtb3RlX2V4ZWN1dGVceDEyXHgxNC5PbmxpbmVBY3Rpb25SZXF1ZXN0XHgxYVx4MTUuT25saW5lQWN0aW9uUmVzcG9uc2VcIlx4MDBceDEyXHgzM1xuXHgwZV9yZW1vdGVfcmVsb2FkXHgxMlx4MGUuUmVsb2FkUmVxdWVzdFx4MWFceDBmLlJlbG9hZFJlc3BvbnNlXCJceDAwXHgxMjxcblxyX2hlYWx0aF9jaGVja1x4MTJceDEzLkhlYWx0aENoZWNrUmVxdWVzdFx4MWFceDE0LkhlYWx0aENoZWNrUmVzcG9uc2VcIlx4MDBceDMyXHhjN1x4MDFcblx4MTJceDQyXHg2MXRjaEFjdGlvbkhhbmRsZXJceDEyPlxuXHgwZl9yZW1vdGVfZXhlY3V0ZVx4MTJceDEzLkJhdGNoQWN0aW9uUmVxdWVzdFx4MWFceDE0LkJhdGNoQWN0aW9uUmVzcG9uc2VcIlx4MDBceDEyXHgzM1xuXHgwZV9yZW1vdGVfcmVsb2FkXHgxMlx4MGUuUmVsb2FkUmVxdWVzdFx4MWFceDBmLlJlbG9hZFJlc3BvbnNlXCJceDAwXHgxMjxcblxyX2hlYWx0aF9jaGVja1x4MTJceDEzLkhlYWx0aENoZWNrUmVxdWVzdFx4MWFceDE0LkhlYWx0aENoZWNrUmVzcG9uc2VcIlx4MDBceDYyXHgwNnByb3RvMycpCikKCgoKX0hFQUxUSENIRUNLUkVTUE9OU0VfU1RBVFVTID0gX2Rlc2NyaXB0b3IuRW51bURlc2NyaXB0b3IoCiAgbmFtZT0nU3RhdHVzJywKICBmdWxsX25hbWU9J0hlYWx0aENoZWNrUmVzcG9uc2UuU3RhdHVzJywKICBmaWxlbmFtZT1Ob25lLAogIGZpbGU9REVTQ1JJUFRPUiwKICB2YWx1ZXM9WwogICAgX2Rlc2NyaXB0b3IuRW51bVZhbHVlRGVzY3JpcHRvcigKICAgICAgbmFtZT0nT0snLCBpbmRleD0wLCBudW1iZXI9MCwKICAgICAgb3B0aW9ucz1Ob25lLAogICAgICB0eXBlPU5vbmUpLAogICAgX2Rlc2NyaXB0b3IuRW51bVZhbHVlRGVzY3JpcHRvcigKICAgICAgbmFtZT0nTk9LJywgaW5kZXg9MSwgbnVtYmVyPTEsCiAgICAgIG9wdGlvbnM9Tm9uZSwKICAgICAgdHlwZT1Ob25lKSwKICBdLAogIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogIG9wdGlvbnM9Tm9uZSwKICBzZXJpYWxpemVkX3N0YXJ0PTM5MCwKICBzZXJpYWxpemVkX2VuZD00MTUsCikKX3N5bV9kYi5SZWdpc3RlckVudW1EZXNjcmlwdG9yKF9IRUFMVEhDSEVDS1JFU1BPTlNFX1NUQVRVUykKCgpfT05MSU5FQUNUSU9OUkVRVUVTVCA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCiAgbmFtZT0nT25saW5lQWN0aW9uUmVxdWVzdCcsCiAgZnVsbF9uYW1lPSdPbmxpbmVBY3Rpb25SZXF1ZXN0JywKICBmaWxlbmFtZT1Ob25lLAogIGZpbGU9REVTQ1JJUFRPUiwKICBjb250YWluaW5nX3R5cGU9Tm9uZSwKICBmaWVsZHM9WwogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdtZXNzYWdlJywgZnVsbF9uYW1lPSdPbmxpbmVBY3Rpb25SZXF1ZXN0Lm1lc3NhZ2UnLCBpbmRleD0wLAogICAgICBudW1iZXI9MSwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBvcHRpb25zPU5vbmUpLAogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdwYXJhbXMnLCBmdWxsX25hbWU9J09ubGluZUFjdGlvblJlcXVlc3QucGFyYW1zJywgaW5kZXg9MSwKICAgICAgbnVtYmVyPTIsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgb3B0aW9ucz1Ob25lKSwKICBdLAogIGV4dGVuc2lvbnM9WwogIF0sCiAgbmVzdGVkX3R5cGVzPVtdLAogIGVudW1fdHlwZXM9WwogIF0sCiAgb3B0aW9ucz1Ob25lLAogIGlzX2V4dGVuZGFibGU9RmFsc2UsCiAgc3ludGF4PSdwcm90bzMnLAogIGV4dGVuc2lvbl9yYW5nZXM9W10sCiAgb25lb2ZzPVsKICBdLAogIHNlcmlhbGl6ZWRfc3RhcnQ9MTcsCiAgc2VyaWFsaXplZF9lbmQ9NzEsCikKCgpfT05MSU5FQUNUSU9OUkVTUE9OU0UgPSBfZGVzY3JpcHRvci5EZXNjcmlwdG9yKAogIG5hbWU9J09ubGluZUFjdGlvblJlc3BvbnNlJywKICBmdWxsX25hbWU9J09ubGluZUFjdGlvblJlc3BvbnNlJywKICBmaWxlbmFtZT1Ob25lLAogIGZpbGU9REVTQ1JJUFRPUiwKICBjb250YWluaW5nX3R5cGU9Tm9uZSwKICBmaWVsZHM9WwogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdtZXNzYWdlJywgZnVsbF9uYW1lPSdPbmxpbmVBY3Rpb25SZXNwb25zZS5tZXNzYWdlJywgaW5kZXg9MCwKICAgICAgbnVtYmVyPTEsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgb3B0aW9ucz1Ob25lKSwKICBdLAogIGV4dGVuc2lvbnM9WwogIF0sCiAgbmVzdGVkX3R5cGVzPVtdLAogIGVudW1fdHlwZXM9WwogIF0sCiAgb3B0aW9ucz1Ob25lLAogIGlzX2V4dGVuZGFibGU9RmFsc2UsCiAgc3ludGF4PSdwcm90bzMnLAogIGV4dGVuc2lvbl9yYW5nZXM9W10sCiAgb25lb2ZzPVsKICBdLAogIHNlcmlhbGl6ZWRfc3RhcnQ9NzMsCiAgc2VyaWFsaXplZF9lbmQ9MTEyLAopCgoKX0JBVENIQUNUSU9OUkVRVUVTVCA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCiAgbmFtZT0nQmF0Y2hBY3Rpb25SZXF1ZXN0JywKICBmdWxsX25hbWU9J0JhdGNoQWN0aW9uUmVxdWVzdCcsCiAgZmlsZW5hbWU9Tm9uZSwKICBmaWxlPURFU0NSSVBUT1IsCiAgY29udGFpbmluZ190eXBlPU5vbmUsCiAgZmllbGRzPVsKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0ncGFyYW1zJywgZnVsbF9uYW1lPSdCYXRjaEFjdGlvblJlcXVlc3QucGFyYW1zJywgaW5kZXg9MCwKICAgICAgbnVtYmVyPTEsIHR5cGU9OSwgY3BwX3R5cGU9OSwgbGFiZWw9MSwKICAgICAgaGFzX2RlZmF1bHRfdmFsdWU9RmFsc2UsIGRlZmF1bHRfdmFsdWU9X2IoIiIpLmRlY29kZSgndXRmLTgnKSwKICAgICAgbWVzc2FnZV90eXBlPU5vbmUsIGVudW1fdHlwZT1Ob25lLCBjb250YWluaW5nX3R5cGU9Tm9uZSwKICAgICAgaXNfZXh0ZW5zaW9uPUZhbHNlLCBleHRlbnNpb25fc2NvcGU9Tm9uZSwKICAgICAgb3B0aW9ucz1Ob25lKSwKICBdLAogIGV4dGVuc2lvbnM9WwogIF0sCiAgbmVzdGVkX3R5cGVzPVtdLAogIGVudW1fdHlwZXM9WwogIF0sCiAgb3B0aW9ucz1Ob25lLAogIGlzX2V4dGVuZGFibGU9RmFsc2UsCiAgc3ludGF4PSdwcm90bzMnLAogIGV4dGVuc2lvbl9yYW5nZXM9W10sCiAgb25lb2ZzPVsKICBdLAogIHNlcmlhbGl6ZWRfc3RhcnQ9MTE0LAogIHNlcmlhbGl6ZWRfZW5kPTE1MCwKKQoKCl9CQVRDSEFDVElPTlJFU1BPTlNFID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKICBuYW1lPSdCYXRjaEFjdGlvblJlc3BvbnNlJywKICBmdWxsX25hbWU9J0JhdGNoQWN0aW9uUmVzcG9uc2UnLAogIGZpbGVuYW1lPU5vbmUsCiAgZmlsZT1ERVNDUklQVE9SLAogIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogIGZpZWxkcz1bCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J21lc3NhZ2UnLCBmdWxsX25hbWU9J0JhdGNoQWN0aW9uUmVzcG9uc2UubWVzc2FnZScsIGluZGV4PTAsCiAgICAgIG51bWJlcj0xLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIG9wdGlvbnM9Tm9uZSksCiAgXSwKICBleHRlbnNpb25zPVsKICBdLAogIG5lc3RlZF90eXBlcz1bXSwKICBlbnVtX3R5cGVzPVsKICBdLAogIG9wdGlvbnM9Tm9uZSwKICBpc19leHRlbmRhYmxlPUZhbHNlLAogIHN5bnRheD0ncHJvdG8zJywKICBleHRlbnNpb25fcmFuZ2VzPVtdLAogIG9uZW9mcz1bCiAgXSwKICBzZXJpYWxpemVkX3N0YXJ0PTE1MiwKICBzZXJpYWxpemVkX2VuZD0xOTAsCikKCgpfUkVMT0FEUkVRVUVTVCA9IF9kZXNjcmlwdG9yLkRlc2NyaXB0b3IoCiAgbmFtZT0nUmVsb2FkUmVxdWVzdCcsCiAgZnVsbF9uYW1lPSdSZWxvYWRSZXF1ZXN0JywKICBmaWxlbmFtZT1Ob25lLAogIGZpbGU9REVTQ1JJUFRPUiwKICBjb250YWluaW5nX3R5cGU9Tm9uZSwKICBmaWVsZHM9WwogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdwcm90b2NvbCcsIGZ1bGxfbmFtZT0nUmVsb2FkUmVxdWVzdC5wcm90b2NvbCcsIGluZGV4PTAsCiAgICAgIG51bWJlcj0xLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIG9wdGlvbnM9Tm9uZSksCiAgICBfZGVzY3JpcHRvci5GaWVsZERlc2NyaXB0b3IoCiAgICAgIG5hbWU9J2FydGlmYWN0cycsIGZ1bGxfbmFtZT0nUmVsb2FkUmVxdWVzdC5hcnRpZmFjdHMnLCBpbmRleD0xLAogICAgICBudW1iZXI9MiwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBvcHRpb25zPU5vbmUpLAogIF0sCiAgZXh0ZW5zaW9ucz1bCiAgXSwKICBuZXN0ZWRfdHlwZXM9W10sCiAgZW51bV90eXBlcz1bCiAgXSwKICBvcHRpb25zPU5vbmUsCiAgaXNfZXh0ZW5kYWJsZT1GYWxzZSwKICBzeW50YXg9J3Byb3RvMycsCiAgZXh0ZW5zaW9uX3Jhbmdlcz1bXSwKICBvbmVvZnM9WwogIF0sCiAgc2VyaWFsaXplZF9zdGFydD0xOTIsCiAgc2VyaWFsaXplZF9lbmQ9MjQ0LAopCgoKX1JFTE9BRFJFU1BPTlNFID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKICBuYW1lPSdSZWxvYWRSZXNwb25zZScsCiAgZnVsbF9uYW1lPSdSZWxvYWRSZXNwb25zZScsCiAgZmlsZW5hbWU9Tm9uZSwKICBmaWxlPURFU0NSSVBUT1IsCiAgY29udGFpbmluZ190eXBlPU5vbmUsCiAgZmllbGRzPVsKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0nbWVzc2FnZScsIGZ1bGxfbmFtZT0nUmVsb2FkUmVzcG9uc2UubWVzc2FnZScsIGluZGV4PTAsCiAgICAgIG51bWJlcj0xLCB0eXBlPTksIGNwcF90eXBlPTksIGxhYmVsPTEsCiAgICAgIGhhc19kZWZhdWx0X3ZhbHVlPUZhbHNlLCBkZWZhdWx0X3ZhbHVlPV9iKCIiKS5kZWNvZGUoJ3V0Zi04JyksCiAgICAgIG1lc3NhZ2VfdHlwZT1Ob25lLCBlbnVtX3R5cGU9Tm9uZSwgY29udGFpbmluZ190eXBlPU5vbmUsCiAgICAgIGlzX2V4dGVuc2lvbj1GYWxzZSwgZXh0ZW5zaW9uX3Njb3BlPU5vbmUsCiAgICAgIG9wdGlvbnM9Tm9uZSksCiAgXSwKICBleHRlbnNpb25zPVsKICBdLAogIG5lc3RlZF90eXBlcz1bXSwKICBlbnVtX3R5cGVzPVsKICBdLAogIG9wdGlvbnM9Tm9uZSwKICBpc19leHRlbmRhYmxlPUZhbHNlLAogIHN5bnRheD0ncHJvdG8zJywKICBleHRlbnNpb25fcmFuZ2VzPVtdLAogIG9uZW9mcz1bCiAgXSwKICBzZXJpYWxpemVkX3N0YXJ0PTI0NiwKICBzZXJpYWxpemVkX2VuZD0yNzksCikKCgpfSEVBTFRIQ0hFQ0tSRVFVRVNUID0gX2Rlc2NyaXB0b3IuRGVzY3JpcHRvcigKICBuYW1lPSdIZWFsdGhDaGVja1JlcXVlc3QnLAogIGZ1bGxfbmFtZT0nSGVhbHRoQ2hlY2tSZXF1ZXN0JywKICBmaWxlbmFtZT1Ob25lLAogIGZpbGU9REVTQ1JJUFRPUiwKICBjb250YWluaW5nX3R5cGU9Tm9uZSwKICBmaWVsZHM9WwogICAgX2Rlc2NyaXB0b3IuRmllbGREZXNjcmlwdG9yKAogICAgICBuYW1lPSdhcnRpZmFjdHMnLCBmdWxsX25hbWU9J0hlYWx0aENoZWNrUmVxdWVzdC5hcnRpZmFjdHMnLCBpbmRleD0wLAogICAgICBudW1iZXI9MiwgdHlwZT05LCBjcHBfdHlwZT05LCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT1fYigiIikuZGVjb2RlKCd1dGYtOCcpLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBvcHRpb25zPU5vbmUpLAogIF0sCiAgZXh0ZW5zaW9ucz1bCiAgXSwKICBuZXN0ZWRfdHlwZXM9W10sCiAgZW51bV90eXBlcz1bCiAgXSwKICBvcHRpb25zPU5vbmUsCiAgaXNfZXh0ZW5kYWJsZT1GYWxzZSwKICBzeW50YXg9J3Byb3RvMycsCiAgZXh0ZW5zaW9uX3Jhbmdlcz1bXSwKICBvbmVvZnM9WwogIF0sCiAgc2VyaWFsaXplZF9zdGFydD0yODEsCiAgc2VyaWFsaXplZF9lbmQ9MzIwLAopCgoKX0hFQUxUSENIRUNLUkVTUE9OU0UgPSBfZGVzY3JpcHRvci5EZXNjcmlwdG9yKAogIG5hbWU9J0hlYWx0aENoZWNrUmVzcG9uc2UnLAogIGZ1bGxfbmFtZT0nSGVhbHRoQ2hlY2tSZXNwb25zZScsCiAgZmlsZW5hbWU9Tm9uZSwKICBmaWxlPURFU0NSSVBUT1IsCiAgY29udGFpbmluZ190eXBlPU5vbmUsCiAgZmllbGRzPVsKICAgIF9kZXNjcmlwdG9yLkZpZWxkRGVzY3JpcHRvcigKICAgICAgbmFtZT0nc3RhdHVzJywgZnVsbF9uYW1lPSdIZWFsdGhDaGVja1Jlc3BvbnNlLnN0YXR1cycsIGluZGV4PTAsCiAgICAgIG51bWJlcj0xLCB0eXBlPTE0LCBjcHBfdHlwZT04LCBsYWJlbD0xLAogICAgICBoYXNfZGVmYXVsdF92YWx1ZT1GYWxzZSwgZGVmYXVsdF92YWx1ZT0wLAogICAgICBtZXNzYWdlX3R5cGU9Tm9uZSwgZW51bV90eXBlPU5vbmUsIGNvbnRhaW5pbmdfdHlwZT1Ob25lLAogICAgICBpc19leHRlbnNpb249RmFsc2UsIGV4dGVuc2lvbl9zY29wZT1Ob25lLAogICAgICBvcHRpb25zPU5vbmUpLAogIF0sCiAgZXh0ZW5zaW9ucz1bCiAgXSwKICBuZXN0ZWRfdHlwZXM9W10sCiAgZW51bV90eXBlcz1bCiAgICBfSEVBTFRIQ0hFQ0tSRVNQT05TRV9TVEFUVVMsCiAgXSwKICBvcHRpb25zPU5vbmUsCiAgaXNfZXh0ZW5kYWJsZT1GYWxzZSwKICBzeW50YXg9J3Byb3RvMycsCiAgZXh0ZW5zaW9uX3Jhbmdlcz1bXSwKICBvbmVvZnM9WwogIF0sCiAgc2VyaWFsaXplZF9zdGFydD0zMjIsCiAgc2VyaWFsaXplZF9lbmQ9NDE1LAopCgpfSEVBTFRIQ0hFQ0tSRVNQT05TRS5maWVsZHNfYnlfbmFtZVsnc3RhdHVzJ10uZW51bV90eXBlID0gX0hFQUxUSENIRUNLUkVTUE9OU0VfU1RBVFVTCl9IRUFMVEhDSEVDS1JFU1BPTlNFX1NUQVRVUy5jb250YWluaW5nX3R5cGUgPSBfSEVBTFRIQ0hFQ0tSRVNQT05TRQpERVNDUklQVE9SLm1lc3NhZ2VfdHlwZXNfYnlfbmFtZVsnT25saW5lQWN0aW9uUmVxdWVzdCddID0gX09OTElORUFDVElPTlJFUVVFU1QKREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ09ubGluZUFjdGlvblJlc3BvbnNlJ10gPSBfT05MSU5FQUNUSU9OUkVTUE9OU0UKREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ0JhdGNoQWN0aW9uUmVxdWVzdCddID0gX0JBVENIQUNUSU9OUkVRVUVTVApERVNDUklQVE9SLm1lc3NhZ2VfdHlwZXNfYnlfbmFtZVsnQmF0Y2hBY3Rpb25SZXNwb25zZSddID0gX0JBVENIQUNUSU9OUkVTUE9OU0UKREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ1JlbG9hZFJlcXVlc3QnXSA9IF9SRUxPQURSRVFVRVNUCkRFU0NSSVBUT1IubWVzc2FnZV90eXBlc19ieV9uYW1lWydSZWxvYWRSZXNwb25zZSddID0gX1JFTE9BRFJFU1BPTlNFCkRFU0NSSVBUT1IubWVzc2FnZV90eXBlc19ieV9uYW1lWydIZWFsdGhDaGVja1JlcXVlc3QnXSA9IF9IRUFMVEhDSEVDS1JFUVVFU1QKREVTQ1JJUFRPUi5tZXNzYWdlX3R5cGVzX2J5X25hbWVbJ0hlYWx0aENoZWNrUmVzcG9uc2UnXSA9IF9IRUFMVEhDSEVDS1JFU1BPTlNFCl9zeW1fZGIuUmVnaXN0ZXJGaWxlRGVzY3JpcHRvcihERVNDUklQVE9SKQoKT25saW5lQWN0aW9uUmVxdWVzdCA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ09ubGluZUFjdGlvblJlcXVlc3QnLCAoX21lc3NhZ2UuTWVzc2FnZSwpLCBkaWN0KAogIERFU0NSSVBUT1IgPSBfT05MSU5FQUNUSU9OUkVRVUVTVCwKICBfX21vZHVsZV9fID0gJ2FjdGlvbnNfcGIyJwogICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOk9ubGluZUFjdGlvblJlcXVlc3QpCiAgKSkKX3N5bV9kYi5SZWdpc3Rlck1lc3NhZ2UoT25saW5lQWN0aW9uUmVxdWVzdCkKCk9ubGluZUFjdGlvblJlc3BvbnNlID0gX3JlZmxlY3Rpb24uR2VuZXJhdGVkUHJvdG9jb2xNZXNzYWdlVHlwZSgnT25saW5lQWN0aW9uUmVzcG9uc2UnLCAoX21lc3NhZ2UuTWVzc2FnZSwpLCBkaWN0KAogIERFU0NSSVBUT1IgPSBfT05MSU5FQUNUSU9OUkVTUE9OU0UsCiAgX19tb2R1bGVfXyA9ICdhY3Rpb25zX3BiMicKICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpPbmxpbmVBY3Rpb25SZXNwb25zZSkKICApKQpfc3ltX2RiLlJlZ2lzdGVyTWVzc2FnZShPbmxpbmVBY3Rpb25SZXNwb25zZSkKCkJhdGNoQWN0aW9uUmVxdWVzdCA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ0JhdGNoQWN0aW9uUmVxdWVzdCcsIChfbWVzc2FnZS5NZXNzYWdlLCksIGRpY3QoCiAgREVTQ1JJUFRPUiA9IF9CQVRDSEFDVElPTlJFUVVFU1QsCiAgX19tb2R1bGVfXyA9ICdhY3Rpb25zX3BiMicKICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpCYXRjaEFjdGlvblJlcXVlc3QpCiAgKSkKX3N5bV9kYi5SZWdpc3Rlck1lc3NhZ2UoQmF0Y2hBY3Rpb25SZXF1ZXN0KQoKQmF0Y2hBY3Rpb25SZXNwb25zZSA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ0JhdGNoQWN0aW9uUmVzcG9uc2UnLCAoX21lc3NhZ2UuTWVzc2FnZSwpLCBkaWN0KAogIERFU0NSSVBUT1IgPSBfQkFUQ0hBQ1RJT05SRVNQT05TRSwKICBfX21vZHVsZV9fID0gJ2FjdGlvbnNfcGIyJwogICMgQEBwcm90b2NfaW5zZXJ0aW9uX3BvaW50KGNsYXNzX3Njb3BlOkJhdGNoQWN0aW9uUmVzcG9uc2UpCiAgKSkKX3N5bV9kYi5SZWdpc3Rlck1lc3NhZ2UoQmF0Y2hBY3Rpb25SZXNwb25zZSkKClJlbG9hZFJlcXVlc3QgPSBfcmVmbGVjdGlvbi5HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlKCdSZWxvYWRSZXF1ZXN0JywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKICBERVNDUklQVE9SID0gX1JFTE9BRFJFUVVFU1QsCiAgX19tb2R1bGVfXyA9ICdhY3Rpb25zX3BiMicKICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpSZWxvYWRSZXF1ZXN0KQogICkpCl9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKFJlbG9hZFJlcXVlc3QpCgpSZWxvYWRSZXNwb25zZSA9IF9yZWZsZWN0aW9uLkdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGUoJ1JlbG9hZFJlc3BvbnNlJywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKICBERVNDUklQVE9SID0gX1JFTE9BRFJFU1BPTlNFLAogIF9fbW9kdWxlX18gPSAnYWN0aW9uc19wYjInCiAgIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6UmVsb2FkUmVzcG9uc2UpCiAgKSkKX3N5bV9kYi5SZWdpc3Rlck1lc3NhZ2UoUmVsb2FkUmVzcG9uc2UpCgpIZWFsdGhDaGVja1JlcXVlc3QgPSBfcmVmbGVjdGlvbi5HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlKCdIZWFsdGhDaGVja1JlcXVlc3QnLCAoX21lc3NhZ2UuTWVzc2FnZSwpLCBkaWN0KAogIERFU0NSSVBUT1IgPSBfSEVBTFRIQ0hFQ0tSRVFVRVNULAogIF9fbW9kdWxlX18gPSAnYWN0aW9uc19wYjInCiAgIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQoY2xhc3Nfc2NvcGU6SGVhbHRoQ2hlY2tSZXF1ZXN0KQogICkpCl9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKEhlYWx0aENoZWNrUmVxdWVzdCkKCkhlYWx0aENoZWNrUmVzcG9uc2UgPSBfcmVmbGVjdGlvbi5HZW5lcmF0ZWRQcm90b2NvbE1lc3NhZ2VUeXBlKCdIZWFsdGhDaGVja1Jlc3BvbnNlJywgKF9tZXNzYWdlLk1lc3NhZ2UsKSwgZGljdCgKICBERVNDUklQVE9SID0gX0hFQUxUSENIRUNLUkVTUE9OU0UsCiAgX19tb2R1bGVfXyA9ICdhY3Rpb25zX3BiMicKICAjIEBAcHJvdG9jX2luc2VydGlvbl9wb2ludChjbGFzc19zY29wZTpIZWFsdGhDaGVja1Jlc3BvbnNlKQogICkpCl9zeW1fZGIuUmVnaXN0ZXJNZXNzYWdlKEhlYWx0aENoZWNrUmVzcG9uc2UpCgoKCl9PTkxJTkVBQ1RJT05IQU5ETEVSID0gX2Rlc2NyaXB0b3IuU2VydmljZURlc2NyaXB0b3IoCiAgbmFtZT0nT25saW5lQWN0aW9uSGFuZGxlcicsCiAgZnVsbF9uYW1lPSdPbmxpbmVBY3Rpb25IYW5kbGVyJywKICBmaWxlPURFU0NSSVBUT1IsCiAgaW5kZXg9MCwKICBvcHRpb25zPU5vbmUsCiAgc2VyaWFsaXplZF9zdGFydD00MTgsCiAgc2VyaWFsaXplZF9lbmQ9NjIwLAogIG1ldGhvZHM9WwogIF9kZXNjcmlwdG9yLk1ldGhvZERlc2NyaXB0b3IoCiAgICBuYW1lPSdfcmVtb3RlX2V4ZWN1dGUnLAogICAgZnVsbF9uYW1lPSdPbmxpbmVBY3Rpb25IYW5kbGVyLl9yZW1vdGVfZXhlY3V0ZScsCiAgICBpbmRleD0wLAogICAgY29udGFpbmluZ19zZXJ2aWNlPU5vbmUsCiAgICBpbnB1dF90eXBlPV9PTkxJTkVBQ1RJT05SRVFVRVNULAogICAgb3V0cHV0X3R5cGU9X09OTElORUFDVElPTlJFU1BPTlNFLAogICAgb3B0aW9ucz1Ob25lLAogICksCiAgX2Rlc2NyaXB0b3IuTWV0aG9kRGVzY3JpcHRvcigKICAgIG5hbWU9J19yZW1vdGVfcmVsb2FkJywKICAgIGZ1bGxfbmFtZT0nT25saW5lQWN0aW9uSGFuZGxlci5fcmVtb3RlX3JlbG9hZCcsCiAgICBpbmRleD0xLAogICAgY29udGFpbmluZ19zZXJ2aWNlPU5vbmUsCiAgICBpbnB1dF90eXBlPV9SRUxPQURSRVFVRVNULAogICAgb3V0cHV0X3R5cGU9X1JFTE9BRFJFU1BPTlNFLAogICAgb3B0aW9ucz1Ob25lLAogICksCiAgX2Rlc2NyaXB0b3IuTWV0aG9kRGVzY3JpcHRvcigKICAgIG5hbWU9J19oZWFsdGhfY2hlY2snLAogICAgZnVsbF9uYW1lPSdPbmxpbmVBY3Rpb25IYW5kbGVyLl9oZWFsdGhfY2hlY2snLAogICAgaW5kZXg9MiwKICAgIGNvbnRhaW5pbmdfc2VydmljZT1Ob25lLAogICAgaW5wdXRfdHlwZT1fSEVBTFRIQ0hFQ0tSRVFVRVNULAogICAgb3V0cHV0X3R5cGU9X0hFQUxUSENIRUNLUkVTUE9OU0UsCiAgICBvcHRpb25zPU5vbmUsCiAgKSwKXSkKX3N5bV9kYi5SZWdpc3RlclNlcnZpY2VEZXNjcmlwdG9yKF9PTkxJTkVBQ1RJT05IQU5ETEVSKQoKREVTQ1JJUFRPUi5zZXJ2aWNlc19ieV9uYW1lWydPbmxpbmVBY3Rpb25IYW5kbGVyJ10gPSBfT05MSU5FQUNUSU9OSEFORExFUgoKCl9CQVRDSEFDVElPTkhBTkRMRVIgPSBfZGVzY3JpcHRvci5TZXJ2aWNlRGVzY3JpcHRvcigKICBuYW1lPSdCYXRjaEFjdGlvbkhhbmRsZXInLAogIGZ1bGxfbmFtZT0nQmF0Y2hBY3Rpb25IYW5kbGVyJywKICBmaWxlPURFU0NSSVBUT1IsCiAgaW5kZXg9MSwKICBvcHRpb25zPU5vbmUsCiAgc2VyaWFsaXplZF9zdGFydD02MjMsCiAgc2VyaWFsaXplZF9lbmQ9ODIyLAogIG1ldGhvZHM9WwogIF9kZXNjcmlwdG9yLk1ldGhvZERlc2NyaXB0b3IoCiAgICBuYW1lPSdfcmVtb3RlX2V4ZWN1dGUnLAogICAgZnVsbF9uYW1lPSdCYXRjaEFjdGlvbkhhbmRsZXIuX3JlbW90ZV9leGVjdXRlJywKICAgIGluZGV4PTAsCiAgICBjb250YWluaW5nX3NlcnZpY2U9Tm9uZSwKICAgIGlucHV0X3R5cGU9X0JBVENIQUNUSU9OUkVRVUVTVCwKICAgIG91dHB1dF90eXBlPV9CQVRDSEFDVElPTlJFU1BPTlNFLAogICAgb3B0aW9ucz1Ob25lLAogICksCiAgX2Rlc2NyaXB0b3IuTWV0aG9kRGVzY3JpcHRvcigKICAgIG5hbWU9J19yZW1vdGVfcmVsb2FkJywKICAgIGZ1bGxfbmFtZT0nQmF0Y2hBY3Rpb25IYW5kbGVyLl9yZW1vdGVfcmVsb2FkJywKICAgIGluZGV4PTEsCiAgICBjb250YWluaW5nX3NlcnZpY2U9Tm9uZSwKICAgIGlucHV0X3R5cGU9X1JFTE9BRFJFUVVFU1QsCiAgICBvdXRwdXRfdHlwZT1fUkVMT0FEUkVTUE9OU0UsCiAgICBvcHRpb25zPU5vbmUsCiAgKSwKICBfZGVzY3JpcHRvci5NZXRob2REZXNjcmlwdG9yKAogICAgbmFtZT0nX2hlYWx0aF9jaGVjaycsCiAgICBmdWxsX25hbWU9J0JhdGNoQWN0aW9uSGFuZGxlci5faGVhbHRoX2NoZWNrJywKICAgIGluZGV4PTIsCiAgICBjb250YWluaW5nX3NlcnZpY2U9Tm9uZSwKICAgIGlucHV0X3R5cGU9X0hFQUxUSENIRUNLUkVRVUVTVCwKICAgIG91dHB1dF90eXBlPV9IRUFMVEhDSEVDS1JFU1BPTlNFLAogICAgb3B0aW9ucz1Ob25lLAogICksCl0pCl9zeW1fZGIuUmVnaXN0ZXJTZXJ2aWNlRGVzY3JpcHRvcihfQkFUQ0hBQ1RJT05IQU5ETEVSKQoKREVTQ1JJUFRPUi5zZXJ2aWNlc19ieV9uYW1lWydCYXRjaEFjdGlvbkhhbmRsZXInXSA9IF9CQVRDSEFDVElPTkhBTkRMRVIKCnRyeToKICAjIFRIRVNFIEVMRU1FTlRTIFdJTEwgQkUgREVQUkVDQVRFRC4KICAjIFBsZWFzZSB1c2UgdGhlIGdlbmVyYXRlZCAqX3BiMl9ncnBjLnB5IGZpbGVzIGluc3RlYWQuCiAgaW1wb3J0IGdycGMKICBmcm9tIGdycGMuYmV0YSBpbXBvcnQgaW1wbGVtZW50YXRpb25zIGFzIGJldGFfaW1wbGVtZW50YXRpb25zCiAgZnJvbSBncnBjLmJldGEgaW1wb3J0IGludGVyZmFjZXMgYXMgYmV0YV9pbnRlcmZhY2VzCiAgZnJvbSBncnBjLmZyYW1ld29yay5jb21tb24gaW1wb3J0IGNhcmRpbmFsaXR5CiAgZnJvbSBncnBjLmZyYW1ld29yay5pbnRlcmZhY2VzLmZhY2UgaW1wb3J0IHV0aWxpdGllcyBhcyBmYWNlX3V0aWxpdGllcwoKCiAgY2xhc3MgT25saW5lQWN0aW9uSGFuZGxlclN0dWIob2JqZWN0KToKICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgcGFzcwoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGFubmVsKToKICAgICAgIiIiQ29uc3RydWN0b3IuCgogICAgICBBcmdzOgogICAgICAgIGNoYW5uZWw6IEEgZ3JwYy5DaGFubmVsLgogICAgICAiIiIKICAgICAgc2VsZi5fcmVtb3RlX2V4ZWN1dGUgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICAgJy9PbmxpbmVBY3Rpb25IYW5kbGVyL19yZW1vdGVfZXhlY3V0ZScsCiAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9T25saW5lQWN0aW9uUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1PbmxpbmVBY3Rpb25SZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICAgKQogICAgICBzZWxmLl9yZW1vdGVfcmVsb2FkID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAgICcvT25saW5lQWN0aW9uSGFuZGxlci9fcmVtb3RlX3JlbG9hZCcsCiAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9UmVsb2FkUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1SZWxvYWRSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICAgKQogICAgICBzZWxmLl9oZWFsdGhfY2hlY2sgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICAgJy9PbmxpbmVBY3Rpb25IYW5kbGVyL19oZWFsdGhfY2hlY2snLAogICAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPUhlYWx0aENoZWNrUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1IZWFsdGhDaGVja1Jlc3BvbnNlLkZyb21TdHJpbmcsCiAgICAgICAgICApCgoKICBjbGFzcyBPbmxpbmVBY3Rpb25IYW5kbGVyU2VydmljZXIob2JqZWN0KToKICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgcGFzcwoKICAgIGRlZiBfcmVtb3RlX2V4ZWN1dGUoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgICBwYXNzCiAgICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICAgIGRlZiBfcmVtb3RlX3JlbG9hZChzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICAgIHBhc3MKICAgICAgY29udGV4dC5zZXRfY29kZShncnBjLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgICAgY29udGV4dC5zZXRfZGV0YWlscygnTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCgogICAgZGVmIF9oZWFsdGhfY2hlY2soc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgICBwYXNzCiAgICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKCiAgZGVmIGFkZF9PbmxpbmVBY3Rpb25IYW5kbGVyU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogICAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgICAnX3JlbW90ZV9leGVjdXRlJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICAgIHNlcnZpY2VyLl9yZW1vdGVfZXhlY3V0ZSwKICAgICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9T25saW5lQWN0aW9uUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPU9ubGluZUFjdGlvblJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgICksCiAgICAgICAgJ19yZW1vdGVfcmVsb2FkJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICAgIHNlcnZpY2VyLl9yZW1vdGVfcmVsb2FkLAogICAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1SZWxvYWRSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9UmVsb2FkUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICAgKSwKICAgICAgICAnX2hlYWx0aF9jaGVjayc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgICBzZXJ2aWNlci5faGVhbHRoX2NoZWNrLAogICAgICAgICAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcj1IZWFsdGhDaGVja1JlcXVlc3QuRnJvbVN0cmluZywKICAgICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1IZWFsdGhDaGVja1Jlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgICksCiAgICB9CiAgICBnZW5lcmljX2hhbmRsZXIgPSBncnBjLm1ldGhvZF9oYW5kbGVyc19nZW5lcmljX2hhbmRsZXIoCiAgICAgICAgJ09ubGluZUFjdGlvbkhhbmRsZXInLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogICAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCgoKICBjbGFzcyBCYXRjaEFjdGlvbkhhbmRsZXJTdHViKG9iamVjdCk6CiAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgIHBhc3MKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY2hhbm5lbCk6CiAgICAgICIiIkNvbnN0cnVjdG9yLgoKICAgICAgQXJnczoKICAgICAgICBjaGFubmVsOiBBIGdycGMuQ2hhbm5lbC4KICAgICAgIiIiCiAgICAgIHNlbGYuX3JlbW90ZV9leGVjdXRlID0gY2hhbm5lbC51bmFyeV91bmFyeSgKICAgICAgICAgICcvQmF0Y2hBY3Rpb25IYW5kbGVyL19yZW1vdGVfZXhlY3V0ZScsCiAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9QmF0Y2hBY3Rpb25SZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPUJhdGNoQWN0aW9uUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICAgICkKICAgICAgc2VsZi5fcmVtb3RlX3JlbG9hZCA9IGNoYW5uZWwudW5hcnlfdW5hcnkoCiAgICAgICAgICAnL0JhdGNoQWN0aW9uSGFuZGxlci9fcmVtb3RlX3JlbG9hZCcsCiAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9UmVsb2FkUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcj1SZWxvYWRSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAgICAgKQogICAgICBzZWxmLl9oZWFsdGhfY2hlY2sgPSBjaGFubmVsLnVuYXJ5X3VuYXJ5KAogICAgICAgICAgJy9CYXRjaEFjdGlvbkhhbmRsZXIvX2hlYWx0aF9jaGVjaycsCiAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9SGVhbHRoQ2hlY2tSZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgICAgcmVzcG9uc2VfZGVzZXJpYWxpemVyPUhlYWx0aENoZWNrUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgICAgICkKCgogIGNsYXNzIEJhdGNoQWN0aW9uSGFuZGxlclNlcnZpY2VyKG9iamVjdCk6CiAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgIHBhc3MKCiAgICBkZWYgX3JlbW90ZV9leGVjdXRlKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgICAgcGFzcwogICAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCiAgICBkZWYgX3JlbW90ZV9yZWxvYWQoc2VsZiwgcmVxdWVzdCwgY29udGV4dCk6CiAgICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgICBwYXNzCiAgICAgIGNvbnRleHQuc2V0X2NvZGUoZ3JwYy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICAgIGNvbnRleHQuc2V0X2RldGFpbHMoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZCEnKQoKICAgIGRlZiBfaGVhbHRoX2NoZWNrKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgICAgcGFzcwogICAgICBjb250ZXh0LnNldF9jb2RlKGdycGMuU3RhdHVzQ29kZS5VTklNUExFTUVOVEVEKQogICAgICBjb250ZXh0LnNldF9kZXRhaWxzKCdNZXRob2Qgbm90IGltcGxlbWVudGVkIScpCiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQhJykKCgogIGRlZiBhZGRfQmF0Y2hBY3Rpb25IYW5kbGVyU2VydmljZXJfdG9fc2VydmVyKHNlcnZpY2VyLCBzZXJ2ZXIpOgogICAgcnBjX21ldGhvZF9oYW5kbGVycyA9IHsKICAgICAgICAnX3JlbW90ZV9leGVjdXRlJzogZ3JwYy51bmFyeV91bmFyeV9ycGNfbWV0aG9kX2hhbmRsZXIoCiAgICAgICAgICAgIHNlcnZpY2VyLl9yZW1vdGVfZXhlY3V0ZSwKICAgICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9QmF0Y2hBY3Rpb25SZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9QmF0Y2hBY3Rpb25SZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICApLAogICAgICAgICdfcmVtb3RlX3JlbG9hZCc6IGdycGMudW5hcnlfdW5hcnlfcnBjX21ldGhvZF9oYW5kbGVyKAogICAgICAgICAgICBzZXJ2aWNlci5fcmVtb3RlX3JlbG9hZCwKICAgICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9UmVsb2FkUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPVJlbG9hZFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAgICksCiAgICAgICAgJ19oZWFsdGhfY2hlY2snOiBncnBjLnVuYXJ5X3VuYXJ5X3JwY19tZXRob2RfaGFuZGxlcigKICAgICAgICAgICAgc2VydmljZXIuX2hlYWx0aF9jaGVjaywKICAgICAgICAgICAgcmVxdWVzdF9kZXNlcmlhbGl6ZXI9SGVhbHRoQ2hlY2tSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9SGVhbHRoQ2hlY2tSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgICApLAogICAgfQogICAgZ2VuZXJpY19oYW5kbGVyID0gZ3JwYy5tZXRob2RfaGFuZGxlcnNfZ2VuZXJpY19oYW5kbGVyKAogICAgICAgICdCYXRjaEFjdGlvbkhhbmRsZXInLCBycGNfbWV0aG9kX2hhbmRsZXJzKQogICAgc2VydmVyLmFkZF9nZW5lcmljX3JwY19oYW5kbGVycygoZ2VuZXJpY19oYW5kbGVyLCkpCgoKICBjbGFzcyBCZXRhT25saW5lQWN0aW9uSGFuZGxlclNlcnZpY2VyKG9iamVjdCk6CiAgICAiIiJUaGUgQmV0YSBBUEkgaXMgZGVwcmVjYXRlZCBmb3IgMC4xNS4wIGFuZCBsYXRlci4KCiAgICBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIEdBIEFQSSAoY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGluIHRoaXMKICAgIGZpbGUgbm90IG1hcmtlZCBiZXRhKSBmb3IgYWxsIGZ1cnRoZXIgcHVycG9zZXMuIFRoaXMgY2xhc3Mgd2FzIGdlbmVyYXRlZAogICAgb25seSB0byBlYXNlIHRyYW5zaXRpb24gZnJvbSBncnBjaW88MC4xNS4wIHRvIGdycGNpbz49MC4xNS4wLiIiIgogICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICBwYXNzCiAgICBkZWYgX3JlbW90ZV9leGVjdXRlKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgICAgcGFzcwogICAgICBjb250ZXh0LmNvZGUoYmV0YV9pbnRlcmZhY2VzLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGRlZiBfcmVtb3RlX3JlbG9hZChzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICAgIHBhc3MKICAgICAgY29udGV4dC5jb2RlKGJldGFfaW50ZXJmYWNlcy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBkZWYgX2hlYWx0aF9jaGVjayhzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICAgIHBhc3MKICAgICAgY29udGV4dC5jb2RlKGJldGFfaW50ZXJmYWNlcy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCgoKICBjbGFzcyBCZXRhT25saW5lQWN0aW9uSGFuZGxlclN0dWIob2JqZWN0KToKICAgICIiIlRoZSBCZXRhIEFQSSBpcyBkZXByZWNhdGVkIGZvciAwLjE1LjAgYW5kIGxhdGVyLgoKICAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgR0EgQVBJIChjbGFzc2VzIGFuZCBmdW5jdGlvbnMgaW4gdGhpcwogICAgZmlsZSBub3QgbWFya2VkIGJldGEpIGZvciBhbGwgZnVydGhlciBwdXJwb3Nlcy4gVGhpcyBjbGFzcyB3YXMgZ2VuZXJhdGVkCiAgICBvbmx5IHRvIGVhc2UgdHJhbnNpdGlvbiBmcm9tIGdycGNpbzwwLjE1LjAgdG8gZ3JwY2lvPj0wLjE1LjAuIiIiCiAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgIHBhc3MKICAgIGRlZiBfcmVtb3RlX2V4ZWN1dGUoc2VsZiwgcmVxdWVzdCwgdGltZW91dCwgbWV0YWRhdGE9Tm9uZSwgd2l0aF9jYWxsPUZhbHNlLCBwcm90b2NvbF9vcHRpb25zPU5vbmUpOgogICAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgICAgcGFzcwogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKICAgIF9yZW1vdGVfZXhlY3V0ZS5mdXR1cmUgPSBOb25lCiAgICBkZWYgX3JlbW90ZV9yZWxvYWQoc2VsZiwgcmVxdWVzdCwgdGltZW91dCwgbWV0YWRhdGE9Tm9uZSwgd2l0aF9jYWxsPUZhbHNlLCBwcm90b2NvbF9vcHRpb25zPU5vbmUpOgogICAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgICAgcGFzcwogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKICAgIF9yZW1vdGVfcmVsb2FkLmZ1dHVyZSA9IE5vbmUKICAgIGRlZiBfaGVhbHRoX2NoZWNrKHNlbGYsIHJlcXVlc3QsIHRpbWVvdXQsIG1ldGFkYXRhPU5vbmUsIHdpdGhfY2FsbD1GYWxzZSwgcHJvdG9jb2xfb3B0aW9ucz1Ob25lKToKICAgICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICAgIHBhc3MKICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCiAgICBfaGVhbHRoX2NoZWNrLmZ1dHVyZSA9IE5vbmUKCgogIGRlZiBiZXRhX2NyZWF0ZV9PbmxpbmVBY3Rpb25IYW5kbGVyX3NlcnZlcihzZXJ2aWNlciwgcG9vbD1Ob25lLCBwb29sX3NpemU9Tm9uZSwgZGVmYXVsdF90aW1lb3V0PU5vbmUsIG1heGltdW1fdGltZW91dD1Ob25lKToKICAgICIiIlRoZSBCZXRhIEFQSSBpcyBkZXByZWNhdGVkIGZvciAwLjE1LjAgYW5kIGxhdGVyLgoKICAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgR0EgQVBJIChjbGFzc2VzIGFuZCBmdW5jdGlvbnMgaW4gdGhpcwogICAgZmlsZSBub3QgbWFya2VkIGJldGEpIGZvciBhbGwgZnVydGhlciBwdXJwb3Nlcy4gVGhpcyBmdW5jdGlvbiB3YXMKICAgIGdlbmVyYXRlZCBvbmx5IHRvIGVhc2UgdHJhbnNpdGlvbiBmcm9tIGdycGNpbzwwLjE1LjAgdG8gZ3JwY2lvPj0wLjE1LjAiIiIKICAgIHJlcXVlc3RfZGVzZXJpYWxpemVycyA9IHsKICAgICAgKCdPbmxpbmVBY3Rpb25IYW5kbGVyJywgJ19oZWFsdGhfY2hlY2snKTogSGVhbHRoQ2hlY2tSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICgnT25saW5lQWN0aW9uSGFuZGxlcicsICdfcmVtb3RlX2V4ZWN1dGUnKTogT25saW5lQWN0aW9uUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgICAoJ09ubGluZUFjdGlvbkhhbmRsZXInLCAnX3JlbW90ZV9yZWxvYWQnKTogUmVsb2FkUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgfQogICAgcmVzcG9uc2Vfc2VyaWFsaXplcnMgPSB7CiAgICAgICgnT25saW5lQWN0aW9uSGFuZGxlcicsICdfaGVhbHRoX2NoZWNrJyk6IEhlYWx0aENoZWNrUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICgnT25saW5lQWN0aW9uSGFuZGxlcicsICdfcmVtb3RlX2V4ZWN1dGUnKTogT25saW5lQWN0aW9uUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICgnT25saW5lQWN0aW9uSGFuZGxlcicsICdfcmVtb3RlX3JlbG9hZCcpOiBSZWxvYWRSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgIH0KICAgIG1ldGhvZF9pbXBsZW1lbnRhdGlvbnMgPSB7CiAgICAgICgnT25saW5lQWN0aW9uSGFuZGxlcicsICdfaGVhbHRoX2NoZWNrJyk6IGZhY2VfdXRpbGl0aWVzLnVuYXJ5X3VuYXJ5X2lubGluZShzZXJ2aWNlci5faGVhbHRoX2NoZWNrKSwKICAgICAgKCdPbmxpbmVBY3Rpb25IYW5kbGVyJywgJ19yZW1vdGVfZXhlY3V0ZScpOiBmYWNlX3V0aWxpdGllcy51bmFyeV91bmFyeV9pbmxpbmUoc2VydmljZXIuX3JlbW90ZV9leGVjdXRlKSwKICAgICAgKCdPbmxpbmVBY3Rpb25IYW5kbGVyJywgJ19yZW1vdGVfcmVsb2FkJyk6IGZhY2VfdXRpbGl0aWVzLnVuYXJ5X3VuYXJ5X2lubGluZShzZXJ2aWNlci5fcmVtb3RlX3JlbG9hZCksCiAgICB9CiAgICBzZXJ2ZXJfb3B0aW9ucyA9IGJldGFfaW1wbGVtZW50YXRpb25zLnNlcnZlcl9vcHRpb25zKHJlcXVlc3RfZGVzZXJpYWxpemVycz1yZXF1ZXN0X2Rlc2VyaWFsaXplcnMsIHJlc3BvbnNlX3NlcmlhbGl6ZXJzPXJlc3BvbnNlX3NlcmlhbGl6ZXJzLCB0aHJlYWRfcG9vbD1wb29sLCB0aHJlYWRfcG9vbF9zaXplPXBvb2xfc2l6ZSwgZGVmYXVsdF90aW1lb3V0PWRlZmF1bHRfdGltZW91dCwgbWF4aW11bV90aW1lb3V0PW1heGltdW1fdGltZW91dCkKICAgIHJldHVybiBiZXRhX2ltcGxlbWVudGF0aW9ucy5zZXJ2ZXIobWV0aG9kX2ltcGxlbWVudGF0aW9ucywgb3B0aW9ucz1zZXJ2ZXJfb3B0aW9ucykKCgogIGRlZiBiZXRhX2NyZWF0ZV9PbmxpbmVBY3Rpb25IYW5kbGVyX3N0dWIoY2hhbm5lbCwgaG9zdD1Ob25lLCBtZXRhZGF0YV90cmFuc2Zvcm1lcj1Ob25lLCBwb29sPU5vbmUsIHBvb2xfc2l6ZT1Ob25lKToKICAgICIiIlRoZSBCZXRhIEFQSSBpcyBkZXByZWNhdGVkIGZvciAwLjE1LjAgYW5kIGxhdGVyLgoKICAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgR0EgQVBJIChjbGFzc2VzIGFuZCBmdW5jdGlvbnMgaW4gdGhpcwogICAgZmlsZSBub3QgbWFya2VkIGJldGEpIGZvciBhbGwgZnVydGhlciBwdXJwb3Nlcy4gVGhpcyBmdW5jdGlvbiB3YXMKICAgIGdlbmVyYXRlZCBvbmx5IHRvIGVhc2UgdHJhbnNpdGlvbiBmcm9tIGdycGNpbzwwLjE1LjAgdG8gZ3JwY2lvPj0wLjE1LjAiIiIKICAgIHJlcXVlc3Rfc2VyaWFsaXplcnMgPSB7CiAgICAgICgnT25saW5lQWN0aW9uSGFuZGxlcicsICdfaGVhbHRoX2NoZWNrJyk6IEhlYWx0aENoZWNrUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKCdPbmxpbmVBY3Rpb25IYW5kbGVyJywgJ19yZW1vdGVfZXhlY3V0ZScpOiBPbmxpbmVBY3Rpb25SZXF1ZXN0LlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgICAoJ09ubGluZUFjdGlvbkhhbmRsZXInLCAnX3JlbW90ZV9yZWxvYWQnKTogUmVsb2FkUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgIH0KICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcnMgPSB7CiAgICAgICgnT25saW5lQWN0aW9uSGFuZGxlcicsICdfaGVhbHRoX2NoZWNrJyk6IEhlYWx0aENoZWNrUmVzcG9uc2UuRnJvbVN0cmluZywKICAgICAgKCdPbmxpbmVBY3Rpb25IYW5kbGVyJywgJ19yZW1vdGVfZXhlY3V0ZScpOiBPbmxpbmVBY3Rpb25SZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAoJ09ubGluZUFjdGlvbkhhbmRsZXInLCAnX3JlbW90ZV9yZWxvYWQnKTogUmVsb2FkUmVzcG9uc2UuRnJvbVN0cmluZywKICAgIH0KICAgIGNhcmRpbmFsaXRpZXMgPSB7CiAgICAgICdfaGVhbHRoX2NoZWNrJzogY2FyZGluYWxpdHkuQ2FyZGluYWxpdHkuVU5BUllfVU5BUlksCiAgICAgICdfcmVtb3RlX2V4ZWN1dGUnOiBjYXJkaW5hbGl0eS5DYXJkaW5hbGl0eS5VTkFSWV9VTkFSWSwKICAgICAgJ19yZW1vdGVfcmVsb2FkJzogY2FyZGluYWxpdHkuQ2FyZGluYWxpdHkuVU5BUllfVU5BUlksCiAgICB9CiAgICBzdHViX29wdGlvbnMgPSBiZXRhX2ltcGxlbWVudGF0aW9ucy5zdHViX29wdGlvbnMoaG9zdD1ob3N0LCBtZXRhZGF0YV90cmFuc2Zvcm1lcj1tZXRhZGF0YV90cmFuc2Zvcm1lciwgcmVxdWVzdF9zZXJpYWxpemVycz1yZXF1ZXN0X3NlcmlhbGl6ZXJzLCByZXNwb25zZV9kZXNlcmlhbGl6ZXJzPXJlc3BvbnNlX2Rlc2VyaWFsaXplcnMsIHRocmVhZF9wb29sPXBvb2wsIHRocmVhZF9wb29sX3NpemU9cG9vbF9zaXplKQogICAgcmV0dXJuIGJldGFfaW1wbGVtZW50YXRpb25zLmR5bmFtaWNfc3R1YihjaGFubmVsLCAnT25saW5lQWN0aW9uSGFuZGxlcicsIGNhcmRpbmFsaXRpZXMsIG9wdGlvbnM9c3R1Yl9vcHRpb25zKQoKCiAgY2xhc3MgQmV0YUJhdGNoQWN0aW9uSGFuZGxlclNlcnZpY2VyKG9iamVjdCk6CiAgICAiIiJUaGUgQmV0YSBBUEkgaXMgZGVwcmVjYXRlZCBmb3IgMC4xNS4wIGFuZCBsYXRlci4KCiAgICBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIEdBIEFQSSAoY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGluIHRoaXMKICAgIGZpbGUgbm90IG1hcmtlZCBiZXRhKSBmb3IgYWxsIGZ1cnRoZXIgcHVycG9zZXMuIFRoaXMgY2xhc3Mgd2FzIGdlbmVyYXRlZAogICAgb25seSB0byBlYXNlIHRyYW5zaXRpb24gZnJvbSBncnBjaW88MC4xNS4wIHRvIGdycGNpbz49MC4xNS4wLiIiIgogICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICBwYXNzCiAgICBkZWYgX3JlbW90ZV9leGVjdXRlKHNlbGYsIHJlcXVlc3QsIGNvbnRleHQpOgogICAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgICAgcGFzcwogICAgICBjb250ZXh0LmNvZGUoYmV0YV9pbnRlcmZhY2VzLlN0YXR1c0NvZGUuVU5JTVBMRU1FTlRFRCkKICAgIGRlZiBfcmVtb3RlX3JlbG9hZChzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICAgIHBhc3MKICAgICAgY29udGV4dC5jb2RlKGJldGFfaW50ZXJmYWNlcy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCiAgICBkZWYgX2hlYWx0aF9jaGVjayhzZWxmLCByZXF1ZXN0LCBjb250ZXh0KToKICAgICAgIyBtaXNzaW5nIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBjb21tZW50IGluIC5wcm90byBmaWxlCiAgICAgIHBhc3MKICAgICAgY29udGV4dC5jb2RlKGJldGFfaW50ZXJmYWNlcy5TdGF0dXNDb2RlLlVOSU1QTEVNRU5URUQpCgoKICBjbGFzcyBCZXRhQmF0Y2hBY3Rpb25IYW5kbGVyU3R1YihvYmplY3QpOgogICAgIiIiVGhlIEJldGEgQVBJIGlzIGRlcHJlY2F0ZWQgZm9yIDAuMTUuMCBhbmQgbGF0ZXIuCgogICAgSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBHQSBBUEkgKGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBpbiB0aGlzCiAgICBmaWxlIG5vdCBtYXJrZWQgYmV0YSkgZm9yIGFsbCBmdXJ0aGVyIHB1cnBvc2VzLiBUaGlzIGNsYXNzIHdhcyBnZW5lcmF0ZWQKICAgIG9ubHkgdG8gZWFzZSB0cmFuc2l0aW9uIGZyb20gZ3JwY2lvPDAuMTUuMCB0byBncnBjaW8+PTAuMTUuMC4iIiIKICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgcGFzcwogICAgZGVmIF9yZW1vdGVfZXhlY3V0ZShzZWxmLCByZXF1ZXN0LCB0aW1lb3V0LCBtZXRhZGF0YT1Ob25lLCB3aXRoX2NhbGw9RmFsc2UsIHByb3RvY29sX29wdGlvbnM9Tm9uZSk6CiAgICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgICBwYXNzCiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogICAgX3JlbW90ZV9leGVjdXRlLmZ1dHVyZSA9IE5vbmUKICAgIGRlZiBfcmVtb3RlX3JlbG9hZChzZWxmLCByZXF1ZXN0LCB0aW1lb3V0LCBtZXRhZGF0YT1Ob25lLCB3aXRoX2NhbGw9RmFsc2UsIHByb3RvY29sX29wdGlvbnM9Tm9uZSk6CiAgICAgICMgbWlzc2luZyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gY29tbWVudCBpbiAucHJvdG8gZmlsZQogICAgICBwYXNzCiAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogICAgX3JlbW90ZV9yZWxvYWQuZnV0dXJlID0gTm9uZQogICAgZGVmIF9oZWFsdGhfY2hlY2soc2VsZiwgcmVxdWVzdCwgdGltZW91dCwgbWV0YWRhdGE9Tm9uZSwgd2l0aF9jYWxsPUZhbHNlLCBwcm90b2NvbF9vcHRpb25zPU5vbmUpOgogICAgICAjIG1pc3NpbmcgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGNvbW1lbnQgaW4gLnByb3RvIGZpbGUKICAgICAgcGFzcwogICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKICAgIF9oZWFsdGhfY2hlY2suZnV0dXJlID0gTm9uZQoKCiAgZGVmIGJldGFfY3JlYXRlX0JhdGNoQWN0aW9uSGFuZGxlcl9zZXJ2ZXIoc2VydmljZXIsIHBvb2w9Tm9uZSwgcG9vbF9zaXplPU5vbmUsIGRlZmF1bHRfdGltZW91dD1Ob25lLCBtYXhpbXVtX3RpbWVvdXQ9Tm9uZSk6CiAgICAiIiJUaGUgQmV0YSBBUEkgaXMgZGVwcmVjYXRlZCBmb3IgMC4xNS4wIGFuZCBsYXRlci4KCiAgICBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIEdBIEFQSSAoY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGluIHRoaXMKICAgIGZpbGUgbm90IG1hcmtlZCBiZXRhKSBmb3IgYWxsIGZ1cnRoZXIgcHVycG9zZXMuIFRoaXMgZnVuY3Rpb24gd2FzCiAgICBnZW5lcmF0ZWQgb25seSB0byBlYXNlIHRyYW5zaXRpb24gZnJvbSBncnBjaW88MC4xNS4wIHRvIGdycGNpbz49MC4xNS4wIiIiCiAgICByZXF1ZXN0X2Rlc2VyaWFsaXplcnMgPSB7CiAgICAgICgnQmF0Y2hBY3Rpb25IYW5kbGVyJywgJ19oZWFsdGhfY2hlY2snKTogSGVhbHRoQ2hlY2tSZXF1ZXN0LkZyb21TdHJpbmcsCiAgICAgICgnQmF0Y2hBY3Rpb25IYW5kbGVyJywgJ19yZW1vdGVfZXhlY3V0ZScpOiBCYXRjaEFjdGlvblJlcXVlc3QuRnJvbVN0cmluZywKICAgICAgKCdCYXRjaEFjdGlvbkhhbmRsZXInLCAnX3JlbW90ZV9yZWxvYWQnKTogUmVsb2FkUmVxdWVzdC5Gcm9tU3RyaW5nLAogICAgfQogICAgcmVzcG9uc2Vfc2VyaWFsaXplcnMgPSB7CiAgICAgICgnQmF0Y2hBY3Rpb25IYW5kbGVyJywgJ19oZWFsdGhfY2hlY2snKTogSGVhbHRoQ2hlY2tSZXNwb25zZS5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKCdCYXRjaEFjdGlvbkhhbmRsZXInLCAnX3JlbW90ZV9leGVjdXRlJyk6IEJhdGNoQWN0aW9uUmVzcG9uc2UuU2VyaWFsaXplVG9TdHJpbmcsCiAgICAgICgnQmF0Y2hBY3Rpb25IYW5kbGVyJywgJ19yZW1vdGVfcmVsb2FkJyk6IFJlbG9hZFJlc3BvbnNlLlNlcmlhbGl6ZVRvU3RyaW5nLAogICAgfQogICAgbWV0aG9kX2ltcGxlbWVudGF0aW9ucyA9IHsKICAgICAgKCdCYXRjaEFjdGlvbkhhbmRsZXInLCAnX2hlYWx0aF9jaGVjaycpOiBmYWNlX3V0aWxpdGllcy51bmFyeV91bmFyeV9pbmxpbmUoc2VydmljZXIuX2hlYWx0aF9jaGVjayksCiAgICAgICgnQmF0Y2hBY3Rpb25IYW5kbGVyJywgJ19yZW1vdGVfZXhlY3V0ZScpOiBmYWNlX3V0aWxpdGllcy51bmFyeV91bmFyeV9pbmxpbmUoc2VydmljZXIuX3JlbW90ZV9leGVjdXRlKSwKICAgICAgKCdCYXRjaEFjdGlvbkhhbmRsZXInLCAnX3JlbW90ZV9yZWxvYWQnKTogZmFjZV91dGlsaXRpZXMudW5hcnlfdW5hcnlfaW5saW5lKHNlcnZpY2VyLl9yZW1vdGVfcmVsb2FkKSwKICAgIH0KICAgIHNlcnZlcl9vcHRpb25zID0gYmV0YV9pbXBsZW1lbnRhdGlvbnMuc2VydmVyX29wdGlvbnMocmVxdWVzdF9kZXNlcmlhbGl6ZXJzPXJlcXVlc3RfZGVzZXJpYWxpemVycywgcmVzcG9uc2Vfc2VyaWFsaXplcnM9cmVzcG9uc2Vfc2VyaWFsaXplcnMsIHRocmVhZF9wb29sPXBvb2wsIHRocmVhZF9wb29sX3NpemU9cG9vbF9zaXplLCBkZWZhdWx0X3RpbWVvdXQ9ZGVmYXVsdF90aW1lb3V0LCBtYXhpbXVtX3RpbWVvdXQ9bWF4aW11bV90aW1lb3V0KQogICAgcmV0dXJuIGJldGFfaW1wbGVtZW50YXRpb25zLnNlcnZlcihtZXRob2RfaW1wbGVtZW50YXRpb25zLCBvcHRpb25zPXNlcnZlcl9vcHRpb25zKQoKCiAgZGVmIGJldGFfY3JlYXRlX0JhdGNoQWN0aW9uSGFuZGxlcl9zdHViKGNoYW5uZWwsIGhvc3Q9Tm9uZSwgbWV0YWRhdGFfdHJhbnNmb3JtZXI9Tm9uZSwgcG9vbD1Ob25lLCBwb29sX3NpemU9Tm9uZSk6CiAgICAiIiJUaGUgQmV0YSBBUEkgaXMgZGVwcmVjYXRlZCBmb3IgMC4xNS4wIGFuZCBsYXRlci4KCiAgICBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIEdBIEFQSSAoY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGluIHRoaXMKICAgIGZpbGUgbm90IG1hcmtlZCBiZXRhKSBmb3IgYWxsIGZ1cnRoZXIgcHVycG9zZXMuIFRoaXMgZnVuY3Rpb24gd2FzCiAgICBnZW5lcmF0ZWQgb25seSB0byBlYXNlIHRyYW5zaXRpb24gZnJvbSBncnBjaW88MC4xNS4wIHRvIGdycGNpbz49MC4xNS4wIiIiCiAgICByZXF1ZXN0X3NlcmlhbGl6ZXJzID0gewogICAgICAoJ0JhdGNoQWN0aW9uSGFuZGxlcicsICdfaGVhbHRoX2NoZWNrJyk6IEhlYWx0aENoZWNrUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKCdCYXRjaEFjdGlvbkhhbmRsZXInLCAnX3JlbW90ZV9leGVjdXRlJyk6IEJhdGNoQWN0aW9uUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgICAgKCdCYXRjaEFjdGlvbkhhbmRsZXInLCAnX3JlbW90ZV9yZWxvYWQnKTogUmVsb2FkUmVxdWVzdC5TZXJpYWxpemVUb1N0cmluZywKICAgIH0KICAgIHJlc3BvbnNlX2Rlc2VyaWFsaXplcnMgPSB7CiAgICAgICgnQmF0Y2hBY3Rpb25IYW5kbGVyJywgJ19oZWFsdGhfY2hlY2snKTogSGVhbHRoQ2hlY2tSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAoJ0JhdGNoQWN0aW9uSGFuZGxlcicsICdfcmVtb3RlX2V4ZWN1dGUnKTogQmF0Y2hBY3Rpb25SZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgICAoJ0JhdGNoQWN0aW9uSGFuZGxlcicsICdfcmVtb3RlX3JlbG9hZCcpOiBSZWxvYWRSZXNwb25zZS5Gcm9tU3RyaW5nLAogICAgfQogICAgY2FyZGluYWxpdGllcyA9IHsKICAgICAgJ19oZWFsdGhfY2hlY2snOiBjYXJkaW5hbGl0eS5DYXJkaW5hbGl0eS5VTkFSWV9VTkFSWSwKICAgICAgJ19yZW1vdGVfZXhlY3V0ZSc6IGNhcmRpbmFsaXR5LkNhcmRpbmFsaXR5LlVOQVJZX1VOQVJZLAogICAgICAnX3JlbW90ZV9yZWxvYWQnOiBjYXJkaW5hbGl0eS5DYXJkaW5hbGl0eS5VTkFSWV9VTkFSWSwKICAgIH0KICAgIHN0dWJfb3B0aW9ucyA9IGJldGFfaW1wbGVtZW50YXRpb25zLnN0dWJfb3B0aW9ucyhob3N0PWhvc3QsIG1ldGFkYXRhX3RyYW5zZm9ybWVyPW1ldGFkYXRhX3RyYW5zZm9ybWVyLCByZXF1ZXN0X3NlcmlhbGl6ZXJzPXJlcXVlc3Rfc2VyaWFsaXplcnMsIHJlc3BvbnNlX2Rlc2VyaWFsaXplcnM9cmVzcG9uc2VfZGVzZXJpYWxpemVycywgdGhyZWFkX3Bvb2w9cG9vbCwgdGhyZWFkX3Bvb2xfc2l6ZT1wb29sX3NpemUpCiAgICByZXR1cm4gYmV0YV9pbXBsZW1lbnRhdGlvbnMuZHluYW1pY19zdHViKGNoYW5uZWwsICdCYXRjaEFjdGlvbkhhbmRsZXInLCBjYXJkaW5hbGl0aWVzLCBvcHRpb25zPXN0dWJfb3B0aW9ucykKZXhjZXB0IEltcG9ydEVycm9yOgogIHBhc3MKIyBAQHByb3RvY19pbnNlcnRpb25fcG9pbnQobW9kdWxlX3Njb3BlKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL3N0dWJzL2FjdGlvbnNfcGIyLnB5YwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDU2MzA3IDEzNDYzNDQzMjA0IDAzMDcyNAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8w0KMrfNXGMAAAAAAAAAACwAAABAAAAAc74OAABkAABkAQBsAABaAABlAABqAQBkAgAZZAMAawAAcigAZAQAhAAAcC4AZAUAhAAAWgIAZAAAZAYAbAMAbQQAWgUAAWQAAGQHAGwDAG0GAFoHAAFkAABkCABsAwBtCABaCQABZAAAZAkAbAMAbQoAWgsAAWQAAGQKAGwDAG0MAFoMAAFlCwBqDQCDAABaDgBlBQBqDwBkCwBkDABkDQBkDgBkDwBkEABkEQBlAgBkEgCDAQCDAARaEABlBQBqEQBkCwBkEwBkFABkFQBkFgBkAQBkFwBlEABkGABlBQBqEwBkCwBkGQBkGgBkAgBkGwBkAgBkHABkAQBkHQBkAQCDAAVlBQBqEwBkCwBkHgBkGgBkHwBkGwBkHwBkHABkAQBkHQBkAQCDAAVnAgBkIABkAQBkHABkAQBkIQBkIgBkIwBkJACDAAlaFABlDgBqFQBlFACDAQABZQUAahYAZAsAZCUAZBQAZCUAZBYAZAEAZBcAZRAAZCAAZAEAZCYAZQUAahcAZAsAZCcAZBQAZCgAZBoAZAIAZBsAZB8AZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZQUAahcAZAsAZDMAZBQAZDQAZBoAZB8AZBsAZDUAZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZwIAZDYAZwAAZDcAZwAAZDgAZwAAZBwAZAEAZDkAZRgAZA8AZBAAZDoAZwAAZDsAZwAAZCEAZDwAZCMAZD0AgwAQWhoAZQUAahYAZAsAZD4AZBQAZD4AZBYAZAEAZBcAZRAAZCAAZAEAZCYAZQUAahcAZAsAZCcAZBQAZD8AZBoAZAIAZBsAZB8AZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZwEAZDYAZwAAZDcAZwAAZDgAZwAAZBwAZAEAZDkAZRgAZA8AZBAAZDoAZwAAZDsAZwAAZCEAZEAAZCMAZEEAgwAQWhsAZQUAahYAZAsAZEIAZBQAZEIAZBYAZAEAZBcAZRAAZCAAZAEAZCYAZQUAahcAZAsAZDMAZBQAZEMAZBoAZAIAZBsAZB8AZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZwEAZDYAZwAAZDcAZwAAZDgAZwAAZBwAZAEAZDkAZRgAZA8AZBAAZDoAZwAAZDsAZwAAZCEAZEQAZCMAZEUAgwAQWhwAZQUAahYAZAsAZEYAZBQAZEYAZBYAZAEAZBcAZRAAZCAAZAEAZCYAZQUAahcAZAsAZCcAZBQAZEcAZBoAZAIAZBsAZB8AZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZwEAZDYAZwAAZDcAZwAAZDgAZwAAZBwAZAEAZDkAZRgAZA8AZBAAZDoAZwAAZDsAZwAAZCEAZEgAZCMAZEkAgwAQWh0AZQUAahYAZAsAZEoAZBQAZEoAZBYAZAEAZBcAZRAAZCAAZAEAZCYAZQUAahcAZAsAZEsAZBQAZEwAZBoAZAIAZBsAZB8AZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZQUAahcAZAsAZE0AZBQAZE4AZBoAZB8AZBsAZDUAZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZwIAZDYAZwAAZDcAZwAAZDgAZwAAZBwAZAEAZDkAZRgAZA8AZBAAZDoAZwAAZDsAZwAAZCEAZE8AZCMAZFAAgwAQWh4AZQUAahYAZAsAZFEAZBQAZFEAZBYAZAEAZBcAZRAAZCAAZAEAZCYAZQUAahcAZAsAZCcAZBQAZFIAZBoAZAIAZBsAZB8AZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZwEAZDYAZwAAZDcAZwAAZDgAZwAAZBwAZAEAZDkAZRgAZA8AZBAAZDoAZwAAZDsAZwAAZCEAZFMAZCMAZFQAgwAQWh8AZQUAahYAZAsAZFUAZBQAZFUAZBYAZAEAZBcAZRAAZCAAZAEAZCYAZQUAahcAZAsAZE0AZBQAZFYAZBoAZAIAZBsAZDUAZB0AZCkAZCoAZCkAZCsAZB8AZCwAZRgAZC0AZQIAZA4AgwEAahkAZC4AgwEAZC8AZAEAZDAAZAEAZCAAZAEAZDEAZRgAZDIAZAEAZBwAZAEAgwAPZwEAZDYAZwAAZDcAZwAAZDgAZwAAZBwAZAEAZDkAZRgAZA8AZBAAZDoAZwAAZDsAZwAAZCEAZFcAZCMAZFgAgwAQWiAAZQUAahYAZAsAZFkAZBQAZFkAZBYAZAEAZBcAZRAAZCAAZAEAZCYAZQUAahcAZAsAZFoAZBQAZFsAZBoAZAIAZBsAZB8AZB0AZFwAZCoAZF0AZCsA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AGxhdGluMSgBAAAAdAYAAABlbmNvZGUoAQAAAFIAAAAAKAAAAAAoAAAAAHNRAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL3N0dWJzL2FjdGlvbnNfcGIyLnB5UgEAAAAFAAAAcwAAAAAoAQAAAHQKAAAAZGVzY3JpcHRvcigBAAAAdAcAAABtZXNzYWdlKAEAAAB0CgAAAHJlZmxlY3Rpb24oAQAAAHQPAAAAc3ltYm9sX2RhdGFiYXNlKAEAAAB0DgAAAGRlc2NyaXB0b3JfcGIydAQAAABuYW1lcw0AAABhY3Rpb25zLnByb3RvdAcAAABwYWNrYWdldAAAAAB0BgAAAHN5bnRheHQGAAAAcHJvdG8zdA0AAABzZXJpYWxpemVkX3Bicz4DAAAKDWFjdGlvbnMucHJvdG8iNgoTT25saW5lQWN0aW9uUmVxdWVzdBIPCgdtZXNzYWdlGAEgASgJEg4KBnBhcmFtcxgCIAEoCSInChRPbmxpbmVBY3Rpb25SZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIiQKEkJhdGNoQWN0aW9uUmVxdWVzdBIOCgZwYXJhbXMYASABKAkiJgoTQmF0Y2hBY3Rpb25SZXNwb25zZRIPCgdtZXNzYWdlGAEgASgJIjQKDVJlbG9hZFJlcXVlc3QSEAoIcHJvdG9jb2wYASABKAkSEQoJYXJ0aWZhY3RzGAIgASgJIiEKDlJlbG9hZFJlc3BvbnNlEg8KB21lc3NhZ2UYASABKAkiJwoSSGVhbHRoQ2hlY2tSZXF1ZXN0EhEKCWFydGlmYWN0cxgCIAEoCSJdChNIZWFsdGhDaGVja1Jlc3BvbnNlEisKBnN0YXR1cxgBIAEoDjIbLkhlYWx0aENoZWNrUmVzcG9uc2UuU3RhdHVzIhkKBlN0YXR1cxIGCgJPSxAAEgcKA05PSxABMsoBChNPbmxpbmVBY3Rpb25IYW5kbGVyEkAKD19yZW1vdGVfZXhlY3V0ZRIULk9ubGluZUFjdGlvblJlcXVlc3QaFS5PbmxpbmVBY3Rpb25SZXNwb25zZSIAEjMKDl9yZW1vdGVfcmVsb2FkEg4uUmVsb2FkUmVxdWVzdBoPLlJlbG9hZFJlc3BvbnNlIgASPAoNX2hlYWx0aF9jaGVjaxITLkhlYWx0aENoZWNrUmVxdWVzdBoULkhlYWx0aENoZWNrUmVzcG9uc2UiADLHAQoSQmF0Y2hBY3Rpb25IYW5kbGVyEj4KD19yZW1vdGVfZXhlY3V0ZRITLkJhdGNoQWN0aW9uUmVxdWVzdBoULkJhdGNoQWN0aW9uUmVzcG9uc2UiABIzCg5fcmVtb3RlX3JlbG9hZBIOLlJlbG9hZFJlcXVlc3QaDy5SZWxvYWRSZXNwb25zZSIAEjwKDV9oZWFsdGhfY2hlY2sSEy5IZWFsdGhDaGVja1JlcXVlc3QaFC5IZWFsdGhDaGVja1Jlc3BvbnNlIgBiBnByb3RvM3QGAAAAU3RhdHVzdAkAAABmdWxsX25hbWVzGgAAAEhlYWx0aENoZWNrUmVzcG9uc2UuU3RhdHVzdAgAAABmaWxlbmFtZXQEAAAAZmlsZXQGAAAAdmFsdWVzdAIAAABPS3QFAAAAaW5kZXh0BgAAAG51bWJlcnQHAAAAb3B0aW9uc3QEAAAAdHlwZXQDAAAATk9LaQEAAAB0DwAAAGNvbnRhaW5pbmdfdHlwZXQQAAAAc2VyaWFsaXplZF9zdGFydGmGAQAAdA4AAABzZXJpYWxpemVkX2VuZGmfAQAAdBMAAABPbmxpbmVBY3Rpb25SZXF1ZXN0dAYAAABmaWVsZHNSBQAAAHMbAAAAT25saW5lQWN0aW9uUmVxdWVzdC5tZXNzYWdlaQkAAAB0CAAAAGNwcF90eXBldAUAAABsYWJlbHQRAAAAaGFzX2RlZmF1bHRfdmFsdWV0DQAAAGRlZmF1bHRfdmFsdWVzBQAAAHV0Zi04dAwAAABtZXNzYWdlX3R5cGV0CQAAAGVudW1fdHlwZXQMAAAAaXNfZXh0ZW5zaW9udA8AAABleHRlbnNpb25fc2NvcGV0BgAAAHBhcmFtc3MaAAAAT25saW5lQWN0aW9uUmVxdWVzdC5wYXJhbXNpAgAAAHQKAAAAZXh0ZW5zaW9uc3QMAAAAbmVzdGVkX3R5cGVzdAoAAABlbnVtX3R5cGVzdA0AAABpc19leHRlbmRhYmxldBAAAABleHRlbnNpb25fcmFuZ2VzdAYAAABvbmVvZnNpEQAAAGlHAAAAdBQAAABPbmxpbmVBY3Rpb25SZXNwb25zZXMcAAAAT25saW5lQWN0aW9uUmVzcG9uc2UubWVzc2FnZWlJAAAAaXAAAAB0EgAAAEJhdGNoQWN0aW9uUmVxdWVzdHMZAAAAQmF0Y2hBY3Rpb25SZXF1ZXN0LnBhcmFtc2lyAAAAaZYAAAB0EwAAAEJhdGNoQWN0aW9uUmVzcG9uc2VzGwAAAEJhdGNoQWN0aW9uUmVzcG9uc2UubWVzc2FnZWmYAAAAab4AAAB0DQAAAFJlbG9hZFJlcXVlc3R0CAAAAHByb3RvY29scxYAAABSZWxvYWRSZXF1ZXN0LnByb3RvY29sdAkAAABhcnRpZmFjdHNzFwAAAFJlbG9hZFJlcXVlc3QuYXJ0aWZhY3RzacAAAABp9AAAAHQOAAAAUmVsb2FkUmVzcG9uc2VzFgAAAFJlbG9hZFJlc3BvbnNlLm1lc3NhZ2Vp9gAAAGkXAQAAdBIAAABIZWFsdGhDaGVja1JlcXVlc3RzHAAAAEhlYWx0aENoZWNrUmVxdWVzdC5hcnRpZmFjdHNpGQEAAGlAAQAAdBMAAABIZWFsdGhDaGVja1Jlc3BvbnNldAYAAABzdGF0dXNzGgAAAEhlYWx0aENoZWNrUmVzcG9uc2Uuc3RhdHVzaQ4AAABpCAAAAGlCAQAAdAoAAABERVNDUklQVE9SdAoAAABfX21vZHVsZV9fdAsAAABhY3Rpb25zX3BiMnQTAAAAT25saW5lQWN0aW9uSGFuZGxlcmmiAQAAaWwCAAB0BwAAAG1ldGhvZHN0DwAAAF9yZW1vdGVfZXhlY3V0ZXMjAAAAT25saW5lQWN0aW9uSGFuZGxlci5fcmVtb3RlX2V4ZWN1dGV0EgAAAGNvbnRhaW5pbmdfc2VydmljZXQKAAAAaW5wdXRfdHlwZXQLAAAAb3V0cHV0X3R5cGV0DgAAAF9yZW1vdGVfcmVsb2FkcyIAAABPbmxpbmVBY3Rpb25IYW5kbGVyLl9yZW1vdGVfcmVsb2FkdA0AAABfaGVhbHRoX2NoZWNrcyEAAABPbmxpbmVBY3Rpb25IYW5kbGVyLl9oZWFsdGhfY2hlY2t0EgAAAEJhdGNoQWN0aW9uSGFuZGxlcmlvAgAAaTYDAABzIgAAAEJhdGNoQWN0aW9uSGFuZGxlci5fcmVtb3RlX2V4ZWN1dGVzIQAAAEJhdGNoQWN0aW9uSGFuZGxlci5fcmVtb3RlX3JlbG9h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c3RfZGVzZXJpYWxpemVyc3QUAAAAcmVzcG9uc2Vfc2VyaWFsaXplcnN0CwAAAHRocmVhZF9wb29sdBAAAAB0aHJlYWRfcG9vbF9zaXpldA8AAABkZWZhdWx0X3RpbWVvdXR0DwAAAG1heGltdW1fdGltZW91dFIXAAAAKAIAAABzEwAAAE9ubGluZUFjdGlvbkhhbmRsZXJzDQAAAF9oZWFsdGhfY2hlY2soAgAAAHMTAAAAT25saW5lQWN0aW9uSGFuZGxlcnMPAAAAX3JlbW90ZV9leGVjdXRlKAIAAABzEwAAAE9ubGluZUFjdGlvbkhhbmRsZXJzDgAAAF9yZW1vdGVfcmVsb2FkKAIAAABzEwAAAE9ubGluZUFjdGlvbkhhbmRsZXJzDQAAAF9oZWFsdGhfY2hlY2soAgAAAHMTAAAAT25saW5lQWN0aW9uSGFuZGxlcnMPAAAAX3JlbW90ZV9leGVjdXRlKAIAAABzEwAAAE9ubGluZUFjdGlvbkhhbmRsZXJzDgAAAF9yZW1vdGVfcmVsb2FkKAIAAABzEwAAAE9ubGluZUFjdGlvbkhhbmRsZXJzDQAAAF9oZWFsdGhfY2hlY2soAgAAAHMTAAAAT25saW5lQWN0aW9uSGFuZGxlcnMPAAAAX3JlbW90ZV9leGVjdXRlKAIAAABzEwAAAE9ubGluZUFjdGlvbkhhbmRsZXJzDgAAAF9yZW1vdGVfcmVsb2FkKBAAAABSNQAAAFJNAAAAUh0AAABSMQAAAFI2AAAAUkwAAABSLgAAAFI0AAAAdA4AAABmYWNlX3V0aWxpdGllc3QSAAAAdW5hcnlfdW5hcnlfaW5saW5lUkIAAABSPQAAAFJBAAAAdBQAAABiZXRhX2ltcGxlbWVudGF0aW9uc3QOAAAAc2VydmVyX29wdGlvbnNSYQAAACgJAAAAUmAAAAB0BAAAAHBvb2x0CQAAAHBvb2xfc2l6ZVJ4AAAAUnkAAABSdAAAAFJ1AAAAdBYAAABtZXRob2RfaW1wbGVtZW50YXRpb25zUn0AAAAoAAAAACgAAAAAc1EAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2Uvc3R1YnMvYWN0aW9uc19wYjIucHl0JgAAAGJldGFfY3Jl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aXRpb24gZnJvbSBncnBjaW88MC4xNS4wIHRvIGdycGNpbz49MC4xNS4wUkMAAABSQgAAAFI9AAAAUkEAAABSggAAAFKDAAAAUoQAAABShQAAAFJ2AAAAUncAAABSFwAAACgCAAAAcxIAAABCYXRjaEFjdGlvbkhhbmRsZXJzDQAAAF9oZWFsdGhfY2hlY2soAgAAAHMSAAAAQmF0Y2hBY3Rpb25IYW5kbGVycw8AAABfcmVtb3RlX2V4ZWN1dGUoAgAAAHMSAAAAQmF0Y2hBY3Rpb25IYW5kbGVycw4AAABfcmVtb3RlX3JlbG9hZCgCAAAAcxIAAABCYXRjaEFjdGlvbkhhbmRsZXJzDQAAAF9oZWFsdGhfY2hlY2soAgAAAHMSAAAAQmF0Y2hBY3Rpb25IYW5kbGVycw8AAABfcmVtb3RlX2V4ZWN1dGUoAgAAAHMSAAAAQmF0Y2hBY3Rpb25IYW5kbGVycw4AAABfcmVtb3RlX3JlbG9hZCgOAAAAUjUAAABSTAAAAFIvAAAAUjEAAABSNgAAAFJNAAAAUjAAAABSNAAAAFJGAAAAUoYAAABShwAAAFJ8AAAAUogAAABSiQAAACgJAAAAUk8AAABSggAAAFKDAAAAUn4AAABSfwAAAFKEAAAAUoUAAABSigAAAFKIAAAAKAAAAAAoAAAAAHNRAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL3N0dWJzL2FjdGlvbnNfcGIyLnB5dCMAAABiZXRhX2NyZWF0ZV9CYXRjaEFjdGlvbkhhbmRsZXJfc3R1YhwDAABzHAAAAAAGAwEKAQoBDQIDAQoBCgENAgMBDQENARACMAEoVAAAAHQDAAAAc3lzdAwAAAB2ZXJzaW9uX2luZm90AgAAAF9idA8AAABnb29nbGUucHJvdG9idWZSBAAAAHQLAAAAX2Rlc2NyaXB0b3JSBQAAAHQIAAAAX21lc3NhZ2VSBgAAAHQLAAAAX3JlZmxlY3Rpb25SBwAAAHQQAAAAX3N5bWJvbF9kYXRhYmFzZVIIAAAAdAcAAABEZWZhdWx0dAcAAABfc3ltX2RidA4AAABGaWxlRGVzY3JpcHRvclI4AAAAdA4AAABFbnVtRGVzY3JpcHRvclJxAAAAdBMAAABFbnVtVmFsdWVEZXNjcmlwdG9ydBsAAABfSEVBTFRIQ0hFQ0tSRVNQT05TRV9TVEFUVVN0FgAAAFJlZ2lzdGVyRW51bURlc2NyaXB0b3J0CgAAAERlc2NyaXB0b3J0DwAAAEZpZWxkRGVzY3JpcHRvclJyAAAAdAYAAABkZWNvZGV0FAAAAF9PTkxJTkVBQ1RJT05SRVFVRVNUdBUAAABfT05MSU5FQUNUSU9OUkVTUE9OU0V0EwAAAF9CQVRDSEFDVElPTlJFUVVFU1R0FAAAAF9CQVRDSEFDVElPTlJFU1BPTlNFdA4AAABfUkVMT0FEUkVRVUVTVHQPAAAAX1JFTE9BRFJFU1BPTlNFdBMAAABfSEVBTFRIQ0hFQ0tSRVFVRVNUdBQAAABfSEVBTFRIQ0hFQ0tSRVNQT05TRXQOAAAAZmllbGRzX2J5X25hbWVSJAAAAFIaAAAAdBUAAABtZXNzYWdlX3R5cGVzX2J5X25hbWV0FgAAAFJlZ2lzdGVyRmlsZURlc2NyaXB0b3J0HAAAAEdlbmVyYXRlZFByb3RvY29sTWVzc2FnZVR5cGV0BwAAAE1lc3NhZ2V0BAAAAGRpY3RSHQAAAHQPAAAAUmVnaXN0ZXJNZXNzYWdlUi4AAABSLwAAAFIwAAAAUjEAAABSNAAAAFI1AAAAUjYAAAB0EQAAAFNlcnZpY2VEZXNjcmlwdG9ydBAAAABNZXRob2REZXNjcmlwdG9ydBQAAABfT05MSU5FQUNUSU9OSEFORExFUnQZAAAAUmVnaXN0ZXJTZXJ2aWNlRGVzY3JpcHRvcnQQAAAAc2VydmljZXNfYnlfbmFtZXQTAAAAX0JBVENIQUNUSU9OSEFORExFUlJUAAAAdAkAAABncnBjLmJldGFSRAAAAFJ8AAAAUkUAAABSagAAAHQVAAAAZ3JwYy5mcmFtZXdvcmsuY29tbW9uUkYAAAB0HgAAAGdycGMuZnJhbWV3b3JrLmludGVyZmFjZXMuZmFjZVJHAAAAUnoAAAB0BgAAAG9iamVjdFJIAAAAUlIAAABSZAAAAFJlAAAAUmYAAABSZwAAAFJoAAAAUmwAAABSgQAAAFKLAAAAUowAAABSjQAAAFKOAAAAUo8AAAB0CwAAAEltcG9ydEVycm9yKAAAAAAoAAAAACgAAAAAc1EAAAAvb3B0L21hcnZp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AGQGAFMoBwAAAHM7AAAAQ29uc3RydWN0b3IuCgogICAgQXJnczoKICAgICAgY2hhbm5lbDogQSBncnBjLkNoYW5uZWwuCiAgICBzJAAAAC9PbmxpbmVBY3Rpb25IYW5kbGVyL19yZW1vdGVfZXhlY3V0ZXQSAAAAcmVxdWVzdF9zZXJpYWxpemVydBUAAAByZXNwb25zZV9kZXNlcmlhbGl6ZXJzIwAAAC9PbmxpbmVBY3Rpb25IYW5kbGVyL19yZW1vdGVfcmVsb2FkcyIAAAAvT25saW5lQWN0aW9uSGFuZGxlci9faGVhbHRoX2NoZWNrTigNAAAAdAsAAAB1bmFyeV91bmFyeXQMAAAAYWN0aW9uc19fcGIydBMAAABPbmxpbmVBY3Rpb25SZXF1ZXN0dBEAAABTZXJpYWxpemVUb1N0cmluZ3QUAAAAT25saW5lQWN0aW9uUmVzcG9uc2V0CgAAAEZyb21TdHJpbmd0DwAAAF9yZW1vdGVfZXhlY3V0ZXQNAAAAUmVsb2FkUmVxdWVzdHQOAAAAUmVsb2FkUmVzcG9uc2V0DgAAAF9yZW1vdGVfcmVsb2FkdBIAAABIZWFsdGhDaGVja1JlcXVlc3R0EwAAAEhlYWx0aENoZWNrUmVzcG9uc2V0DQAAAF9oZWFsdGhfY2hlY2soAgAAAHQEAAAAc2VsZnQHAAAAY2hhbm5lbCgAAAAAKAAAAABzVgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9lbmdpbmVfYmFzZS9zdHVicy9hY3Rpb25zX3BiMl9ncnBjLnB5dAgAAABfX2luaXRfXw0AAABzGAAAAAAGBgEGAQwBEgIGAQYBDAESAgYBBgEMASgDAAAAdAgAAABfX25hbWVfX3QKAAAAX19tb2R1bGVfX1ITAAAAKAAAAAAoAAAAACgAAAAAc1YAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2Uvc3R1YnMvYWN0aW9uc19wYjJfZ3JwYy5weVIBAAAACQAAAHMCAAAABgR0GwAAAE9ubGluZUFjdGlvbkhhbmRsZXJTZXJ2aWNlcmMAAAAAAAAAAAEAAABCAAAAcyMAAABlAABa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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8w0KMrfNXGMAAAAAAAAAAAsAAABAAAEAczEDAABkAABkAQBsAABtAQBaAQABZAAAZAIAbAIAWgIAZAAAZAIAbAMAWgMAZAAAZAMAbAQAbQUAWgUAAWQAAGQCAGwGAFoGAGQAAGQCAGwHAFoHAGQAAGQCAGwIAFoIAGQAAGQCAGwJAFoJAGQAAGQCAGwKAFoCAGQAAGQCAGwLAFoLAGQAAGQCAGwMAFoMAGQEAGQFAGwNAG0OAFoOAAFkAABkAgBsDwBaDwBkBgBnAQBaEABlCABqEQBkBwCDAQBkCACEAACDAQBaEgBlEgBqEwBkCQBkCgBkCwCDAQFlCABqFABkDACEAACDAQCDAQBaFQBlEgBqEwBkDQBkCgBkDgCDAQFlCABqFABkDwCEAACDAQCDAQBaFgBlEgBqEwBkEABkCgBkEQCDAQFlCABqFABkEgCEAACDAQCDAQBaFwBlEgBqEwBkEwBkCgBkEQCDAQFlCABqFABkFACEAACDAQCDAQBaGABlEgBqEwBkFQBkCgBkFgCDAQFlCABqGQBkFwBkGABkGQCDAQFlCABqGgBkGgBkGwBlGwBkCgBkHACDAQJlCABqGgBkHQBkHgBkGwBlGwBkCgBkHwCDAgJlCABqGgBkIABkIQBkGwBlGwBkCgBkIgCDAgJlCABqFABkIwCEAACDAQCDAQCDAQCDAQCDAQCDAQBaHABlEgBqEwBkJABkCgBkJQCDAQFlCABqFABkJgCEAACDAQCDAQBaHQBlEgBqEwBkEwBkCgBkJwCDAQFlCABqGgBkKABkKQBkGwBlGwCDAgFlCABqGgBkKgBkKwBkGwBlGwCDAgFlCABqFABkLACEAACDAQCDAQCDAQCDAQBaHgBkPwBkMACEAQBaHwBkMQCEAABaIABkMgCEAABaIQBkMwCEAABaIgBkNACEAABaIwBkNQCEAABaJABkAgBkNgCEAQBaJgBlCQBqJwBkNwCDAQBaKABkAgBlGwBkAgBkAgBlKQBkOACEBQBaKgBkAgBkOQCEAQBaKwBkAgBkOgCEAQBaLABkAgBkAgBkOwCEAgBaLQBkAgBkPACEAQBaLgBkAgBkPQCEAQBaLwBkAgBkPgCEAQBaMABkAgBTKEAAAABp/////ygBAAAAdA4AAABwcmludF9mdW5jdGlvbk4oAQAAAHQMAAAATG9vc2VWZXJzaW9uaQIAAAAoAQAAAHQIAAAAdXJscGFyc2V0BAAAAGNvcHl0AwAAAHBrZ2MAAAAAAAAAAAEAAABDAAEAcwQAAABkAABTKAEAAABOKAAAAAAoAAAAACgAAAAAKAAAAABzQgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3BrZy5weXQDAAAAY2xpJAAAAHMCAAAAAAJzDwAAAHBrZy1zaG93dmVyc2lvbnQEAAAAaGVscHMZAAAAU2hvdyB0aGUgcGFja2FnZSB2ZXJzaW9uLmMBAAAAAQAAAAQAAABDAAEAcxsAAAB0AAB0AQB8AABqAgBkAQAZgwEAgwEAAWQAAFMoAgAAAE50DAAAAHBhY2thZ2VfcGF0aCgDAAAAdAUAAABwcmludHQLAAAAZ2V0X3ZlcnNpb250AwAAAG9iaigBAAAAdAMAAABjdHgoAAAAACgAAAAAc0IAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9wa2cucHl0BwAAAHZlcnNpb24pAAAAcwIAAAAAA3MPAAAAcGtnLXNob3djaGFuZ2VzcxsAAABTaG93IHRoZSBwYWNrYWdlIGNoYW5nZWxvZy5jAQAAAAEAAAAFAAAAQwABAHMwAAAAdAAAagEAZAEAagIAdAAAagMAagQAfAAAagUAZAIAGWQDAIMCAIMBAIMBAAFkAABTKAQAAABOcwcAAABsZXNzIHt9dAkAAABiYXNlX3BhdGhzCgAAAENIQU5HRVMubWQoBgAAAHQCAAAAb3N0BgAAAHN5c3RlbXQGAAAAZm9ybWF0dAQAAABwYXRodAQAAABqb2luUgoAAAAoAQAAAFILAAAAKAAAAAAoAAAAAHNCAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvcGtnLnB5dAMAAABsb2cvAAAAcwIAAAAAA3MMAAAAcGtnLXNob3dpbmZvcyMAAABTaG93IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrYWdlLmMBAAAADAAAAAgAAABDAAEAc0oCAAB0AAB8AABqAQBkAQAZgwEAfQEAdAIAfAAAagEAZAIAGYMBAH0CAHQDAHwAAGoBAGQCABmDAQB9AwB0BAB8AABqAQBkAgAZgwEAfQQAdAUAfAAAagEAZAIAGYMBAH0FAHQEAHwAAGoBAGQCABlkAwB8BQCDAQF9BgB8BQBkBAAffAEAawIAco4AZAUAbgMAZAYAfQcAdAYAfAAAagEAZAIAGYMBAH0IAHwIAHKzAGQHAG4DAGQIAH0JAHwEAHwGAGsCAHLRAHwIAHLRAGQJAG4ZAHwFAGQEAB98AQBrAgBz5wBkCgBuAwBkCwB9CgBkDABqBwBkDQB8AgBkDgAgaggAZA8AZBAAgwIAZAMAfAUAZBEAfAAAagEAZBIAGYMAA30LAHQJAGQJAIMBAAF0CQBkEwBqBwBkFAB8AABqAQBkEgAZgwABgwEAAXQJAGQVAGoHAGQWAHwAAGoBAGQXABlwZQFkGACDAAGDAQABdAkAZBkAagcAZBoAfAEAZBsAfAoAgwACgwEAAXQJAGQJAIMBAAF0CQBkHABqBwBkHQB8AwCDAAGDAQABdAkAZB4AagcAZB8AfAkAgwABgwEAAXQJAGQgAGoHAGQhAHwEAIMAAYMBAAF0CQBkIgBqBwBkDQB8AgCDAAGDAQABdAkAZAkAgwEAAXQJAGQjAGoHAGQkAHwHAIMAAYMBAAF0CQBkJQBqBwBkAwB8BQBkJgB8BgCDAAKDAQABdAkAZCcAagcAZCgAfAsAgwABgwEAAXQJAGQJAIMBAAFkAABTKCkAAABOUgcAAABSDQAAAHQDAAAAdGFnaQEAAAB0AwAAAHllc3QCAAAAbm90BQAAAGNsZWFudAUAAABkaXJ0eXQAAAAAcwUAAAAoZGV2KXMSAAAAKHNob3VsZCBiZSBidW1wZWQpcyAAAABnaXQrc3NoOi8ve3JlcG99QHt0YWd9I2VnZz17cGtnfXQEAAAAcmVwb2n8////dAEAAAA6dAEAAAAvUgQAAAB0DAAAAHBhY2thZ2VfbmFtZXMPAAAAcGFja2FnZToge25hbWV9dAQAAABuYW1lcxAAAAB0eXBlOiAgICB7dHlwZV99dAUAAAB0eXBlX3QEAAAAdHlwZXQHAAAAdW5rbm93bnMcAAAAdmVyc2lvbjoge3ZlcnNpb259IHt1cGRhdGVkfVIMAAAAdAcAAAB1cGRhdGVkcxEAAABicmFuY2g6ICB7YnJhbmNofXQGAAAAYnJhbmNocxEAAABzdGF0dXM6ICB7c3RhdHVzfXQGAAAAc3RhdHVzcxEAAABjb21taXQ6ICB7Y29tbWl0fXQGAAAAY29tbWl0cw8AAAByZXBvOiAgICB7cmVwb31zEQAAAHRhZ2dlZDogIHt0YWdnZWR9dAYAAAB0YWdnZWRzHQAAAGN1cnJlbnQ6IHt0YWd9ICh7dGFnX2NvbW1pdH0pdAoAAAB0YWdfY29tbWl0cw4AAABwaXAgdXJsOiB7cGlwfXQDAAAAcGlwKAoAAABSCQAAAFIKAAAAdBYAAABnZXRfZ2l0X3JlcG9zaXRvcnlfdXJsdA4AAABnZXRfZ2l0X2JyYW5jaHQOAAAAZ2V0X2dpdF9jb21taXR0CwAAAGdldF9naXRfdGFndAwAAABpc19naXRfY2xlYW5SEAAAAHQHAAAAcmVwbGFjZVIIAAAAKAwAAABSCwAAAFIMAAAAUhoAAABSIwAAAFIlAAAAUhQAAABSJwAAAFImAAAAUhcAAABSJAAAAFIiAAAAUigAAAAoAAAAACgAAAAAc0IAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9wa2cucHl0BAAAAGluZm81AAAAcz4AAAAAAxMBEwETARMBEwEZAhwBEwESARgBFgEGAQkBHAEQAgoBHQEjARIBCgEKARYBFgEWARYBCgEWARIBCgEWAXMOAAAAcGtnLXVwZGF0ZWRlcHNjAQAAABEAAAAOAAAAQwABAHM4AgAAdAAAfAAAagEAZAEAGYMBAH0BAHQCAHwBAIMBAH0CAHQDAHwBAIMBAH0DAHQEAGoFAIMAAH0EAHQGAGoHAGQCAIMBAAF47QF8AQBEXeUBfQUAZAMAfQYAfAIAfAUAGX0HAHwDAHwFABl9CAB5KgB8BQBqCABkBACDAQBkBQAZfQkAfAUAaggAZAYAgwEAZAUAGX0KAFduFAAEdAkAawoAcqsAAQEBcUsAbgEAWHwKAGoKAIMAAGoLAGQHAGQIAIMCAH0LAGQJAH0MAGcAAHwEAERdKAB9DQB8DQBqDAB8CwB8CwBkCgAXZwIAawYActEAfA0Aag0AXgIAcdEAfQ4AfA4AchsBZAsAag4AfA4AZAwAGYMBAH0MAG4AAHwIAGQAAGsIAHNLAHwMAGQAAGsIAHI5AXFLAG4AAHQQAHwMAIMBAHQQAHwIAIMBAGsEAHJaAWQNAH0GAG42AHQQAHwMAIMBAHQQAHwHAIMBAGsAAHJ7AWQOAH0GAG4VAHwHAHwIAGsCAHKQAWQPAH0GAG4AAGQQAGoOAGQRAHwJAGQSAHwLAGQTAHwGAGQUAHwHAGQVAHwMAGQWAHwIAIMABn0PAHwGAGQPAGsCAHPkAXwGAGQNAGsCAHLtAXwMAHwHAGsCAHLtAWQXAH0QAG4nAHwGAGQbAGsGAHMFAnwMAHwIAGsCAHIOAmQYAH0QAG4GAGQZAH0QAHQGAGoHAHQGAGoRAHwPAGQaAHwQAIMBAYMBAAFxSwBXZAAAUygcAAAATlINAAAAUhkAAAB0CAAAAG91dGRhdGVkdAEAAABAaQEAAABzBAAAAGVnZz10AQAAAF90AQAAAC1SIQAAAHMEAAAALWxpYnMDAAAAdnt9aQAAAAB0BwAAAGRldmVsb3BzIgAAAHVwLXRvLWRhdGUgKG9sZCB2ZXJzaW9uIGluc3RhbGxlZClzCgAAAHVwLXRvLWRhdGVzVQAAAHtwa2dfbmFtZX06IHtzdGF0dXN9IChyZXF1aXJlZDoge3JlcXVpcmVkfSwgaW5zdGFsbGVkOiB7aW5zdGFsbGVkfSwgbGF0ZXN0OiB7bGF0ZXN0fSlSGgAAAHQIAAAAcGtnX25hbWVSJAAAAHQIAAAAcmVxdWlyZWR0CQAAAGluc3RhbGxlZHQGAAAAbGF0ZXN0dAUAAABncmVlbnQGAAAAeWVsbG93dAMAAAByZWR0AgAAAGZnKAIAAABSNAAAAHMiAAAAdXAtdG8tZGF0ZSAob2xkIHZlcnNpb24gaW5zdGFsbGVkKSgSAAAAdBsAAABnZXRfcmVwb3NfZnJvbV9yZXF1aXJlbWVudHNSCgAAAHQVAAAAZ2V0X3RhZ19mcm9tX3JlcG9fdXJsdBoAAABnZXRfbGF0ZXN0X3RhZ3NfZnJvbV9yZXBvc1IoAAAAdBsAAABnZXRfaW5zdGFsbGVkX2Rpc3RyaWJ1dGlvbnN0BQAAAGNsaWNrdAQAAABlY2hvdAUAAABzcGxpdHQKAAAASW5kZXhFcnJvcnQFAAAAbG93ZXJSLgAAAHQDAAAAa2V5UgwAAABSEAAAAHQEAAAATm9uZVIBAAAAdAUAAABzdHlsZSgRAAAAUgsAAAB0BQAAAHJlcG9zdBEAAAByZXF1aXJlZF92ZXJzaW9uc3QPAAAAbGF0ZXN0X3ZlcnNpb25zdA4AAABpbnN0YWxsZWRfcGtnc1IaAAAAUiQAAABSNgAAAFI4AAAAdAoAAAByZXBvX3NtYWxsUjUAAAB0EwAAAHBrZ19uYW1lX25vcm1hbGl6ZWRSNwAAAFIEAAAAdA4AAABpbnN0YWxsZWRfbGlzdHQDAAAAbXNndAUAAABjb2xvcigAAAAAKAAAAABzQgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3BrZy5weXQEAAAAZGVwc1sAAABzSgAAAAADEwEMAQwBDAENAQ0BBgEKAQoBAwETARcBDQEHARgBBgIDAQoBKAIGARYCGAEGAhgBCQEYAQkBDAEJAQkBJwEkAQkBGAEJAgYBcw8AAABwa2ctYnVtcHZlcnNpb25zGQAAAEJ1bXAgdGhlIHBhY2thZ2UgdmVyc2lvbi50BAAAAHBhcnR0BwAAAGRlZmF1bHR0BQAAAHBhdGNocw0AAAAtLWFsbG93LWRpcnR5dAcAAABpc19mbGFncwsAAABBbGxvdyBkaXJ0eXMHAAAALS1mb3JjZXMCAAAALWZzFwAAAEFsaWFzIGZvciAtLWFsbG93LWRpcnR5cwUAAAAtLXllc3MCAAAALXlzGQAAAEFuc3dlciB5ZXMgdG8gYWxsIHByb21wdHNjBQAAAAsAAAAGAAAAQwABAHNGAQAAfAEAZwEAfQUAfAIAcBIAfAMAfQIAdAAAfAAAagEAZAEAGYMBAH0GAHwGAAxyZwB8AgAMcmcAdAIAZAIAgwEAAXQCAGQDAIMBAAF0AgBkAgCDAQABdAIAZAQAgwEAAWQFAH0HAG7OAHwCAHJ9AHwFAGoDAGQGAIMBAAFuAABkBwBnAQB8BQAXfQgAdAQAfAAAagEAZAgAGYMBAH0JAHQFAGoGAHwIAGQJAHwAAGoBAGQBABmDAQF9BwB0BAB8AABqAQBkCAAZgwEAfQoAfAcAZAoAawIAcvcAdAIAZAsAagcAZAwAfAkAZA0AfAoAgwACgwEAAW4AAHwEAHMMAXQIAGoJAGQOAIMBAHI1AXQIAGoKAGQPAHQLAGoMAGoNAHwAAGoBAGQBABlkEACDAgCDAAEBbgAAdA4Aag8AfAcAgwEAAWQAAFMoEQAAAE5SDQAAAFIZAAAAcyoAAABFUlJPUjogR2l0IHdvcmtpbmcgZGlyZWN0b3J5IGlzIG5vdCBjbGVhbi5zQwAAAFlvdSBjYW4gdXNlIC0tYWxsb3ctZGlydHkgb3IgLS1mb3JjZSBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy5pAQAAAHMNAAAALS1hbGxvdy1kaXJ0eXQLAAAAYnVtcHZlcnNpb25SBwAAAHQDAAAAY3dkaQAAAABzIAAAAEJ1bXAgdmVyc2lvbiBmcm9tIHtvbGR9IHRvIHtuZXd9dAMAAABvbGR0AwAAAG5ld3MfAAAARG8geW91IHdhbnQgdG8gZWRpdCBDSEFOR0VTLm1kP3QIAAAAZmlsZW5hbWVzCgAAAENIQU5HRVMubWQoEAAAAFItAAAAUgoAAABSCAAAAHQGAAAAYXBwZW5kUgkAAAB0CgAAAHN1YnByb2Nlc3N0BAAAAGNhbGxSEAAAAFJBAAAAdAcAAABjb25maXJtdAQAAABlZGl0Ug4AAABSEQAAAFISAAAAdAMAAABzeXN0BAAAAGV4aXQoCwAAAFILAAAAUlMAAAB0CwAAAGFsbG93X2RpcnR5dAUAAABmb3JjZVIVAAAAdAQAAABhcmdzdAgAAABpc19jbGVhbnQIAAAAZXhpdGNvZGV0BwAAAGNvbW1hbmR0CwAAAG9sZF92ZXJzaW9udAsAAABuZXdfdmVyc2lvbigAAAAAKAAAAABzQgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3BrZy5weVJXAAAAigAAAHMqAAAAAAoJAQwCEwEOAQoBCgEKAQoCCQIGARABDQITARwBEwIMAQwBEwEVASkBcw0AAABwa2ctY3JlYXRldGFncykAAABDcmVhdGUgZ2l0IHRhZyB1c2luZyB0aGUgcGFja2FnZSB2ZXJzaW9uLmMBAAAAAwAAAAUAAABDAAEAc2cAAABkAQBqAAB0AQB8AABqAgBkAgAZgwEAgwEAfQEAdAMAZAMAagAAfAEAgwEAgwEAAWQEAGQFAGQGAGQHAGoAAHwBAIMBAHwBAGcFAH0CAHQEAGoFAHQGAGoHAHwCAIMBAIMBAAFkAABTKAgAAABOcwMAAAB2e31SBwAAAHMTAAAAQ3JlYXRpbmcgZ2l0IHRhZyB7fXQDAAAAZ2l0UhQAAABzAgAAAC1tcwwAAAAidmVyc2lvbiB7fSIoCAAAAFIQAAAAUgkAAABSCgAAAFIIAAAAUmEAAABSYgAAAFJdAAAAUl4AAAAoAwAAAFILAAAAUhQAAABSaAAAACgAAAAAKAAAAABzQgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3BrZy5weVIUAAAAsAAAAHMIAAAAAAMcARMBHgFzGAAAAFVwZGF0ZSByZXF1aXJlbWVudHMudHh0LnMJAAAALS1pbnN0YWxscwIAAAAtaXMNAAAALS1pbnN0YWxsLWFsbHMCAAAALWFjAwAAABQAAAAHAAAAQwABAHN9AgAAfAAAagAAZAEAGX0DAHQBAHwDAIMBAH0EAHQCAHwEAIMBAH0FAHQDAHwEAIMBAH0GAHQEAGoFAIMAAH0HAGQCAGcBAH0IAHQGAGoHAGQDAIMBAAF4WwF8BABEXVMBfQkAfAYAfAkAGX0KAHwFAHwJABl9CwB5FwB8CQBqCABkBACDAQBkBQAZfQwAV24UAAR0CQBrCgByoQABAQFxWgBuAQBYfAwAagoAgwAAagsAZAYAZAcAgwIAfQ0AZAgAfQ4AZwAAfAcARF0oAH0PAHwPAGoMAHwNAHwNAGQJABdnAgBrBgByxwB8DwBqDQBeAgBxxwB9EAB8EAByEQFkCgBqDgB8EABkCwAZgwEAfQ4AbgAAdA8AfAsAgwEAdA8AfAoAgwEAawAAcoUBdAYAagcAZAwAag4AfAwAfAsAfAoAgwMAgwEAAXQQAHwJAHwKAGQNAHwDAIMCAX0RAHQPAHwOAIMBAHQPAHwKAIMBAGsAAHKtAXwIAGoRAHwRAIMBAAFxrQFxWgB0DwB8DgCDAQB0DwB8CwCDAQBrAAByWgB8CABqEQB8CQCDAQABcVoAcVoAV3wCAHLJAXQSAH0BAGQOAGcBAH0IAG4AAHwBAHJ5AninAHwIAERdnAB9EQB8EQBqEwCDAAB9EQB0BgBqBwBkAwCDAQABdAYAagcAZA8Aag4AfBEAgwEAgwEAAWQQAGQRAGQSAGcDAHwRAGoIAGQTAIMBABd9EgB0FABqFQB8EgBkFAB8AwCDAQF9EwB8EwBkCwBrAgByWAJ0BgBqBwBkFQCDAQABcdYBdAYAagcAZBYAgwEAAXQWAGoXAHwTAIMBAAFx1gFXbgAAZAAAUygXAAAATlINAAAAcwQAAAAtZSAuUhkAAABzBAAAAGVnZz1pAQAAAFIyAAAAUjMAAABSIQAAAHMEAAAALWxpYnMDAAAAdnt9aQAAAABzHAAAAFVwZGF0aW5nIHt9IGZyb20ge30gdG8ge30uLi5SEQAAAHMTAAAALXIgcmVxdWlyZW1lbnRzLnR4dHMfAAAAUnVubmluZyBgcGlwIGluc3RhbGwgLVUge31gIC4uLlIoAAAAdAcAAABpbnN0YWxscwIAAAAtVXQBAAAAIFJYAAAAcwUAAABEb25lLnMHAAAARmFpbGVkLigYAAAAUgoAAABSPQAAAFI+AAAAUj8AAABSKAAAAFJAAAAAUkEAAABSQgAAAFJDAAAAUkQAAABSRQAAAFIuAAAAUkYAAABSDAAAAFIQAAAAUgEAAAB0DwAAAHVwZGF0ZV9yZXBvX3RhZ1JcAAAAdAQAAABUcnVldAUAAABzdHJpcFJdAAAAUl4AAABSYQAAAFJiAAAAKBQAAABSCwAAAFJsAAAAdAsAAABpbnN0YWxsX2FsbFINAAAAUkkAAABSSgAAAFJLAAAAUkwAAAB0DAAAAGluc3RhbGxfbGlzdFIaAAAAUjgAAABSNgAAAFI1AAAAUk4AAABSNwAAAFIEAAAAUk8AAAB0CAAAAG5ld19yZXBvUmgAAABSZwAAACgAAAAAKAAAAABzQgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3BrZy5weXQGAAAAdXBkYXRluQAAAHNUAAAAAAUNAQwBDAEMAQwBCQENAQ0BCgEKAQMBFwENAQcBGAEGAgMBCgEoAgYBFgIYARwBFQEYARMBGAEUAQYBBgEMAQYBDQEMAQ0BFgEcARUBDAEQAg0BcwQAAAAuZ2l0cwQAAAAucHljdAsAAABfX3B5Y2FjaGVfX2MDAAAABAAAAAYAAABDAAEAc3AAAAB5IwB0AABqAQB8AAB8AQBkAQB0AABqAgB8AgCMAACDAgEBV25GAAR0AwBrCgByawABfQMAAXwDAGoEAHQEAGoFAGsCAHJaAHQAAGoGAHwAAHwBAIMCAAFxbAB0BwBkAgB8AwAWgwEAAW4BAFhkAABTKAMAAABOdAYAAABpZ25vcmVzHwAAAERpcmVjdG9yeSBub3QgY29waWVkLiBFcnJvcjogJXMoCAAAAHQGAAAAc2h1dGlsdAgAAABjb3B5dHJlZXQPAAAAaWdub3JlX3BhdHRlcm5zdAcAAABPU0Vycm9ydAUAAABlcnJub3QHAAAARU5PVERJUlIDAAAAUggAAAAoBAAAAHQDAAAAc3JjdAQAAABkZXN0UnYAAAB0AQAAAGUoAAAAACgAAAAAc0IAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9wa2cucHlSAwAAAO4AAABzDAAAAAABAwEjAQ8BEgETAmMBAAAAAwAAAAYAAABDAAEAc0wAAAB0AAB0AQBqAgBqAwB8AABkAQCDAgBkAgCDAgCPIgB9AQB8AQBqBACDAABqBQBkAwCDAQBqBgCDAAB9AgBXZAQAUVh8AgBqBgCDAABTKAUAAABzLQAAAFJldHVybiB0aGUgcHJvamVjdCB2ZXJzaW9uIGZyb20gVkVSU0lPTiBmaWxlLnQHAAAAVkVSU0lPTnQCAAAAcmJ0BQAAAGFzY2lpTigHAAAAdAQAAABvcGVuUg4AAABSEQAAAFISAAAAdAQAAAByZWFkdAYAAABkZWNvZGVScAAAACgDAAAAUhEAAAB0AQAAAGZSDAAAACgAAAAAKAAAAABzQgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3BrZy5weVIJAAAA+AAAAHMGAAAAAAMhASEBYwEAAAAEAAAACAAAAEMAAQBzhwAAAHwAAGQAAGsIAHIbAHQBAGoCAGoDAH0AAG4AAHQEAHQBAGoCAGoFAHwAAGQBAIMCAGQCAIMCAI9IAH0BAGcAAHwBAERdNAB9AgBkAwB8AgBrBgByQwB8AgBqBgCDAABqBwBkBACDAQAMckMAfAIAagYAgwAAXgIAcUMAfQMAV2QAAFFYfAMAUygFAAAATnMQAAAAcmVxdWlyZW1lbnRzLnR4dHQBAAAAcnMEAAAAZ2l0QHQBAAAAIygIAAAAUkcAAABSDgAAAFIRAAAAdAYAAABjdXJkaXJSgwAAAFISAAAAUnAAAAB0CgAAAHN0YXJ0c3dpdGgoBAAAAFIRAAAAdAIAAABmcHQEAAAAbGluZVJJAAAAKAAAAAAoAAAAAHNCAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvcGtnLnB5Uj0AAAAAAQAAcwoAAAAAAQwBDwEhAUcBYwEAAAAFAAAABAAAAEMAAQBzYAAAAGkAAH0BAHhTAHwAAERdSwB9AgBkAQB8AgBrBgByTgB0AAB8AgCDAQB9AwB8AwBqAQB9BAB8BABqAgBkAQCDAQBkAgAZfAEAfAIAPHENAGQAAHwBAHwCADxxDQBXfAEAUygDAAAATlIxAAAAaQEAAAAoBAAAAFICAAAAUhEAAABSQwAAAFJHAAAAKAUAAABSSQAAAHQEAAAAdGFnc1IaAAAAdAsAAAByZXBvX3BhcnNlZHQJAAAAcmVwb19wYXRoKAAAAAAoAAAAAHNCAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvcGtnLnB5Uj4AAAAIAQAAcxAAAAAAAQYBDQEMAQwBCQEaAg4BYwEAAAABAAAABwAAAEMAAQBzHAAAAHwAAHQAAHwAAGQBAHQBAGQCAGQDAIMBAmYCAFMoBAAAAE50CAAAAGNoZWNrb3V0dAUAAABkZXB0aGkBAAAAKAIAAAB0CQAAAGdpdF9jbG9uZXQFAAAARmFsc2UoAQAAAFIaAAAAKAAAAAAoAAAAAHNCAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvcGtnLnB5dAYAAABfY2xvbmUUAQAAcwIAAAAAAWMBAAAABwAAAAQAAABDAAEAc3cAAABpAAB9AQB8AABzEAB8AQBTdAAAagEAdAIAfAAAgwEAgwEAfQIAfAIAagMAdAQAfAAAgwIAfQMAeDkAfAMARF0xAFwCAH0EAH0FAHwFAHJfAHQFAHwFAIMBAH0GAG4GAGQAAH0GAHwGAHwBAHwEADxxPgBXfAEAUygBAAAATigHAAAAdA8AAABtdWx0aXByb2Nlc3Npbmd0BAAAAFBvb2x0AwAAAGxlbnQDAAAAbWFwUpQAAABSLAAAAFJHAAAAKAcAAABSSQAAAFKNAAAAdAQAAABwb29sdAYAAAByZXBvc19SGgAAAFIRAAAAUhQAAAAoAAAAACgAAAAAc0IAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9wa2cucHlSPwAAABgBAABzFgAAAAABBgEGAQQCFQISARMBBgEPAgYBDgFjAwAAAAcAAAAJAAAAQwABAHPYAAAAfAIAZAAAawgAchsAdAEAagIAagMAfQIAbgAAZAEAfQMAZAEAfQQAdAQAdAEAagIAagUAfAIAZAIAgwIAZAMAgwIAj1kAfQUAeE8AfAUARF1HAH0GAHwAAHwGAGsGAHKMAHQGAGoHAGQEAGQFAGoIAHwBAIMBAHwGAIMDAH0GAHwDAHwGADd9AwBuAAB8BAB8BgA3fQQAcU8AV1dkAABRWHQEAHQBAGoCAGoFAHwCAGQCAIMCAGQGAIMCAI8UAH0FAHwFAGoJAHwEAIMBAAFXZAAAUVh8AwBTKAcAAABOUhkAAABzEAAAAHJlcXVpcmVtZW50cy50eHRShwAAAHMYAAAAQHZbMC05XStcLlswLTldK1wuWzAtOV0rcwMAAABAe310AQAAAHcoCgAAAFJHAAAAUg4AAABSEQAAAFKJAAAAUoMAAABSEgAAAHQCAAAAcmV0AwAAAHN1YlIQAAAAdAUAAAB3cml0ZSgHAAAAUhoAAABSFAAAAFIRAAAAdAMAAAByZXR0BwAAAGNvbnRlbnRSiwAAAFKMAAAAKAAAAAAoAAAAAHNCAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvcGtnLnB5Um4AAAApAQAAcxoAAAAAAQwBDwEGAQYBIQENAQwBHgENARQCIQETAnMRAAAAOihcdyspXC8oLiopXC5naXRjBgAAAA4AAAAIAAAAQwABAHNyAgAAZAEAfAAAawYAcoEAdAAAfAAAgwEAfQYAfAYAagEAfQcAZAIAfAcAawYAckMAfAcAagIAZAIAgwEAZAMAGX0HAG4AAHwHAGoDAGQEAIMBAH0HAHQEAHwHAGoCAGQEAIMBAIMBAFwCAH0IAH0JAHwGAGoFAGQFABd8BwAXfQAAbjoAdAYAagcAdAgAfAAAgwIAfQoAfAoAc50AZAAAU3wKAGoKAGQGAIMBAH0IAHwKAGoKAGQHAIMBAH0JAHwBAGQAAGsIAHIGAXQLAGoBAGoMAHQLAGoBAGoNAGQIAIMBAGQJAGQKAIMDAH0LAHQLAGoBAGoMAHwLAHwIAHwJAIMDAH0BAG4AAGQLAH0MAHwCAHMfAXwMAGQMADd9DABuAAB8AwByPAF8DABkDQB0DgB8AwCDAQAXN30MAG4AAHwEAHJTAXwMAGQOAHwEABc3fQwAbgAAfAUAcmYBfAwAZA8AN30MAG4AAHQLAGoBAGoPAHwBAIMBAHPSAXQLAGoQAHwBAIMBAAFkEABqEQBkEQB8DABkEgB8AABkEwB8AQCDAAN9DQB0EgB8DQCDAQABdBMAahQAfA0AagIAgwAAZBQAdBMAahUAgwEBahYAgwAAAW4AAGQLAH0MAHwDAHL1AXwMAGQNAHQOAHwDAIMBABc3fQwAbgAAdBIAZBUAahEAfAkAgwEAgwEAAXk5AHQTAGoUAGQWAHwMABdqAgCDAABkFAB0EwBqFQBkFwB0EwBqFQBkGAB8AQCDAQNqFgCDAAABV24qAAR0FwBrCgBybQIBAQF0EgBkGQBqEQB8CQCDAQCDAQABZAAAfQEAbgEAWHwBAFMoGgAAAE5zBAAAACNlZ2dSMQAAAGkAAAAAUhwAAABSGwAAAGkBAAAAaQIAAAB0AQAAAH5zFgAAAC5tYXJ2aW4tcHl0aG9uLXRvb2xib3hSSQAAAFIZAAAAcwMAAAAgLW5zCQAAACAtLWRlcHRoIHMKAAAAIC0tYnJhbmNoIHMQAAAAIC0tc2luZ2xlLWJyYW5jaHMeAAAAZ2l0IGNsb25lIHtvcHRzfSB7cmVwb30ge2Rlc3R9dAQAAABvcHRzUhoAAABSfgAAAHQGAAAAc3Rkb3V0cyoAAABGZXRjaGluZyBsYXRlc3QgdmVyc2lvbiBmcm9tIHt9IHJlcG9zaXRvcnlzEQAAAGdpdCBmZXRjaCAtLXRhZ3MgdAYAAABzdGRlcnJSWAAAAHMcAAAAQ291bGQgbm90IGZldGNoIHRhZ3MgZnJvbSB7fSgYAAAAUgIAAABSEQAAAFJDAAAAUnAAAAB0BQAAAHR1cGxldAYAAABuZXRsb2NSnAAAAHQGAAAAc2VhcmNodAcAAAByZXBvX3JlUkcAAAB0BQAAAGdyb3VwUg4AAABSEgAAAHQKAAAAZXhwYW5kdXNlcnQDAAAAc3RydAYAAABleGlzdHN0CAAAAG1ha2VkaXJzUhAAAABSCAAAAFJdAAAAdAUAAABQb3BlbnQEAAAAUElQRXQEAAAAd2FpdFJ6AAAAKA4AAABSGgAAAFJ+AAAAUpAAAABSkQAAAFIjAAAAdA0AAABzaW5nbGVfYnJhbmNoUo4AAABSjwAAAHQJAAAAcmVwb190ZWFtdAkAAAByZXBvX25hbWV0CQAAAHJlcG9faW5mb1IRAAAAUqIAAABSaAAAACgAAAAAKAAAAABzQgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3BrZy5weVKSAAAAPgEAAHNSAAAAAAEMAQwBCQEMARYBDwEbARQCEgEGAQQBDwEPAQwBJAEbAgYBBgENAQYBFwEGAREBBgENAhIBDQEJARUBCgElAgYBBgEXARMBAwE5AQ0BEwEKAmMBAAAAAwAAAAYAAABDAAEAc2EAAAB8AABkAABrCAByGwB0AQBqAgBqAwB9AABuAABkAQBqBACDAAB9AQB0BQBqBgB8AQBkAgB0BQBqBwBkAwB8AACDAQJqCABqCQCDAAB9AgB8AgBqCgCDAABqCwBkBACDAQBTKAUAAABOcx8AAABnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEUqMAAABSWAAAAHMFAAAAdXRmLTgoDAAAAFJHAAAAUg4AAABSEQAAAFKJAAAAUkMAAABSXQAAAFKuAAAAUq8AAABSowAAAFKEAAAAUnAAAABShQAAACgDAAAAUhEAAABSaAAAAFIjAAAAKAAAAAAoAAAAAHNCAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvcGtnLnB5UioAAABvAQAAcwoAAAAAAQwBDwEMAScBYwEAAAAEAAAABgAAAEMAAQBzpgAAAHwAAGQAAGsIAHIbAHQBAGoCAGoDAH0AAG4AAGQBAGoEAIMAAH0BAHQFAGoGAHwBAGQCAHQFAGoHAGQDAHwAAIMBAmoIAGoJAIMAAGoKAGQEAIMBAH0CAGQFAGoLAHwCAIMBAGoEAIMAAH0BAHQFAGoGAHwBAGQCAHQFAGoHAGQDAHwAAIMBAmoIAGoJAIMAAGoKAGQEAIMBAH0DAHwDAGoMAIMAAFMoBgAAAE5zIQAAAGdpdCByZXYtbGlzdCAtLXRhZ3MgLS1tYXgtY291bnQ9MVKjAAAAUlgAAABzBQAAAHV0Zi04cxYAAABnaXQgZGVzY3JpYmUgLS10YWdzIHt9KA0AAABSRwAAAFIOAAAAUhEAAABSiQAAAFJDAAAAUl0AAABSrgAAAFKvAAAAUqMAAABShAAAAFKFAAAAUhAAAABScAAAACgEAAAAUhEAAABSaAAAAFIlAAAAUhQAAAAoAAAAACgAAAAAc0IAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9wa2cucHlSLAAAAHcBAABzDgAAAAABDAEPAQwBMAEVATABYwIAAAAEAAAABgAAAEMAAQBzggAAAHwAAGQAAGsIAHIbAHQBAGoCAGoDAH0AAG4AAHwBAHI8AGQBAGoEAGQCAHwBAIMAAWoFAIMAAH0CAG4MAGQDAGoFAIMAAH0CAHQGAGoHAHwCAGQEAHQGAGoIAGQFAHwAAIMBAmoJAGoKAIMAAH0DAHwDAGoLAIMAAGoMAGQGAIMBAFMoBwAAAE5zFwAAAGdpdCByZXYtbGlzdCAtbiAxIHt0YWd9UhQAAABzEgAAAGdpdCByZXYtcGFyc2UgSEVBRFKjAAAAUlgAAABzBQAAAHV0Zi04KA0AAABSRwAAAFIOAAAAUhEAAABSiQAAAFIQAAAAUkMAAABSXQAAAFKuAAAAUq8AAABSowAAAFKEAAAAUnAAAABShQAAACgEAAAAUhEAAABSFAAAAFJoAAAAUiUAAAAoAAAAACgAAAAAc0IAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9wa2cucHlSKwAAAIEBAABzDgAAAAABDAEPAQYBGwIMAScBYwEAAAADAAAABgAAAEMAAQBzYQAAAHwAAGQAAGsIAHIbAHQBAGoCAGoDAH0AAG4AAGQBAGoEAIMAAH0BAHQFAGoGAHwBAGQCAHQFAGoHAGQDAHwAAIMBAmoIAGoJAIMAAH0CAHwCAGoKAIMAAGoLAGQEAIMBAFMoBQAAAE5zIgAAAGdpdCBjb25maWcgLS1nZXQgcmVtb3RlLm9yaWdpbi51cmxSowAAAFJYAAAAcwUAAAB1dGYtOCgMAAAAUkcAAABSDgAAAFIRAAAAUokAAABSQwAAAFJdAAAAUq4AAABSrwAAAFKjAAAAUoQAAABScAAAAFKFAAAAKAMAAABSEQAAAFJoAAAAdAMAAAB1cmwoAAAAACgAAAAAc0IAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9wa2cucHlSKQAAAIwBAABzCgAAAAABDAEPAQwBJwFjAQAAAAMAAAAGAAAAQwABAHNtAAAAfAAAZAAAawgAchsAdAEAagIAagMAfQAAbgAAZAEAagQAgwAAfQEAdAUAagYAfAEAZAIAdAUAagcAZAMAfAAAgwECaggAagkAgwAAfQIAdAoAfAIAagsAgwAAagQAZAQAgwEAZAUAdAwAgwEBUygGAAAATnMHAAAAZ2l0IHRhZ1KjAAAAUlgAAABzAQAAAAp0BwAAAHJldmVyc2UoDQAAAFJHAAAAUg4AAABSEQAAAFKJAAAAUkMAAABSXQAAAFKuAAAAUq8AAABSowAAAFKEAAAAdAYAAABzb3J0ZWRScAAAAFJvAAAAKAMAAABSEQAAAFJoAAAAUo0AAAAoAAAAACgAAAAAc0IAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9wa2cucHl0DAAAAGdldF9naXRfdGFnc5QBAABzCgAAAAABDAEPAQwBJwFjAQAAAAMAAAAGAAAAQwABAHNSAAAAfAAAZAAAawgAchsAdAEAagIAagMAfQAAbgAAZAEAagQAgwAAfQEAdAUAagYAfAEAZAIAdAUAagcAZAMAfAAAgwECaggAagkAgwAAfQIAfAIAUygEAAAATnMVAAAAZ2l0IGRpZmYgLS1xdWlldCBIRUFEUqMAAABSWAAAACgKAAAAUkcAAABSDgAAAFIRAAAAUokAAABSQwAAAFJdAAAAUq4AAABSrwAAAFKjAAAAUoQAAAAoAwAAAFIRAAAAUmgAAAB0CQAAAGV4aXRfY29kZSgAAAAAKAAAAABzQgAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3BrZy5weVItAAAAnAEAAHMKAAAAAAEMAQ8BDAEnASgDAAAAcwQAAAAuZ2l0cwQAAAAucHljUnUAAAAoMQAAAHQKAAAAX19mdXR1cmVfX1IAAAAAUg4AAABSKAAAAHQRAAAAZGlzdHV0aWxzLnZlcnNpb25SAQAAAFJhAAAAUl0AAABSQQAAAFKcAAAAdAcAAABvcy5wYXRoUnsAAABSdwAAAHQOAAAAX2NvbXBhdGliaWxpdHlSAgAAAFKVAAAAdAcAAABfX2FsbF9fUqkAAABSBQAAAFJoAAAAdAwAAABwYXNzX2NvbnRleHRSDAAAAFITAAAAUi8AAABSUgAAAHQIAAAAYXJndW1lbnR0BgAAAG9wdGlvblJvAAAAUlcAAABSFAAAAFJ0AAAAUgMAAABSCQAAAFI9AAAAUj4AAABSlAAAAFI/AAAAUkcAAABSbgAAAHQHAAAAY29tcGlsZVKoAAAAUpMAAABSkgAAAFIqAAAAUiwAAABSKwAAAFIpAAAAUrgAAABSLQAAACgAAAAAKAAAAAAoAAAAAHNCAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvcGtnLnB5dAgAAAA8bW9kdWxlPhIAAABzaAAAABACDAEMARABDAEMAQwBDAEMAQwBDAEQAQwCCQMYBRIBFQUSARUFEgEVJRIBFS4SARIBEgEGARUBBgEVAQYBIR4SARUIEgEVARUBGzIMCgkICQgJDAkECREMEg8DGDEMCAwKDwsMCAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9lbmdpbmUucHljAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwNjMzNzcgMTM0NjM0NDI1MDIgMDI2NTEwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPzDQoyt81cYwAAAAAAAAAAFAAAAEAAAQBzcwsAAGQAAGQBAGwAAG0BAFoBAAFkAABkAgBsAgBaAgBkAABkAgBsAwBaAwBkAABkAgBsBABaBABkAABkAgBsBQBaBQBkAABkAgBsBgBaBgBkAABkAgBsBwBaBABkAABkAgBsCABaCABkAABkAgBsCQBaCQBkAABkAgBsCgBaCgBkAABkAgBsCwBaCwBkAABkAgBsDABaDABkAABkAwBsDQBtDQBaDQABZAAAZAIAbA4AWg4AZAAAZAQAbA8AbRAAWhAAAWQAAGQFAGwRAG0SAFoSAAFkAABkBgBsEwBtFABaFAABZAcAZAgAbBUAbRYAWhYAAWQHAGQJAGwXAG0YAFoYAAFlGABkCgCDAQBaGQBlAgBqGgBkCwCDAQBkDACEAACDAQBaGwBlGwBqHABkDQBkDgBkDwCDAQFlAgBqHQBkEABkEQBkEgBkEwBkFABlAgBqHgBkEwBkFQBkFgBkFwBkGABkGQBkGgBkGwBnCACDAQBkDgBkHACDAgNlAgBqHQBkHQBkHgBkDgBkHwBkFABlAgBqHwBkIABlIACDAAGDAgJlAgBqHQBkIQBkIgBkDgBkIwBkFABlAgBqHwBkIABlIACDAAGDAgJlAgBqHQBkJABkJQBkDgBkJgBkFABlAgBqHwBkIABlIACDAAGDAgJlAgBqHQBkJwBkKABkDgBkKQBkFABlAgBqHwBkIABlIACDAAGDAgJlAgBqHQBkKgBkKwBkEgBkLABkDgBkLQBkFABlAgBqHwBkIABlIACDAAGDAgNlAgBqHQBkLgBkLwBkEgBkMABkDgBkMQBkFABlAgBqHwBkIABlIACDAAGDAgNlAgBqHQBkMgBkMwBkEgBkNABkDgBkNQBkFABlAgBqHwBkIABlIACDAAGDAgNlAgBqHQBkNgBkNwBkEgBlIABkOABlIABkDgBkOQCDAgNlAgBqHQBkOgBkEgBlIQBkOABlIABkDgBkOwCDAQNlAgBqHQBkPABkPQBkPgBkPwBkFABlAgBqHwBkIABlIACDAAFkDgBkQACDAgNlAgBqIgBkQQCEAACDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQBaIwBkQgCEAABaJABpBwBkQwBkFQA2ZEQAZBYANmRFAGQXADZkRgBkGAA2ZEcAZBkANmRIAGQaADZkSQBkGwA2WiUAZEoAZSYAZgEAZEsAhAAAgwAAWVonAGRMAIQAAFooAGRNAIQAAFopAGQCAGQCAGQCAGQCAGQCAGROAIQFAForAGRPAGUmAGYBAGRQAIQAAIMAAFlaLABlGwBqHABkUQBkDgBkUgCDAQFlAgBqHQBkEABkEQBkEgBkEwBkFABlAgBqHgBkEwBkFQBkFgBkFwBkGABkGgBkGwBnBwCDAQBkDgBkHACDAgNlAgBqHQBkHQBkHgBkDgBkHwBkFABlAgBqHwBkIABlIACDAAGDAgJlAgBqHQBkIQBkIgBkDgBkIwBkFABlAgBqHwBkIABlIACDAAGDAgJlAgBqHQBkJABkJQBkDgBkJgBkFABlAgBqHwBkIABlIACDAAGDAgJlAgBqHQBkJwBkKABkDgBkKQBkFABlAgBqHwBkIABlIACDAAGDAgJlAgBqHQBkKgBkKwBkEgBkLABkDgBkLQBkFABlAgBqHwBkIABlIACDAAGDAgNlAgBqHQBkUwBkLwBkEgBkVABkDgBkVQBkFABlAgBqHwBkIABlIACDAAGDAgNlAgBqHQBkPABkPQBkPgBkPwBkFABlAgBqHwBkIABlIACDAAFkDgBkVgCDAgNlAgBqHQBkVwBkWABkEgBlDgBqLQCDAABkDgBkWQCDAgJlAgBqHQBkWgBkWwBkEgBlDgBqLQCDAABkDgBkXACDAgJlAgBqIgBkXQCEAACDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQCDAQBaLgBpAQBlBABqLwBqMABlBABqLwBqMQBlMgCDAQBkXgBkXwCDAwBkXwA2WjMAZLYAZwEAWjQAZF4AZwEAWjUAZTYAWjcAZRsAahwAZGIAZA4AZGMAgwEBZQIAajgAZGQAZBQAZQIAah8AZCAAZSAAgwABgwEBZQIAah0AZGUAZGYAZBIAZGcAZA4AZGgAgwICZGkAhAAAgwEAgwEAgwEAWjkAZRsAahwAZGoAZA4AZGsAgwEBZQIAah0AZGwAZG0AZG4AZG8AZA4AZG8AgwICZQIAah0AZHAAZCIAZG4AZHEAZBIAZHIAZA4AZHMAgwIDZQIAah0AZHQAZCUAZG4AZHUAZBIAZHYAZA4AZHUAgwIDZQIAah0AZHcAZHgAZG4AZHkAZBIAZHoAZA4AZHkAgwIDZQIAah0AZHsAZGYAZBIAZHwAZA4AZH0AgwICZQIAah0AZH4AZCIAZD4AZH8AZBQAZQIAah8AZCAAZSAAgwABZA4AZIAAgwIDZQIAah0AZIEAZDgAZSAAZBIAZSEAZA4AZIIAgwEDZQIAah0AZIMAZDgAZSAAZBIAZSEAZA4AZIQAgwEDZQIAah0AZGUAZIUAZBIAZGcAZA4AZGgAgwICZIYAhAAAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAWjoAZQgAajsAZIcAgwEAWjwAZIgAZIkAhAEAWj0AZIoAhAAAWj4AZIsAhAAAWj8AZIwAhAAAWkAAZI0AhAAAWkEAZI4AhAAAWkIAZI8AhAAAWkMAZJAAhAAAWkQAZRsAahwAZJEAZA4AZJIAgwEBZQIAah0AZBAAZBEAZBIAZBMAZBQAZQIAah4AZBMAZBUAZBYAZBcAZBgAZBkAZBoAZBsAZwgAgwEAZA4AZBwAgwIDZQIAah0AZB0AZB4AZA4AZB8AZBQAZQIAah8AZCAAZSAAgwABgwICZQIAah0AZCEAZCIAZA4AZCMAZBQAZQIAah8AZCAAZSAAgwABgwICZQIAah0AZCQAZCUAZA4AZCYAZBQAZQIAah8AZCAAZSAAgwABgwICZQIAah0AZCcAZCgAZA4AZCkAZBQAZQIAah8AZCAAZSAAgwABgwICZQIAah0AZJMAZJQAZBIAZHwAZA4AZJUAgwICZQIAah0AZCoAZCsAZBIAZCwAZA4AZC0AZBQAZQIAah8AZCAAZSAAgwABgwIDZQIAah0AZDwAZD0AZD4AZD8AZBQAZQIAah8AZCAAZSAAgwABZA4AZEAAgwIDZQIAah0AZJYAZJcAZBIAZJgAZA4AZJkAgwICZQIAah0AZJoAZGYAZBIAZJsAZA4AZJwAgwICZQIAah0AZJ0AZHgAZA4AZJ4AZBQAZQIAah8AZCAAZSAAgwABgwICZQIAah0AZFcAZFgAZBIAZQ4Aai0AgwAAZA4AZFkAgwICZQIAah0AZFoAZFsAZBIAZQ4Aai0AgwAAZA4AZFwAgwICZQIAah0AZJ8AZKAAZA4AZKEAgwIBZQIAaiIAZKIAhAAAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAgwEAWkUAZKMAhAAAWkYAZRsAahwAZKQAZA4AZKUAgwEBZQIAah0AZKYAZDgAZSAAZBIAZSEAZA4AZKcAgwEDZQIAah0AZHsAZDgAZSAAZBIAZSEAZA4AZKgAgwEDZQIAah0AZKkAZDgAZSAAZBIAZSEAZA4AZKoAgwEDZKsAhAAAgwEAgwEAgwEAgwEAWkcAZRsAahwAZKwAZA4AZK0AgwEBZQIAah0AZK4AZJcAZBIAZK8AZA4AZJkAgwICZQIAah0AZLAAZGYAZBIAZJsAZA4AZJwAgwICZQIAajgAZLEAZBQAZQIAah4AZLIAZLMAZLQAZwMAgwEAgwEBZLUAhAAAgwEAgwEAgwEAgwEAWkgAZAIAUyi3AAAAaf////8oAQAAAHQOAAAAcHJpbnRfZnVuY3Rpb25OKAEAAAB0CQAAAHVuaWRlY29kZSgBAAAAdAkAAABwcm9maWxpbmcoAQAAAHQKAAAATWFydmluRGF0YSgBAAAAdAYAAABDb25maWdpAgAAACgBAAAAdAkAAABpdGVyaXRlbXMoAQAAAHQKAAAAZ2V0X2xvZ2dlcnMRAAAAbWFuYWdlbWVudC5lbmdpbmV0BgAAAGVuZ2luZWMAAAAAAAAAAAEAAABDAAEAcwQAAABkAABTKAEAAABOKAAAAAAoAAAAACgAAAAAKAAAAABzRQAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L2VuZ2luZS5weXQDAAAAY2xpKwAAAHMCAAAAAAJzDQAAAGVuZ2luZS1kcnlydW50BAAAAGhlbHBzPQAAAE1hcnZpbiBEcnlydW4gVXRpbGl0eSAtIFJ1biBtYXJ2aW4gZW5naW5lcyBpbiBhIHN0YWRhbG9uZSB3YXlzCAAAAC0tYWN0aW9ucwIAAAAtYXQHAAAAZGVmYXVsdHQDAAAAYWxsdAQAAAB0eXBldAoAAABhY3F1aXNpdG9ydAsAAAB0cHJlcGFyYXRvcnQHAAAAdHJhaW5lcnQJAAAAZXZhbHVhdG9ydAsAAABwcHJlcGFyYXRvcnQJAAAAcHJlZGljdG9ydAgAAABmZWVkYmFja3MZAAAATWFydmluIGVuZ2luZSBhY3Rpb24gbmFtZXMRAAAALS1pbml0aWFsLWRhdGFzZXRzAwAAAC1pZHMZAAAASW5pdGlhbCBkYXRhc2V0IGZpbGUgcGF0aHQGAAAAZXhpc3RzcwkAAAAtLWRhdGFzZXRzAgAAAC1kcxEAAABEYXRhc2V0IGZpbGUgcGF0aHMHAAAALS1tb2RlbHMCAAAALW1zFgAAAEVuZ2luZSBtb2RlbCBmaWxlIHBhdGhzCQAAAC0tbWV0cmljc3MDAAAALW1lcxgAAABFbmdpbmUgTWV0cmljcyBmaWxlIHBhdGhzDQAAAC0tcGFyYW1zLWZpbGVzAwAAAC1wZnMNAAAAZW5naW5lLnBhcmFtc3MeAAAATWFydmluIGVuZ2luZSBwYXJhbXMgZmlsZSBwYXRocw8AAAAtLW1lc3NhZ2VzLWZpbGVzAwAAAC1tZnMPAAAAZW5naW5lLm1lc3NhZ2VzczAAAABNYXJ2aW4gZW5naW5lIHByZWRpY3RvciBpbnB1dCBtZXNzYWdlcyBmaWxlIHBhdGhzDwAAAC0tZmVlZGJhY2stZmlsZXMDAAAALWZmcxEAAABmZWVkYmFjay5tZXNzYWdlc3MvAAAATWFydmluIGVuZ2luZSBmZWVkYmFjayBpbnB1dCBtZXNzYWdlcyBmaWxlIHBhdGhzCgAAAC0tcmVzcG9uc2VzAgAAAC1ydAcAAABpc19mbGFnc1EAAABJZiBlbmFibGUsIHByaW50IHJlc3BvbnNlcyBmcm9tIGVuZ2luZSBvbmxpbmUgYWN0aW9ucyAocHByZXBhcmF0b3IgYW5kIHByZWRpY3RvcilzCwAAAC0tcHJvZmlsaW5ncx8AAABFbmFibGUgZXhlY3V0ZSBtZXRob2QgcHJvZmlsaW5ncwwAAAAtLXNwYXJrLWNvbmZzAgAAAC1jdAYAAABlbnZ2YXJ0DgAAAFNQQVJLX0NPTkZfRElSczoAAABTcGFyayBjb25maWd1cmF0aW9uIGZvbGRlciBwYXRoIHRvIGJlIHVzZWQgaW4gdGhpcyBzZXNzaW9uYwwAAAAMAAAADQAAAEMAAQBzLwAAAHQAAHwAAHwBAHwCAHwDAHwEAHwFAHwGAHwHAHwIAHwJAHwKAHwLAIMMAAFkAABTKAEAAABOKAEAAAB0BgAAAGRyeXJ1bigMAAAAdAMAAABjdHh0BgAAAGFjdGlvbnQLAAAAcGFyYW1zX2ZpbGV0DQAAAG1lc3NhZ2VzX2ZpbGV0DQAAAGZlZWRiYWNrX2ZpbGV0DwAAAGluaXRpYWxfZGF0YXNldHQHAAAAZGF0YXNldHQFAAAAbW9kZWx0BwAAAG1ldHJpY3N0CAAAAHJlc3BvbnNldAoAAABzcGFya19jb25mUgIAAAAoAAAAACgAAAAAc0UAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9lbmdpbmUucHl0CgAAAGRyeXJ1bl9jbGkwAAAAcwIAAAAAE2MMAAAAEQAAABAAAABDAAEAc6kBAAB0AAB0AQBkAQCDAQBkAgAXgwEAAXwKAHIgAHwKAG4ZAHQCAGoDAGoE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AHRlbXBsYXRlc3MNAAAAcHl0aG9uLWVuZ2luZXQPAAAAcHJvamVjdF9wYWNrYWdlcxMAAAB7e3Byb2plY3QucGFja2FnZX19cxIAAABlbmdpbmUtZ2VuZXJhdGVlbnZzSgAAAEdlbmVyYXRlIGEgbmV3IG1hcnZpbiBlbmdpbmUgZW52aXJvbm1lbnQgYW5kIGluc3RhbGwgZGVmYXVsdCByZXF1aXJlbWVudHMucwsAAABlbmdpbmUtcGF0aHMIAAAALS1weXRob25zAgAAAC1wdAYAAABweXRob25zOwAAAFRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgbmV3IGVudmlyb25tZW50YwIAAAAEAAAABAAAAEMAAQBzWwAAAHQAAGoBAGoCAHQAAGoBAGoDAHwAAIMBAIMBAH0CAHQEAHwCAHwAAHwBAIMDAH0DAHQFAHwDAIMBAAF0BgBkAQCDAQABdAYAZAIAagcAfAMAgwEAgwEAAWQAAFMoAwAAAE5zCQAAAApEb25lISEhIXM2AAAATm93IHRvIHdvcmtvbiBpbiB0aGUgbmV3IGVuZ2luZSBwcm9qZWN0IHVzZTogd29ya29uIHt9KAgAAABSLwAAAFIwAAAAdAgAAABiYXNlbmFtZXQHAAAAYWJzcGF0aHQTAAAAX2NyZWF0ZV92aXJ0dWFsX2VudnQOAAAAX2NhbGxfbWFrZV9lbnZSLQAAAFI6AAAAKAQAAAB0CwAAAGVuZ2luZV9wYXRoUqMAAAB0BAAAAGRpcl90CQAAAHZlbnZfbmFtZSgAAAAAKAAAAABzRQAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L2VuZ2luZS5weXQMAAAAZ2VuZXJhdGVfZW52YwEAAHMKAAAAAAQeARIBCgIKAXMPAAAAZW5naW5lLWdlbmVyYXRlc0YAAABHZW5lcmF0ZSBhIG5ldyBtYXJ2aW4gZW5naW5lIHByb2plY3QgYW5kIGluc3RhbGwgZGVmYXVsdCByZXF1aXJlbWVudHMucwYAAAAtLW5hbWVzAgAAAC1udAYAAABwcm9tcHRzDAAAAFByb2plY3QgbmFtZXMNAAAALS1kZXNjcmlwdGlvbnMR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b3gvbWFuYWdlbWVudC9lbmdpbmUucHlSxAAAAD4CAABzBgAAAAABDQEVAXMRAAAAZW5naW5lLWh0dHBzZXJ2ZXJzHQAAAE1hcnZpbiBodHRwIGFwaSBzZXJ2ZXIgc3RhcnRzcwoAAAAtLXByb3RvY29scwMAAAAtcHJzMwAAAE1hcnZpbiBwcm90b2NvbCB0byBiZSBsb2FkZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLnMLAAAALS1odHRwLWhvc3RzAgAAAC1odAkAAABsb2NhbGhvc3RzHgAAAEVuZ2luZSBleGVjdXRvciBodHRwIGJpbmQgaG9zdHMLAAAALS1odHRwLXBvcnRpQB8AAHMZAAAARW5naW5lIGV4ZWN1dG9yIGh0dHAgcG9ydHMPAAAALS1leGVjdXRvci1wYXRocx8AAABNYXJ2aW4gZW5naW5lIGV4ZWN1dG9yIGphciBwYXRocxsAAAAtLWV4dHJhLWV4ZWN1dG9yLXBhcmFtZXRlcnNzBAAAAC1qdm1zOwAAAFVzZSB0byBzZW5kIGV4dHJhIEpWTSBwYXJhbWV0ZXJzIHRvIGVuZ2luZSBleGVjdXRvciBwcm9jZXNzYw8AAAAPAAAAEAAAAEMAAQBzOAAAAHQAAHwAAHwBAHwCAHwDAHwEAHwFAHwGAHwHAHwIAHwJAHwKAHwLAHwMAHwNAHwOAIMPAAFkAABTKAEAAABOKAEAAAB0EQAAAGVuZ2luZV9odHRwc2VydmVyKA8AAABSGQAAAFIaAAAAUhsAAABSHgAAAFIfAAAAUiAAAABSIQAAAHQIAAAAcHJvdG9jb2xSIwAAAHQJAAAAaHR0cF9ob3N0dAkAAABodHRwX3BvcnR0DQAAAGV4ZWN1dG9yX3BhdGhSmgAAAFKbAAAAdBkAAABleHRyYV9leGVjdXRvcl9wYXJhbWV0ZXJzKAAAAAAoAAAAAHNFAAAAL29wdC9tYXJ2aW4vcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvZW5naW5lLnB5dBUAAABlbmdpbmVfaHR0cHNlcnZlcl9jbGlEAgAAcwgAAAAAGAMBDwESAWMPAAAAFQAAAA0AAABDAAEAc3ICAAB0AABqAQBkAQCDAQABZAAAfQ8AZAAAfRAAZAIAhAAAfREA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KTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBvcwppbXBvcnQgY2xpY2sKCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgc2l4CmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKZnJvbSAucGtnIGltcG9ydCBjbGkgYXMgY2xpX3BrZwpmcm9tIC50ZXN0IGltcG9ydCBjbGkgYXMgY2xpX3Rlc3QKZnJvbSAubm90ZWJvb2sgaW1wb3J0IGNsaSBhcyBjbGlfbm90ZWJvb2sKZnJvbSAuaGl2ZSBpbXBvcnQgY2xpIGFzIGNsaV9oaXZlCmZyb20gLmVuZ2luZSBpbXBvcnQgY2xpIGFzIGNsaV9lbmdpbmUKCmZyb20gLi5jb25maWcgaW1wb3J0IHBhcnNlX2luaQpmcm9tIC4ubG9hZGVyIGltcG9ydCBsb2FkX2NvbW1hbmRzX2Zyb21fZmlsZQoKCl9fYWxsX18gPSBbJ2NyZWF0ZV9jbGknXQoKCmxvZ2dlciA9IGdldF9sb2dnZXIoJ21hbmFnZW1lbnQnKQoKVE9PTF9FWENMVURFID0gWydlbmdpbmUtc2VydmVyJywgJ2VuZ2luZS1kcnlydW4nLCAnZW5naW5lLWh0dHBzZXJ2ZXInLCAnZW5naW5lLWdycGNzZXJ2ZXInLCAnZW5naW5lLWRlcGxveScsICdlbmdpbmUtaHR0cHNlcnZlci1yZW1vdGUnLCAncGtnLXNob3d2ZXJzaW9uJ10KUFJPRF9FWENMVURFID0gWyd0ZXN0JywgJ3Rlc3QtdGRkJywgJ3Rlc3QtdG94JywgJ3Rlc3QtY2hlY2twZXA4JywgJ2xhYicsICdub3RlYm9vaycsICdwa2ctYnVtcHZlcnNpb24nLCAncGtnLWNyZWF0ZXRhZycsICdwa2ctc2hvd2NoYW5nZXMnLCAncGtnLXNob3dpbmZvJywgJ3BrZy11cGRhdGVkZXBzJ10KCkVYQ0xVREVfQllfVFlQRSA9IHsKICAgICdweXRob24tZW5naW5lJzogWydlbmdpbmUtZ2VuZXJhdGUnLCAnZW5naW5lLWdlbmVyYXRlZW52J10sCiAgICAndG9vbCc6IFRPT0xfRVhDTFVERQp9CgoKVkVSU0lPTl9NU0cgPSAnJycKICBfXyAgX18gICAgICAgICAgICBfX19fXyBfXyAgICAgIF9fIF9fX19fICBfICAgXyAgICAgICAKIHwgIFwvICB8ICAgIC9cICAgIHwgIF9fIFxcXCBcICAgIC8gL3xfICAgX3x8IFwgfCB8CiB8IFwgIC8gfCAgIC8gIFwgICB8IHxfXykgfFwgXCAgLyAvICAgfCB8ICB8ICBcfCB8IAogfCB8XC98IHwgIC8gL1wgXCAgfCAgXyAgLyAgXCBcLyAvICAgIHwgfCAgfCAuIGAgfCAKIHwgfCAgfCB8IC8gX19fXyBcIHwgfCBcIFwgICBcICAvICAgIF98IHxfIHwgfFwgIHwgCiB8X3wgIHxffC9fLyAgICBcX1x8X3wgIFxfXCAgIFwvICAgIHxfX19fX3x8X3wgXF98IAogICAgICAgICAgICBfICAgIF8gICAgICAgICAgICAgXyAgICAgICAgICAgICAgICAgXyAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgfCB8ICB8IHwgICAgICAgICAgIHwgfCAgICAgICAgICAgICAgIHwgfHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICB8IHxfIHwgfF9fICAgIF9fXyAgfCB8XyAgX19fICAgIF9fXyAgfCB8fCB8X18gICAgX19fIF9fICBfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgIHwgX198fCAnXyBcICAvIF8gXCB8IF9ffC8gXyBcICAvIF8gXCB8IHx8ICdfIFwgIC8gXyBcXCBcLyAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgXyAgXyAgXyAgfCB8XyB8IHwgfCB8fCAgX18vIHwgfF98IChfKSB8fCAoXykgfHwgfHwgfF8pIHx8IChfKSB8PiAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIChfKShfKShfKSAgXF9ffHxffCB8X3wgXF9fX3wgIFxfX3xcX19fLyAgXF9fXy8gfF98fF8uX18vICBcX19fLy9fL1xfXCB2JSh2ZXJzaW9uKXMKJycnCgoKZGVmIGNyZWF0ZV9jbGkocGFja2FnZV9uYW1lLCBwYWNrYWdlX3BhdGgsIHR5cGVfPU5vbmUsIGV4Y2x1ZGU9Tm9uZSwgY29uZmlnPU5vbmUpOgogICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwYWNrYWdlX3BhdGgsICcuLicpKQoKICAgIGlmIGV4Y2x1ZGUgaXMgTm9uZToKICAgICAgICBleGNsdWRlID0gRVhDTFVERV9CWV9UWVBFLmdldCh0eXBlXywgW10pCgogICAgbW9kZV9maWxlID0gb3MucGF0aC5qb2luKGJhc2VfcGF0aCwgJy5kZXYnKQogICAgaWYgdHlwZV8gPT0gJ3Rvb2wnIGFuZCBub3Qgb3MucGF0aC5leGlzdHMobW9kZV9maWxlKToKICAgICAgICBleGNsdWRlID0gZXhjbHVkZSArIFBST0RfRVhDTFVERQoKICAgIGlmIGNvbmZpZyBpcyBOb25lOgogICAgICAgICMgRmluZCB0aGUgaW5pIGRpcmVjdG9yeQogICAgICAgIGluaWZpbGVuYW1lID0gJ21hcnZpbi5pbmknCiAgICAgICAgaW5pZGlyID0gYmFzZV9wYXRoCgogICAgICAgICMgTG9hZCB0aGUgaW5pIGZpbGUKICAgICAgICBpbmlwYXRoID0gb3MucGF0aC5qb2luKGluaWRpciwgaW5pZmlsZW5hbWUpCiAgICAgICAgY29uZmlnX2RlZmF1bHRzID0gewogICAgICAgICAgICAnaW5pZGlyJzogaW5pZGlyLAogICAgICAgICAgICAnbWFydmluX3BhY2thZ2VkaXInOiAne2luaWRpcn0ve21hcnZpbl9wYWNrYWdlfScsCiAgICAgICAgfQogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGluaXBhdGgpOgogICAgICAgICAgICBjb25maWcgPSBwYXJzZV9pbmkoaW5pcGF0aCwgY29uZmlnX2RlZmF1bHRzKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNvbmZpZyA9IHt9CgogICAgZXhjbHVkZSA9IGNvbmZpZy5nZXQoJ21hcnZpbl9leGNsdWRlJywgJywnLmpvaW4oZXhjbHVkZSkpCiAgICBpZiBpc2luc3RhbmNlKGV4Y2x1ZGUsIHN0cik6CiAgICAgICAgZXhjbHVkZSA9IGV4Y2x1ZGUuc3BsaXQoJywnKQoKICAgIEBjbGljay5ncm91cCgnY3VzdG9tJykKICAgIEBjbGljay5vcHRpb24oJy0tZGVidWcnLCBpc19mbGFnPVRydWUsIGhlbHA9J0VuYWJsZSBkZWJ1ZyBtb2RlLicpCiAgICBAY2xpY2sucGFzc19jb250ZXh0CiAgICBkZWYgY2xpKGN0eCwgZGVidWcpOgogICAgICAgIGN0eC5vYmogPSB7CiAgICAgICAgICAgICdkZWJ1Zyc6IGRlYnVnLAogICAgICAgICAgICAncGFja2FnZV9uYW1lJzogcGFja2FnZV9uYW1lLAogICAgICAgICAgICAncGFja2FnZV9wYXRoJzogcGFja2FnZV9wYXRoLAogICAgICAgICAgICAnYmFzZV9wYXRoJzogYmFzZV9wYXRoLAogICAgICAgICAgICAndHlwZSc6IHR5cGVfLAogICAgICAgICAgICAnY29uZmlnJzogY29uZmlnLAogICAgICAgIH0KCiAgICAjIExvYWQgaW50ZXJuYWwgY29tbWFuZHMKICAgIGNvbW1hbmRzID0ge30KICAgIGNvbW1hbmRzLnVwZGF0ZShjbGlfcGtnLmNvbW1hbmRzKQogICAgY29tbWFuZHMudXBkYXRlKGNsaV90ZXN0LmNvbW1hbmRzKQogICAgY29tbWFuZHMudXBkYXRlKGNsaV9ub3RlYm9vay5jb21tYW5kcykKICAgIGNvbW1hbmRzLnVwZGF0ZShjbGlfZW5naW5lLmNvbW1hbmRzKQogICAgY29tbWFuZHMudXBkYXRlKGNsaV9oaXZlLmNvbW1hbmRzKQoKICAgIGZvciBuYW1lLCBjb21tYW5kIGluIGNvbW1hbmRzLml0ZW1zKCk6CiAgICAgICAgaWYgbmFtZSBub3QgaW4gZXhjbHVkZToKICAgICAgICAgICAgY2xpLmFkZF9jb21tYW5kKGNvbW1hbmQsIG5hbWU9bmFtZSkKCiAgICAjIExvYWQgY3VzdG9tIGNvbW1hbmRzIGZyb20gcHJvamVjdCBiZWVuIG1hbmFnZWQKICAgIGNvbW1hbmRzX2ZpbGVfcGF0aHMgPSBbCiAgICAgICAgY29uZmlnLmdldCgnbWFydmluX2NvbW1hbmRzZmlsZScpLAogICAgICAgIG9zLnBhdGguam9pbihiYXNlX3BhdGgsICdtYXJ2aW5fY29tbWFuZHMucHknKSwKICAgICAgICBvcy5wYXRoLmpvaW4oYmFzZV9wYXRoLCAnY29tbWFuZHMucHknKQogICAgXQoKICAgIGZvciBjb21tYW5kc19maWxlX3BhdGggaW4gY29tbWFuZHNfZmlsZV9wYXRoczoKICAgICAgICBpZiBjb21tYW5kc19maWxlX3BhdGggYW5kIG9zLnBhdGguZXhpc3RzKGNvbW1hbmRzX2ZpbGVfcGF0aCk6CiAgICAgICAgICAgIGNvbW1hbmRzID0gbG9hZF9jb21tYW5kc19mcm9tX2ZpbGUoY29tbWFuZHNfZmlsZV9wYXRoKQogICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kczoKICAgICAgICAgICAgICAgIGNsaS5hZGRfY29tbWFuZChjb21tYW5kKQogICAgICAgICAgICBicmVhawoKICAgICMgQWRkIHZlcnNpb24gYW5kIGhlbHAgbWVzc2FnZXMKICAgIGZyb20gLi4gaW1wb3J0IF9fdmVyc2lvbl9fCiAgICBjbGkgPSBjbGljay52ZXJzaW9uX29wdGlvbih2ZXJzaW9uPV9fdmVyc2lvbl9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1WRVJTSU9OX01TRy5yZXBsYWNlKCdcbicsICdcbiAgJykpKGNsaSkKCiAgICBjbGkuaGVscCA9ICdcYnt9XG4nLmZvcm1hdChWRVJTSU9OX01TRyAlIHsndmVyc2lvbic6IF9fdmVyc2lvbl9ffSkKCiAgICByZXR1cm4gY2xpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3Rlc3QucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwNzY0NCAxMzQ2MzMzMzQ2MiAwMjYwNTYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgc3lzCmltcG9ydCBvcwppbXBvcnQgb3MucGF0aAppbXBvcnQgc3VicHJvY2VzcwppbXBvcnQgc2h1dGlsCmltcG9ydCB0ZW1wZmlsZQppbXBvcnQgY2xpY2sKCmZyb20gLnBrZyBpbXBvcnQgY29weQoKCkBjbGljay5ncm91cCgndGVzdCcpCmRlZiBjbGkoKToKICAgIHBhc3MKCgpAY2xpLmNvbW1hbmQoJ3Rlc3QnLCBoZWxwPSdSdW4gdGVzdHMuJykKQGNsaWNrLm9wdGlvbignLS1jb3YvLS1uby1jb3YnLCBkZWZhdWx0PVRydWUpCkBjbGljay5vcHRpb24oJy0tbm8tY2FwdHVyZScsIGlzX2ZsYWc9VHJ1ZSkKQGNsaWNrLm9wdGlvbignLS1wZGInLCBpc19mbGFnPVRydWUpCkBjbGljay5hcmd1bWVudCgnYXJncycsIGRlZmF1bHQ9JycpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIHRlc3QoY3R4LCBjb3YsIG5vX2NhcHR1cmUsIHBkYiwgYXJncyk6CiAgICBvcy5lbnZpcm9uWydURVNUSU5HJ10gPSAndHJ1ZScKCiAgICBpZiBhcmdzOgogICAgICAgIGFyZ3MgPSBhcmdzLnNwbGl0KCcgJykKICAgIGVsc2U6CiAgICAgICAgYXJncyA9IFsndGVzdHMnXQoKICAgIGlmIG5vX2NhcHR1cmU6CiAgICAgICAgYXJncyArPSBbJy0tY2FwdHVyZT1ubyddCgogICAgaWYgcGRiOgogICAgICAgIGFyZ3MgKz0gWyctLXBkYiddCgogICAgY292X2FyZ3MgPSBbXQogICAgaWYgY292OgogICAgICAgIGNvdl9hcmdzICs9IFsnLS1jb3YnLCBvcy5wYXRoLnJlbHBhdGgoY3R4Lm9ialsncGFja2FnZV9wYXRoJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1jdHgub2JqWydiYXNlX3BhdGgnXSksCiAgICAgICAgICAgICAgICAgICAgICctLWNvdi1yZXBvcnQnLCAnaHRtbCcsCiAgICAgICAgICAgICAgICAgICAgICctLWNvdi1yZXBvcnQnLCAneG1sJywKICAgICAgICAgICAgICAgICAgICAgJy0tY292LXJlcG9ydCcsICd0ZXJtLW1pc3NpbmcnLAogICAgICAgICAgICAgICAgICAgICBdCgogICAgY29tbWFuZCA9IFsncHkudGVzdCddICsgY292X2FyZ3MgKyBhcmdzCiAgICBwcmludCgnICcuam9pbihjb21tYW5kKSkKICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCiAgICBleGl0Y29kZSA9IHN1YnByb2Nlc3MuY2FsbChjb21tYW5kLCBjd2Q9Y3R4Lm9ialsnYmFzZV9wYXRoJ10sIGVudj1lbnYpCiAgICBzeXMuZXhpdChleGl0Y29kZSkKCgpAY2xpLmNvbW1hbmQoJ3Rlc3QtdG94JywgaGVscD0nUnVuIHRlc3RzIHVzaW5nIGEgbmV3IHZpcnR1YWxlbnYuJykKQGNsaWNrLmFyZ3VtZW50KCdhcmdzJywgZGVmYXVsdD0nJykKQGNsaWNrLnBhc3NfY29udGV4dApkZWYgdG94KGN0eCwgYXJncyk6CiAgICBvcy5lbnZpcm9uWydURVNUSU5HJ10gPSAndHJ1ZScKCiAgICBpZiBhcmdzOgogICAgICAgIGFyZ3MgPSBbJy1hJ10gKyBhcmdzLnNwbGl0KCcgJykKICAgIGVsc2U6CiAgICAgICAgYXJncyA9IFtdCiAgICAjIENvcHkgdGhlIHByb2plY3QgdG8gYSB0bXAgZGlyCiAgICB0bXBfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICB0b3hfZGlyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsIGN0eC5vYmpbJ3BhY2thZ2VfbmFtZSddKQogICAgY29weShjdHgub2JqWydiYXNlX3BhdGgnXSwgdG94X2RpcikKICAgIGNvbW1hbmQgPSBbJ3B5dGhvbicsICdzZXR1cC5weScsICd0ZXN0J10gKyBhcmdzCiAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgZXhpdGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoY29tbWFuZCwgY3dkPXRveF9kaXIsIGVudj1lbnYpCiAgICBzaHV0aWwucm10cmVlKHRtcF9kaXIpCiAgICBzeXMuZXhpdChleGl0Y29kZSkKCgpAY2xpLmNvbW1hbmQoJ3Rlc3QtdGRkJywgaGVscD0nV2F0Y2ggZm9yIGNoYW5nZXMgdG8gcnVuIHRlc3RzIGF1dG9tYXRpY2FsbHkuJykKQGNsaWNrLm9wdGlvbignLS1jb3YvLS1uby1jb3YnLCBkZWZhdWx0PUZhbHNlKQpAY2xpY2sub3B0aW9uKCctLW5vLWNhcHR1cmUnLCBpc19mbGFnPVRydWUpCkBjbGljay5vcHRpb24oJy0tcGRiJywgaXNfZmxhZz1UcnVlKQpAY2xpY2sub3B0aW9uKCctLXBhcnRpYWwnLCBpc19mbGFnPVRydWUpCkBjbGljay5hcmd1bWVudCgnYXJncycsIGRlZmF1bHQ9JycpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIHRkZChjdHgsIGNvdiwgbm9fY2FwdHVyZSwgcGRiLCBwYXJ0aWFsLCBhcmdzKToKICAgIG9zLmVudmlyb25bJ1RFU1RJTkcnXSA9ICd0cnVlJwoKICAgIGlmIGFyZ3M6CiAgICAgICAgYXJncyA9IGFyZ3Muc3BsaXQoJyAnKQogICAgZWxzZToKICAgICAgICBhcmdzID0gW29zLnBhdGgucmVscGF0aCgKICAgICAgICAgICAgb3MucGF0aC5qb2luKGN0eC5vYmpbJ2Jhc2VfcGF0aCddLCAndGVzdHMnKSldCgogICAgaWYgbm9fY2FwdHVyZToKICAgICAgICBhcmdzICs9IFsnLS1jYXB0dXJlPW5vJ10KCiAgICBpZiBwZGI6CiAgICAgICAgYXJncyArPSBbJy0tcGRiJ10KCiAgICBpZiBwYXJ0aWFsOgogICAgICAgIGFyZ3MgKz0gWyctLXRlc3Rtb24nXQoKICAgIGNvdl9hcmdzID0gW10KICAgIGlmIGNvdjoKICAgICAgICBjb3ZfYXJncyArPSBbJy0tY292Jywgb3MucGF0aC5yZWxwYXRoKGN0eC5vYmpbJ3BhY2thZ2VfcGF0aCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9Y3R4Lm9ialsnYmFzZV9wYXRoJ10pLAogICAgICAgICAgICAgICAgICAgICAnLS1jb3YtcmVwb3J0JywgJ2h0bWwnLAogICAgICAgICAgICAgICAgICAgICAnLS1jb3YtcmVwb3J0JywgJ3htbCcsCiAgICAgICAgICAgICAgICAgICAgICctLWNvdi1yZXBvcnQnLCAndGVybS1taXNzaW5nJywKICAgICAgICAgICAgICAgICAgICAgXQoKICAgIGNvbW1hbmQgPSBbJ3B0dycsICctcCcsICctLSddICsgY292X2FyZ3MgKyBhcmdzCiAgICBwcmludCgnICcuam9pbihjb21tYW5kKSkKICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCiAgICBleGl0Y29kZSA9IHN1YnByb2Nlc3MuY2FsbChjb21tYW5kLCBjd2Q9Y3R4Lm9ialsnYmFzZV9wYXRoJ10sIGVudj1lbnYpCiAgICBzeXMuZXhpdChleGl0Y29kZSkKCgpAY2xpLmNvbW1hbmQoJ3Rlc3QtY2hlY2twZXA4JywgaGVscD0nQ2hlY2sgcHl0aG9uIGNvZGUgc3R5bGUuJykKQGNsaWNrLnBhc3NfY29udGV4dApkZWYgcGVwOChjdHgpOgogICAgY29tbWFuZCA9IFsncGVwOCcsIGN0eC5vYmpbJ3BhY2thZ2VfbmFtZSddXQogICAgZXhpdGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoY29tbWFuZCwgY3dkPWN0eC5vYmpbJ2Jhc2VfcGF0aCddKQogICAgaWYgZXhpdGNvZGUgPT0gMDoKICAgICAgICBwcmludCgnQ29uZ3JhdHVsYXRpb25zISBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuJykKICAgIHN5cy5leGl0KGV4aXRjb2RlKQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L2hpdmUucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDA3MjU1MCAxMzQ2MzMzMzQ2MiAwMjYwMzAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmltcG9ydCBjbGljawppbXBvcnQgdGltZQppbXBvcnQgb3MKaW1wb3J0IHJlCmltcG9ydCBzeXMKaW1wb3J0IGpzb24KZnJvbSBwYXJhbWlrbyBpbXBvcnQgU1NIQ2xpZW50LCBBdXRvQWRkUG9saWN5CmZyb20gcHloaXZlIGltcG9ydCBoaXZlCmZyb20gc2x1Z2lmeSBpbXBvcnQgc2x1Z2lmeQppbXBvcnQgaGFzaGxpYgoKZnJvbSAuLl9sb2dnaW5nIGltcG9ydCBnZXRfbG9nZ2VyCgpmcm9tIC4uX2NvbXBhdGliaWxpdHkgaW1wb3J0IHNpeAoKCmxvZ2dlciA9IGdldF9sb2dnZXIoJ21hbmFnZW1lbnQuaGl2ZScpCgoKQGNsaWNrLmdyb3VwKCdoaXZlJykKZGVmIGNsaSgpOgogICAgcGFzcwoKCkBjbGkuY29tbWFuZCgnaGl2ZS1nZW5lcmF0ZWNvbmYnLCBoZWxwPSdHZW5lcmF0ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZScpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIGhpdmVfZ2VuZXJhdGVjb25mX2NsaShjdHgpOgogICAgaGl2ZV9nZW5lcmF0ZWNvbmYoY3R4KQoKCmRlZiBoaXZlX2dlbmVyYXRlY29uZihjdHgpOgogICAgZGVmYXVsdF9jb25mID0gW3sKICAgICAgICAib3JpZ2luX2hvc3QiOiAieHh4X2hvc3RfbmFtZSIsCiAgICAgICAgIm9yaWdpbl9kYiI6ICJ4eHhfZGJfbmFtZSIsCiAgICAgICAgIm9yaWdpbl9xdWV1ZSI6ICJtYXJ2aW4iLAogICAgICAgICJ0YXJnZXRfdGFibGVfbmFtZSI6ICJ4eHhfdGFibGVfbmFtZSIsCiAgICAgICAgInNhbXBsZV9zcWwiOiAiU0VMRUNUICogRlJPTSBYWFgiLAogICAgICAgICJzcWxfaWQiOiAiMSIKICAgIH1dCgogICAgd2l0aCBvcGVuKCdoaXZlX2RhdGFpbXBvcnQuY29uZicsICd3JykgYXMgb3V0ZmlsZToKICAgICAgICBqc29uLmR1bXAoZGVmYXVsdF9jb25mLCBvdXRmaWxlLCBpbmRlbnQ9MikKCiAgICBwcmludCgiRG9uZSEhISIpCgoKQGNsaS5jb21tYW5kKCdoaXZlLXJlc2V0cmVtb3RlJywgaGVscD0nRHJvcCBhbGwgcmVtb3RlIHRhYmxlcyBmcm9tIGluZm9ybWVkIGVuZ2luZSBvbiBob3N0JykKQGNsaWNrLm9wdGlvbignLS1ob3N0JywgJy1oJywgZGVmYXVsdD0nbWFydmluLWhhZG9vcCcpCkBjbGljay5vcHRpb24oJy0tcXVldWUnLCAnLWgnLCBkZWZhdWx0PSdkZWZhdWx0JykKQGNsaWNrLm9wdGlvbignLS1lbmdpbmUnLCBkZWZhdWx0PShvcy5wYXRoLnJlbHBhdGgoIi4iLCAiLi4iKSksIGhlbHA9J01hcnZpbiBlbmdpbmUgbmFtZSAoZGVmYXVsdCBpcyB0aGUgY3VycmVudCBmb2xkZXIpJykKQGNsaWNrLnBhc3NfY29udGV4dApkZWYgaGl2ZV9yZXNldHJlbW90ZV9jbGkoY3R4LCBob3N0LCBlbmdpbmUsIHF1ZXVlKToKICAgIGhpdmVfcmVzZXRyZW1vdGUoY3R4LCBob3N0LCBlbmdpbmUsIHF1ZXVlKQoKCmRlZiBoaXZlX3Jlc2V0cmVtb3RlKGN0eCwgaG9zdCwgZW5naW5lLCBxdWV1ZSk6CiAgICBoZGkgPSBIaXZlRGF0YUltcG9ydGVyKAogICAgICAgIGVuZ2luZT1lbmdpbmUsCiAgICAgICAgb3JpZ2luX2hvc3Q9aG9zdCwKICAgICAgICBvcmlnaW5fcXVldWU9cXVldWUsCiAgICAgICAgb3JpZ2luX2RiPU5vbmUsCiAgICAgICAgdGFyZ2V0X3RhYmxlX25hbWU9Tm9uZSwKICAgICAgICBzYW1wbGVfc3FsPU5vbmUsCiAgICAgICAgbWF4X3F1ZXJ5X3NpemU9Tm9uZSwKICAgICAgICBkZXN0aW5hdGlvbl9ob3N0PU5vbmUsCiAgICAgICAgZGVzdGluYXRpb25fcG9ydD1Ob25lLAogICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfdXNlcm5hbWU9J3ZhZ3JhbnQnLAogICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQ9J3ZhZ3JhbnQnLAogICAgICAgIGRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoPScvdXNlci9oaXZlL3dhcmVob3VzZS8nLAogICAgICAgIHNxbF9pZD1Ob25lCiAgICApCiAgICBoZGkucmVzZXRfcmVtb3RlX3RhYmxlcygpCgoKQGNsaS5jb21tYW5kKAogICAgJ2hpdmUtZGF0YWltcG9ydCcsCiAgICBoZWxwPSdFeHBvcnQgYW5kIGltcG9ydCBkYXRhIHNhbXBsZXMgZnJvbSBhIGhpdmUgZGF0YWJzZSB0byB0aGUgaGl2ZSBydW5uaW5nIGluIHRoaXMgdG9vbGJveCwgY2xvbmluZyBzYW1lIGRhdGEgc3RydWN0dXJlIChkYiBhbmQgdGFibGUpLicpCkBjbGljay5vcHRpb24oJy0tZGVzdGluYXRpb24taGRmcy1yb290LXBhdGgnLCAnLWhkZnMnLCBkZWZhdWx0PScvdXNlci9oaXZlL3dhcmVob3VzZS8nKQpAY2xpY2sub3B0aW9uKCctLWRlc3RpbmF0aW9uLWhvc3QtcGFzc3dvcmQnLCAnLXAnLCBkZWZhdWx0PSd2YWdyYW50JykKQGNsaWNrLm9wdGlvbignLS1kZXN0aW5hdGlvbi1ob3N0LXVzZXJuYW1lJywgJy11JywgZGVmYXVsdD0ndmFncmFudCcpCkBjbGljay5vcHRpb24oJy0tZGVzdGluYXRpb24taG9zdCcsICctZGgnLCBkZWZhdWx0PSdtYXJ2aW4taGFkb29wJykKQGNsaWNrLm9wdGlvbignLS1kZXN0aW5hdGlvbi1wb3J0JywgJy1kcCcsIGRlZmF1bHQ9MjIpCkBjbGljay5vcHRpb24oJy0tbWF4LXF1ZXJ5LXNpemUnLCAnLXMnLCBkZWZhdWx0PSg1MCAqIDEwMjQgKiAxMDI0KSwgaGVscD0nTWF4IHF1ZXJ5IHNpemUgaW4gYnl0ZXMnKQpAY2xpY2sub3B0aW9uKCctLWZvcmNlJywgaXNfZmxhZz1UcnVlLCBoZWxwPSdGb3JjZSB0YWJsZSBjcmVhdGlvbiBldmVuIHRhYmxlIGFscmVhZHkgZXhpc3RzIGluIGRlc3RpbmF0aW9uJykKQGNsaWNrLm9wdGlvbignLS1mb3JjZS1yZW1vdGUnLCBpc19mbGFnPVRydWUsIGhlbHA9J0ZvcmNlIHJlbW90ZSB0ZW1wIHRhYmxlIGNyZWF0aW9uIGV2ZW4gdGFibGUgYWxyZWFkeSBleGlzdHMgaW4gb3JpZ2luJykKQGNsaWNrLm9wdGlvbignLS12YWxpZGF0ZScsIGlzX2ZsYWc9VHJ1ZSwgaGVscD0nVmFsaWRhdGUgdGhlIHF1ZXJ5IHNhbXBsZScpCkBjbGljay5vcHRpb24oJy0tZm9yY2UtY29weS1maWxlcycsIGlzX2ZsYWc9VHJ1ZSwgaGVscD0nRm9yY2UgdGhlIGhkZnMgZmlsZXMgY29weSBwcm9jZWR1cmUnKQpAY2xpY2sub3B0aW9uKCctLXNraXAtcmVtb3RlLXByZXBhcmF0aW9uJywgaXNfZmxhZz1UcnVlLCBoZWxwPSdTa2lwIHRoZSBjcmVhdGlvbiBvZiByZW1vdGUgdGVtcCB0YWJsZScpCkBjbGljay5vcHRpb24oJy0tZW5naW5lJywgZGVmYXVsdD0ob3MucGF0aC5yZWxwYXRoKCIuIiwgIi4uIikpLCBoZWxwPSdNYXJ2aW4gZW5naW5lIG5hbWUgKGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZm9sZGVyKScpCkBjbGljay5vcHRpb24oJy0tc3FsLWlkJywgJy1xJywgaGVscD0nSWYgaW5mb3JtZWQgdGhlIHByb2Nlc3Mgd2lsbCBiZSBhcHBsaWVkIGV4Y2x1c2l2ZWxseSBmb3IgdGhpcyBzYW1wbGUgc3FsJykKQGNsaWNrLm9wdGlvbignLS1jb25mJywgJy1jJywgZGVmYXVsdD0naGl2ZV9kYXRhaW1wb3J0LmNvbmYnLCBoZWxwPSdIaXZlIGRhdGEgaW1wb3J0IGNvbmZpZ3VyYXRpb24gZmlsZScpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIGhpdmVfZGF0YWltcG9ydF9jbGkoCiAgICBjdHgsIGNvbmYsIHNxbF9pZCwgZW5naW5lLCBza2lwX3JlbW90ZV9wcmVwYXJhdGlvbiwgZm9yY2VfY29weV9maWxlcywgdmFsaWRhdGUsIGZvcmNlLAogICAgZm9yY2VfcmVtb3RlLCBtYXhfcXVlcnlfc2l6ZSwgZGVzdGluYXRpb25faG9zdCwgZGVzdGluYXRpb25fcG9ydCwgZGVzdGluYXRpb25faG9zdF91c2VybmFtZSwKICAgIGRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQsIGRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoCik6CiAgICBoaXZlX2RhdGFpbXBvcnQoCiAgICAgICAgY3R4LCBjb25mLCBzcWxfaWQsIGVuZ2luZSwgc2tpcF9yZW1vdGVfcHJlcGFyYXRpb24sIGZvcmNlX2NvcHlfZmlsZXMsIHZhbGlkYXRlLCBmb3JjZSwKICAgICAgICBmb3JjZV9yZW1vdGUsIG1heF9xdWVyeV9zaXplLCBkZXN0aW5hdGlvbl9ob3N0LCBkZXN0aW5hdGlvbl9wb3J0LCBkZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lLAogICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQsIGRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoCiAgICApCgpkZWYgaGl2ZV9kYXRhaW1wb3J0KAogICAgY3R4LCBjb25mLCBzcWxfaWQsIGVuZ2luZSwgc2tpcF9yZW1vdGVfcHJlcGFyYXRpb24sIGZvcmNlX2NvcHlfZmlsZXMsIHZhbGlkYXRlLCBmb3JjZSwKICAgIGZvcmNlX3JlbW90ZSwgbWF4X3F1ZXJ5X3NpemUsIGRlc3RpbmF0aW9uX2hvc3QsIGRlc3RpbmF0aW9uX3BvcnQsIGRlc3RpbmF0aW9uX2hvc3RfdXNlcm5hbWUsCiAgICBkZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkLCBkZXN0aW5hdGlvbl9oZGZzX3Jvb3RfcGF0aAopOgoKICAgIGluaXRpYWxfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCgogICAgY29uZnMgPSByZWFkX2NvbmZpZyhmaWxlbmFtZT1jb25mKQoKICAgIGlmIGNvbmZzOgogICAgICAgIHByaW50KGNocigyNykgKyAiWzJKIikKCiAgICAgICAgaWYgc3FsX2lkOgogICAgICAgICAgICBjb25mcyA9IFt4IGZvciB4IGluIGNvbmZzIGlmIHhbJ3NxbF9pZCddID09IHNxbF9pZF0KCiAgICAgICAgZm9yIGNvbmYgaW4gY29uZnM6CiAgICAgICAgICAgIGhkaSA9IEhpdmVEYXRhSW1wb3J0ZXIoCiAgICAgICAgICAgICAgICBtYXhfcXVlcnlfc2l6ZT1tYXhfcXVlcnlfc2l6ZSwKICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX2hvc3Q9ZGVzdGluYXRpb25faG9zdCwKICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX3BvcnQ9ZGVzdGluYXRpb25fcG9ydCwKICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfdXNlcm5hbWU9ZGVzdGluYXRpb25faG9zdF91c2VybmFtZSwKICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQ9ZGVzdGluYXRpb25faG9zdF9wYXNzd29yZCwKICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoPWRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoLAogICAgICAgICAgICAgICAgZW5naW5lPWVuZ2luZSwKICAgICAgICAgICAgICAgICoqY29uZikKCiAgICAgICAgICAgIGlmIGZvcmNlOgogICAgICAgICAgICAgICAgdGFibGVfZXhpc3RzID0gRmFsc2UKCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB0YWJsZV9leGlzdHMgPSBoZGkudGFibGVfZXhpc3RzKGhvc3Q9aGRpLmRlc3RpbmF0aW9uX2hvc3QsIGRiPWhkaS5vcmlnaW5fZGIsIHRhYmxlPWhkaS50YXJnZXRfdGFibGVfbmFtZSkKCiAgICAgICAgICAgIGlmIG5vdCB0YWJsZV9leGlzdHM6CiAgICAgICAgICAgICAgICBoZGkuaW1wb3J0X3NhbXBsZSgKICAgICAgICAgICAgICAgICAgICBjcmVhdGVfdGVtcF90YWJsZT0obm90IHNraXBfcmVtb3RlX3ByZXBhcmF0aW9uKSwKICAgICAgICAgICAgICAgICAgICBjb3B5X2ZpbGVzPWZvcmNlX2NvcHlfZmlsZXMsCiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfcXVlcnk9dmFsaWRhdGUsCiAgICAgICAgICAgICAgICAgICAgZm9yY2VfY3JlYXRlX3JlbW90ZV90YWJsZT1mb3JjZV9yZW1vdGUsCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcHJpbnQgKCJUYWJsZSB7fSBhbHJlYWR5IGV4aXN0cywgc2tpcGluZyBkYXRhIGltcG9ydC4gVXNlIC0tZm9yY2UgZmxhZyB0byBmb3JjZSBkYXRhIGltcG9ydGF0aW9uIi5mb3JtYXQoaGRpLmZ1bGxfdGFibGVfbmFtZSkpCgogICAgICAgIHByaW50KCJUb3RhbCBUaW1lIDogezouMmZ9cyIuZm9ybWF0KHRpbWUudGltZSgpIC0gaW5pdGlhbF9zdGFydF90aW1lKSkKCiAgICAgICAgcHJpbnQoIlxuIikKCgpkZWYgcmVhZF9jb25maWcoZmlsZW5hbWUpOgogICAgZm5hbWUgPSBvcy5wYXRoLmpvaW4oIiIsIGZpbGVuYW1lKQogICAgaWYgb3MucGF0aC5leGlzdHMoZm5hbWUpOgogICAgICAgIHdpdGggb3BlbihmbmFtZSwgJ3InKSBhcyBmcDoKICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZChmcCkKICAgIGVsc2U6CiAgICAgICAgcHJpbnQoIkNvbmZpZ3VyYXRpb24gZmlsZSB7fSBkb2Vzbid0IGV4aXN0cy4uLiIuZm9ybWF0KGZpbGVuYW1lKSkKICAgICAgICByZXR1cm4ge30KCgpjbGFzcyBIaXZlRGF0YUltcG9ydGVyKCk6CiAgICBkZWYgX19pbml0X18oCiAgICAgICAgc2VsZiwgb3JpZ2luX2hvc3QsIG9yaWdpbl9kYiwgb3JpZ2luX3F1ZXVlLCB0YXJnZXRfdGFibGVfbmFtZSwgc2FtcGxlX3NxbCwgZW5naW5lLAogICAgICAgIG1heF9xdWVyeV9zaXplLCBkZXN0aW5hdGlvbl9ob3N0LCBkZXN0aW5hdGlvbl9wb3J0LCBkZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lLCBkZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkLAogICAgICAgIGRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoLCBzcWxfaWQKICAgICk6CgogICAgICAgIHNlbGYuc3FsX2lkID0gc3FsX2lkCiAgICAgICAgc2VsZi5vcmlnaW5faG9zdCA9IG9yaWdpbl9ob3N0CiAgICAgICAgc2VsZi5vcmlnaW5fZGIgPSBvcmlnaW5fZGIKICAgICAgICBzZWxmLm9yaWdpbl9xdWV1ZSA9IG9yaWdpbl9xdWV1ZQogICAgICAgIHNlbGYudGFyZ2V0X3RhYmxlX25hbWUgPSB0YXJnZXRfdGFibGVfbmFtZQogICAgICAgIHNlbGYuc2FtcGxlX3NxbCA9IHNhbXBsZV9zcWwKICAgICAgICBzZWxmLmVuZ2luZSA9IGVuZ2luZQogICAgICAgIHNlbGYuZGVzdGluYXRpb25faG9zdCA9IGRlc3RpbmF0aW9uX2hvc3QKICAgICAgICBzZWxmLmRlc3RpbmF0aW9uX3BvcnQgPSBkZXN0aW5hdGlvbl9wb3J0CiAgICAgICAgc2VsZi5kZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lID0gZGVzdGluYXRpb25faG9zdF91c2VybmFtZQogICAgICAgIHNlbGYuZGVzdGluYXRpb25faG9zdF9wYXNzd29yZCA9IGRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQKICAgICAgICBzZWxmLmRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoID0gZGVzdGluYXRpb25faGRmc19yb290X3BhdGgKCiAgICAgICAgc2VsZi50ZW1wX2RiX25hbWUgPSAnbWFydmluJwogICAgICAgIHNlbGYubWF4X3F1ZXJ5X3NpemUgPSBtYXhfcXVlcnlfc2l6ZQoKICAgICAgICBzZWxmLnN1cHBvcnRlZF9mb3JtYXRfdHlwZXMgPSB7CiAgICAgICAgICAgICdUZXh0SW5wdXRGb3JtYXQnOiAnVEVYVEZJTEUnLAogICAgICAgICAgICAnU2VxdWVuY2VGaWxlSW5wdXRGb3JtYXQnOiAnU0VRVUVOQ0VGSUxFJywKICAgICAgICAgICAgJ09yY0lucHV0Rm9ybWF0JzogJ09SQycsCiAgICAgICAgICAgICdNYXByZWRQYXJxdWV0SW5wdXRGb3JtYXQnOiAnUEFSUVVFVCcsCiAgICAgICAgICAgICdBdnJvQ29udGFpbmVySW5wdXRGb3JtYXQnOiAnQVZSTycsCiAgICAgICAgICAgICdSQ0ZpbGVJbnB1dEZvcm1hdCc6ICdSQ0ZJTEUnCiAgICAgICAgfQoKICAgICAgICBwcmludCgiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQogICAgICAgIHByaW50KCJJbml0aWFsaXppbmcgcHJvY2VzcyBmb3Igc3FsX2lkIFt7fV06Ii5mb3JtYXQoc2VsZi5zcWxfaWQpKQogICAgICAgIHByaW50KCIgICAgIE9yaWdpbiAtLT4iKQogICAgICAgIHByaW50KCIgICAgICAgICBIb3N0OiAgICAgICBbe31dIi5mb3JtYXQoc2VsZi5vcmlnaW5faG9zdCkpCiAgICAgICAgcHJpbnQoIiAgICAgICAgIERhdGFCYXNlOiAgIFt7fV0iLmZvcm1hdChzZWxmLm9yaWdpbl9kYikpCiAgICAgICAgcHJpbnQoIiAgICAgICAgIFRhYmxlIE5hbWU6IFt7fV0iLmZvcm1hdChzZWxmLnRhcmdldF90YWJsZV9uYW1lKSkKICAgICAgICBwcmludCgiICAgICAgICAgU2FtcGxlIFNRTDogW3t9XSIuZm9ybWF0KHNlbGYuc2FtcGxlX3NxbCkpCiAgICAgICAgcHJpbnQoIlxuIikKICAgICAgICBwcmludCgiICAgICBEZXN0aW5hdGlvbiAtLT4iKQogICAgICAgIHByaW50KCIgICAgICAgICBIb3N0OiAgICAgICBbe31dIi5mb3JtYXQoc2VsZi5kZXN0aW5hdGlvbl9ob3N0KSkKICAgICAgICBwcmludCgiICAgICAgICAgRGF0YUJhc2U6ICAgW3t9XSIuZm9ybWF0KHNlbGYub3JpZ2luX2RiKSkKICAgICAgICBwcmludCgiICAgICAgICAgVGFibGUgTmFtZTogW3t9XSIuZm9ybWF0KHNlbGYudGFyZ2V0X3RhYmxlX25hbWUpKQogICAgICAgIHByaW50KCJcbiIpCgogICAgZGVmIHZhbGlkYWRlX3F1ZXJ5KHNlbGYpOgogICAgICAgICMgY3JlYXRpbmcgY29ubmVjdGlvbnMKICAgICAgICBwcmludCgiQ29ubmVjdGluZyB3aXRoIHt9IGRhdGFiYXNlIG9uIHt9IC4uICIuZm9ybWF0KHNlbGYub3JpZ2luX2RiLCBzZWxmLm9yaWdpbl9ob3N0KSkKICAgICAgICBjb25uX29yaWdpbiA9IHNlbGYuZ2V0X2Nvbm5lY3Rpb24oaG9zdD1zZWxmLm9yaWdpbl9ob3N0LCBkYj1zZWxmLm9yaWdpbl9kYiwgcXVldWU9c2VsZi5vcmlnaW5fcXVldWUpCgogICAgICAgIHByaW50KCJDb3VudGluZyBzYW1wbGUgc3FsIC4uLiIpCiAgICAgICAgdG90YWxfcm93cyA9IHNlbGYuY291bnRfcm93cyhjb25uPWNvbm5fb3JpZ2luLCBzcWw9c2VsZi5zYW1wbGVfc3FsKQogICAgICAgIHByaW50KCJGb3VuZCBbe31dIHJvd3MhIi5mb3JtYXQodG90YWxfcm93cykpCgogICAgICAgIHByaW50KCJSZXRyaWV2ZSBkYXRhIHNhbXBsZSBmb3IgcXVlcnkgZXN0aW1hdGlvbiByZWFzb25zLi4uIikKICAgICAgICBkYXRhX3NhbXBsZSA9IHNlbGYucmV0cmlldmVfZGF0YV9zYW1wbGUoY29ubj1jb25uX29yaWdpbiwgZnVsbF90YWJsZV9uYW1lPXNlbGYuZnVsbF90YWJsZV9uYW1lKQogICAgICAgIHByaW50KCJDYWxjdWxhdGVkIFt7fV0gYnl0ZXMgcGVyIHJvdyEiLmZvcm1hdChkYXRhX3NhbXBsZVsnZXN0aW1hdGVfcXVlcnlfbWVhbl9wZXJfbGluZSddKSkKCiAgICAgICAgZXN0aW1hdGVkX3NpemUgPSBkYXRhX3NhbXBsZVsnZXN0aW1hdGVfcXVlcnlfbWVhbl9wZXJfbGluZSddICogdG90YWxfcm93cwoKICAgICAgICBwcmludCAoIkVzdGltYXRlZCBxdWVyeSBzaXplIGlzIDoge30gYnl0ZXMiLmZvcm1hdChlc3RpbWF0ZWRfc2l6ZSkpCiAgICAgICAgcHJpbnQgKCJNYXggcGVybWl0ZWQgcXVlcnkgc2l6ZSBpczoge30gYnl0ZXMiLmZvcm1hdChzZWxmLm1heF9xdWVyeV9zaXplKSkKCiAgICAgICAgcmV0dXJuIGVzdGltYXRlZF9zaXplIDw9IHNlbGYubWF4X3F1ZXJ5X3NpemUKCiAgICBkZWYgdGFibGVfZXhpc3RzKHNlbGYsIGhvc3QsIGRiLCB0YWJsZSk6CiAgICAgICAgcHJpbnQoIlZlcmlmaXlpbmcgaWYgdGFibGUge30ue30gZXhpc3RzIG9uIHt9IC4uLiIuZm9ybWF0KGRiLCB0YWJsZSwgaG9zdCkpCiAgICAgICAgbG9jYWxfY29ubiA9IHNlbGYuZ2V0X2Nvbm5lY3Rpb24oaG9zdD1ob3N0KQogICAgICAgIGN1cnNvciA9IGxvY2FsX2Nvbm4uY3Vyc29yKCkKCiAgICAgICAgY3Vyc29yLmV4ZWN1dGUoIlNIT1cgREFUQUJBU0VTIExJS0UgJ3t9JyIuZm9ybWF0KGRiKSkKICAgICAgICBkYnMgPSBjdXJzb3IuZmV0Y2hhbGwoKQogICAgICAgIHNlbGYuc2hvd19sb2coY3Vyc29yKQoKICAgICAgICBpZiBub3QgbGVuKGRicykgPT0gMToKICAgICAgICAgICAgdGFibGVfZXhpc3RzID0gRmFsc2UKICAgICAgICBlbHNlOgogICAgICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiVVNFIHt9ICIuZm9ybWF0KGRiKSkKCiAgICAgICAgICAgIGN1cnNvci5leGVjdXRlKCJTSE9XIFRBQkxFUyBMSUtFICd7fSciLmZvcm1hdCh0YWJsZSkpCiAgICAgICAgICAgIHRicyA9IGN1cnNvci5mZXRjaGFsbCgpCiAgICAgICAgICAgIHNlbGYuc2hvd19sb2coY3Vyc29yKQoKICAgICAgICAgICAgaWYgbm90IGxlbih0YnMpID09IDE6CiAgICAgICAgICAgICAgICB0YWJsZV9leGlzdHMgPSBGYWxzZQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdGFibGVfZXhpc3RzID0gVHJ1ZQoKICAgICAgICBjdXJzb3IuY2xvc2UoKQogICAgICAgIHJldHVybiB0YWJsZV9leGlzdHMKCiAgICBkZWYgcmVzZXRfcmVtb3RlX3RhYmxlcyhzZWxmKToKICAgICAgICBzZWxmLnByaW50X3N0YXJ0X3N0ZXAobmFtZT0iUmVzZXQgUmVtb3RlIFRhYmxlcyBmb3Ige30iLmZvcm1hdChzZWxmLnRlbXBfdGFibGVfcHJlZml4KSwgc3RlcF9udW1iZXI9MSwgdG90YWxfc3RlcHM9MSkKCiAgICAgICAgcHJpbnQoIkNvbm5lY3Rpbmcgd2l0aCB7fSBkYXRhYmFzZSBvbiB7fSAuLiAiLmZvcm1hdChzZWxmLnRlbXBfZGJfbmFtZSwgc2VsZi5vcmlnaW5faG9zdCkpCiAgICAgICAgcmVtb3RlX3RlbXBfZGJfY29ubiA9IHNlbGYuZ2V0X2Nvbm5lY3Rpb24oaG9zdD1zZWxmLm9yaWdpbl9ob3N0LCBkYj1zZWxmLnRlbXBfZGJfbmFtZSwgcXVldWU9c2VsZi5vcmlnaW5fcXVldWUpCgogICAgICAgIGN1cnNvciA9IHJlbW90ZV90ZW1wX2RiX2Nvbm4uY3Vyc29yKCkKICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiU0hPVyBUQUJMRVMgTElLRSAne30qJyIuZm9ybWF0KHNlbGYudGVtcF90YWJsZV9wcmVmaXgpKQogICAgICAgIHRicyA9IGN1cnNvci5mZXRjaGFsbCgpCiAgICAgICAgc2VsZi5zaG93X2xvZyhjdXJzb3IpCiAgICAgICAgY3Vyc29yLmNsb3NlKCkKCiAgICAgICAgdmFsaWRfdGJzID0gW3RiWzBdIGZvciB0YiBpbiB0YnNdCgogICAgICAgIGlmIHZhbGlkX3RiczoKICAgICAgICAgICAgcHJpbnQoIkZvdW5kIHt9IHRhYmxlcyBmb3IgZGVsZXRpb24uLi4uIi5mb3JtYXQobGVuKHRicykpKQoKICAgICAgICAgICAgZm9yIHRiIGluIHZhbGlkX3RiczoKICAgICAgICAgICAgICAgIHRhYmxlX25hbWUgPSAie30ue30iLmZvcm1hdChzZWxmLnRlbXBfZGJfbmFtZSwgdGIpCiAgICAgICAgICAgICAgICBwcmludCgiRHJvcHBpbmcgdGFibGUge30gb24ge30gLi4gIi5mb3JtYXQodGFibGVfbmFtZSwgc2VsZi5vcmlnaW5faG9zdCkpCiAgICAgICAgICAgICAgICBzZWxmLmRyb3BfdGFibGUoY29ubj1yZW1vdGVfdGVtcF9kYl9jb25uLCB0YWJsZV9uYW1lPXRhYmxlX25hbWUpCgogICAgICAgICAgICAgICAgaGRmc19sb2NhdGlvbiA9IHNlbGYuZ2VuZXJhdGVfdGFibGVfbG9jYXRpb24oc2VsZi5kZXN0aW5hdGlvbl9oZGZzX3Jvb3RfcGF0aCwgc2VsZi5vcmlnaW5faG9zdCwgc2VsZi50ZW1wX2RiX25hbWUgKyAnLmRiJywgdGIpCiAgICAgICAgICAgICAgICBwcmludCgiUmVtb3ZpbmcgaGRmcyBmaWxlcyBmcm9tIHt9IC4uICIuZm9ybWF0KGhkZnNfbG9jYXRpb24pKQoKICAgICAgICAgICAgICAgIHNzaCA9IHNlbGYuX2dldF9zc2hfY2xpZW50KHNlbGYub3JpZ2luX2hvc3QsIHNlbGYuZGVzdGluYXRpb25faG9zdF91c2VybmFtZSwgc2VsZi5kZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkKQogICAgICAgICAgICAgICAgc2VsZi5kZWxldGVfZmlsZXMoc3NoLCBoZGZzX2xvY2F0aW9uKQoKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiTm8gdGFibGUgZm91bmQhIFNraXBpbmcgcmVzZXQgcmVtb3RlIHRhYmxlcyBwcm9jZXNzISEiKQoKICAgICAgICBzZWxmLnByaW50X2ZpbmlzaF9zdGVwKCkKCiAgICBkZWYgcHJpbnRfZmluaXNoX3N0ZXAoc2VsZik6CiAgICAgICAgcHJpbnQoIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEVQIFRBS0VTIHs6LjRmfSAoc2Vjb25kcykgIi5mb3JtYXQoKHRpbWUudGltZSgpIC0gc2VsZi5zdGFydF90aW1lKSkpCgogICAgZGVmIHByaW50X3N0YXJ0X3N0ZXAoc2VsZiwgbmFtZSwgc3RlcF9udW1iZXIsIHRvdGFsX3N0ZXBzKToKICAgICAgICBwcmludCgiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQogICAgICAgIHByaW50KCJNQVJWSU4gREFUQSBJTVBPUlQgLSBTVEVQICh7fSkgb2YgKHt9KSAtIFt7fV0iLmZvcm1hdChzdGVwX251bWJlciwgdG90YWxfc3RlcHMsIG5hbWUpKQogICAgICAgIHByaW50KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpCiAgICAgICAgc2VsZi5zdGFydF90aW1lID0gdGltZS50aW1lKCkKCiAgICBkZWYgaW1wb3J0X3NhbXBsZShzZWxmLCBjcmVhdGVfdGVtcF90YWJsZT1UcnVlLCBjb3B5X2ZpbGVzPVRydWUsIHZhbGlkYXRlX3F1ZXJ5PVRydWUsIGZvcmNlX2NyZWF0ZV9yZW1vdGVfdGFibGU9RmFsc2UpOgogICAgICAgICMKICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICAjIFN0ZXAgMSAtIFF1ZXJ5IHZhbGlkYXRpb24KICAgICAgICBzZWxmLnByaW50X3N0YXJ0X3N0ZXAobmFtZT0iUXVlcnkgVmFsaWRhdGlvbiIsIHN0ZXBfbnVtYmVyPTEsIHRvdGFsX3N0ZXBzPTYpCgogICAgICAgIGlzX3ZhbGlkID0gc2VsZi52YWxpZGFkZV9xdWVyeSgpIGlmIHZhbGlkYXRlX3F1ZXJ5IGVsc2UgVHJ1ZQoKICAgICAgICBpZiBub3QgaXNfdmFsaWQ6CiAgICAgICAgICAgIHByaW50KCJJbmZvcm1lZCBzYW1wbGUgcXVlcnkgaXMgbm90IHZhbGlkISIpCiAgICAgICAgICAgIHNlbGYucHJpbnRfZmluaXNoX3N0ZXAoKQogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgc2VsZi5wcmludF9maW5pc2hfc3RlcCgpCgogICAgICAgICMKICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgICAgIyBTdGVwIDIgLSBUZXN0aW5nIHJlbW90ZSBjb25uZWNpdG9ucyBhbmQgZ2V0dGluZyB0YWJsZSBzY2hlbWEKICAgICAgICBzZWxmLnByaW50X3N0YXJ0X3N0ZXAobmFtZT0iVGFibGUgU2NoZW1hIEFjaGlldmVtZW50Iiwgc3RlcF9udW1iZXI9MiwgdG90YWxfc3RlcHM9NikKCiAgICAgICAgIyBjcmVhdGluZyBjb25uZWN0aW9ucwogICAgICAgIHByaW50KCJDb25uZWN0aW5nIHdpdGgge30gZGF0YWJhc2Ugb24ge30gLi4gIi5mb3JtYXQoc2VsZi5vcmlnaW5fZGIsIHNlbGYub3JpZ2luX2hvc3QpKQogICAgICAgIGNvbm5fb3JpZ2luID0gc2VsZi5nZXRfY29ubmVjdGlvbihob3N0PXNlbGYub3JpZ2luX2hvc3QsIGRiPXNlbGYub3JpZ2luX2RiLCBxdWV1ZT1zZWxmLm9yaWdpbl9xdWV1ZSkKCiAgICAgICAgcHJpbnQoIkNvbm5lY3Rpbmcgd2l0aCB7fSBkYXRhYmFzZSBvbiB7fSAuLiAiLmZvcm1hdChzZWxmLnRlbXBfZGJfbmFtZSwgc2VsZi5vcmlnaW5faG9zdCkpCiAgICAgICAgcmVtb3RlX3RlbXBfZGJfY29ubiA9IHNlbGYuZ2V0X2Nvbm5lY3Rpb24oaG9zdD1zZWxmLm9yaWdpbl9ob3N0LCBkYj1zZWxmLnRlbXBfZGJfbmFtZSwgcXVldWU9c2VsZi5vcmlnaW5fcXVldWUpCgogICAgICAgICMgZ2V0dGluZyBkZGwgZnJvbSByZWFsIHRhYmxlCiAgICAgICAgcHJpbnQoIkdldHRpbmcgRERMIGZyb20ge30gdGFibGUgIi5mb3JtYXQoc2VsZi50YXJnZXRfdGFibGVfbmFtZSkpCiAgICAgICAgZGRsID0gc2VsZi5nZXRfY3JlYXRldGFibGVfZGRsKGNvbm49Y29ubl9vcmlnaW4sIG9yaWdpbl90YWJsZV9uYW1lPXNlbGYudGFyZ2V0X3RhYmxlX25hbWUsIGRlc3RfdGFibGVfbmFtZT1zZWxmLnRlbXBfdGFibGVfbmFtZSkKCiAgICAgICAgIyB2YWxpZGFudGluZyBpZiBwYXJ0aXRpb25zIGlzIHVzZWQgaW4gcXVlcnkgc3RhdGVtZW50CiAgICAgICAgcGFydGl0aW9ucyA9IHNlbGYuZ2V0X3BhcnRpdGlvbnMoZGRsKQoKICAgICAgICBpZiB2YWxpZGF0ZV9xdWVyeSBhbmQgc2VsZi5oYXNfcGFydGl0aW9ucyhzZWxmLnNhbXBsZV9zcWwsIFtwWydjb2xzJ10gZm9yIHAgaW4gcGFydGl0aW9uc10pOgogICAgICAgICAgICBwcmludCgiSW5mb3JtZWQgc2FtcGxlIHF1ZXJ5IGRvZXNuJ3QgaGF2ZSB2YWxpZCBwYXJ0aXRpb25zIGluIHRoZSBjbGF1c3VsZSB3aGVyZSEhISEgSW5mb3JtZSBhdCBsZXN0IG9uZSBwYXJ0aXRpb24uIikKICAgICAgICAgICAgcHJpbnQoIlRvIGRpc2FibGUgdGhlIHF1ZXJ5IHZhbGlkYXRpb24gdXNlIC0tc2tpcC12YWxpZGF0aW9uIGZsYWcuIikKICAgICAgICAgICAgc2VsZi5wcmludF9maW5pc2hfc3RlcCgpCiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBwcmludCgiQ29ubmVjdGluZyB3aXRoIERFRkFVTFQgZGF0YWJhc2Ugb24ge30gLi4gIi5mb3JtYXQoc2VsZi5kZXN0aW5hdGlvbl9ob3N0KSkKICAgICAgICBsb2NhbF9jb25uID0gc2VsZi5nZXRfY29ubmVjdGlvbihob3N0PXNlbGYuZGVzdGluYXRpb25faG9zdCkKCiAgICAgICAgIyBjcmVhdGluZyBkYXRhYmFzZXMgaWYgbm90IGV4aXN0cwogICAgICAgIHByaW50KCJDcmVhdGluZyBkYXRhYmFzZSB7fSAuLi4iLmZvcm1hdChzZWxmLm9yaWdpbl9kYikpCiAgICAgICAgc2VsZi5jcmVhdGVfZGF0YWJhc2UoY29ubj1sb2NhbF9jb25uLCBkYj1zZWxmLm9yaWdpbl9kYikKCiAgICAgICAgcHJpbnQoIkNvbm5lY3Rpbmcgd2l0aCB7fSBkYXRhYmFzZSBvbiB7fSAuLiAiLmZvcm1hdChzZWxmLm9yaWdpbl9kYiwgc2VsZi5kZXN0aW5hdGlvbl9ob3N0KSkKICAgICAgICBsb2NhbF9jb25uID0gc2VsZi5nZXRfY29ubmVjdGlvbihob3N0PXNlbGYuZGVzdGluYXRpb25faG9zdCwgZGI9c2VsZi5vcmlnaW5fZGIpCgogICAgICAgICMgY3JlYXRpbmcgZGF0YWJhc2VzIGlmIG5vdCBleGlzdHMKICAgICAgICBwcmludCgiQ3JlYXRpbmcgZGF0YWJhc2Uge30gLi4uIi5mb3JtYXQoc2VsZi50ZW1wX2RiX25hbWUpKQogICAgICAgIHNlbGYuY3JlYXRlX2RhdGFiYXNlKGNvbm49bG9jYWxfY29ubiwgZGI9c2VsZi50ZW1wX2RiX25hbWUpCgogICAgICAgIHByaW50KCJDb25uZWN0aW5nIHdpdGgge30gZGF0YWJhc2Ugb24ge30gLi4gIi5mb3JtYXQoc2VsZi50ZW1wX2RiX25hbWUsIHNlbGYuZGVzdGluYXRpb25faG9zdCkpCiAgICAgICAgbG9jYWxfdGVtcF9kYl9jb25uID0gc2VsZi5nZXRfY29ubmVjdGlvbihob3N0PXNlbGYuZGVzdGluYXRpb25faG9zdCwgZGI9c2VsZi50ZW1wX2RiX25hbWUpCgogICAgICAgIHNlbGYucHJpbnRfZmluaXNoX3N0ZXAoKQoKICAgICAgICAjCiAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgICAgICMgU3RlcCAzIC0gUmVtb3RlIFRhYmxlIFByZXBhcmF0aW9uCiAgICAgICAgc2VsZi5wcmludF9zdGFydF9zdGVwKG5hbWU9IlJlbW90ZSBUYWJsZSBQcmVwYXJhdGlvbiIsIHN0ZXBfbnVtYmVyPTMsIHRvdGFsX3N0ZXBzPTYpCgogICAgICAgIGlmIGNyZWF0ZV90ZW1wX3RhYmxlOgoKICAgICAgICAgICAgaWYgZm9yY2VfY3JlYXRlX3JlbW90ZV90YWJsZToKICAgICAgICAgICAgICAgIHJlbW90ZV90YWJsZV9leGlzdHMgPSBGYWxzZQoKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJlbW90ZV90YWJsZV9leGlzdHMgPSBzZWxmLnRhYmxlX2V4aXN0cyhob3N0PXNlbGYub3JpZ2luX2hvc3QsIGRiPXNlbGYudGVtcF9kYl9uYW1lLCB0YWJsZT1zZWxmLnRlbXBfdGFibGVfbmFtZSkKCiAgICAgICAgICAgICMgdmVyaWZ5IGlmIHJlbW90ZSB0YWJsZSBhbHJlZHkgZXhpc3RzCiAgICAgICAgICAgIGlmIG5vdCByZW1vdGVfdGFibGVfZXhpc3RzOgogICAgICAgICAgICAgICAgcHJpbnQoIkRyb3BwaW5nIHRhYmxlIHt9IG9uIHt9IC4uICIuZm9ybWF0KHNlbGYuZnVsbF90ZW1wX3RhYmxlX25hbWUsIHNlbGYub3JpZ2luX2hvc3QpKQogICAgICAgICAgICAgICAgc2VsZi5kcm9wX3RhYmxlKGNvbm49cmVtb3RlX3RlbXBfZGJfY29ubiwgdGFibGVfbmFtZT1zZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lKQoKICAgICAgICAgICAgICAgIHByaW50KCJDcmVhdGluZyB0YWJsZSB7fSBvbiB7fSAuLiAiLmZvcm1hdChzZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lLCBzZWxmLm9yaWdpbl9ob3N0KSkKICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3RhYmxlKGNvbm49cmVtb3RlX3RlbXBfZGJfY29ubiwgdGFibGVfbmFtZT1zZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lLCBkZGw9ZGRsKQoKICAgICAgICAgICAgICAgICMgaW5zZXJ0IGZyb20gc2VsZWN0CiAgICAgICAgICAgICAgICBwcmludCgiUG9wdWxhdGluZyB0YWJsZSB7fSBvbiB7fSB1c2luZyBpbmZvcm1lZCBzYW1wbGUgc3FsLi4gIi5mb3JtYXQoc2VsZi5mdWxsX3RlbXBfdGFibGVfbmFtZSwgc2VsZi5vcmlnaW5faG9zdCkpCiAgICAgICAgICAgICAgICBzZWxmLnBvcHVsYXRlX3RhYmxlKGNvbm49Y29ubl9vcmlnaW4sIHRhYmxlX25hbWU9c2VsZi5mdWxsX3RlbXBfdGFibGVfbmFtZSwgcGFydGl0aW9ucz1wYXJ0aXRpb25zLCBzcWw9c2VsZi5zYW1wbGVfc3FsKQoKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHByaW50KCJUYWJsZSB7fSBvbiB7fSBhbHJlYWR5IGV4aXN0cyAuLi4iLmZvcm1hdChzZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lLCBzZWxmLm9yaWdpbl9ob3N0KSkKCiAgICAgICAgc2VsZi5wcmludF9maW5pc2hfc3RlcCgpCgogICAgICAgICMKICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgICAgIyBTdGVwIDQgLSBDb3B5aW5nIHJlbW90ZSBoZGZzIGZpbGVzCiAgICAgICAgc2VsZi5wcmludF9zdGFydF9zdGVwKG5hbWU9IkNvcHlpbmcgSERGUyBGaWxlcyIsIHN0ZXBfbnVtYmVyPTQsIHRvdGFsX3N0ZXBzPTYpCgogICAgICAgICMgZ2V0IHRlbXAgbG9jYXRpb24KICAgICAgICBwcmludCgiR2V0dGluZyBoZGZzIGZpbGVzIGxvY2F0aW9uIGZyb20ge30gdGFibGUgLi4uIi5mb3JtYXQoc2VsZi5mdWxsX3RlbXBfdGFibGVfbmFtZSkpCiAgICAgICAgdGVtcF90YWJsZV9sb2NhdGlvbiA9IHNlbGYuZ2V0X3RhYmxlX2xvY2F0aW9uKGNvbm49cmVtb3RlX3RlbXBfZGJfY29ubiwgdGFibGVfbmFtZT1zZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lKQoKICAgICAgICAjIGNvcHkgaGRmcyBmaWxlcyBmb3IgbG9jYWwgaGRmcwogICAgICAgIGV4dGVybmFsX3RhYmxlX2xvY2F0aW9uID0gc2VsZi5nZW5lcmF0ZV90YWJsZV9sb2NhdGlvbigKICAgICAgICAgICAgaG9zdD1zZWxmLmRlc3RpbmF0aW9uX2hvc3QsCiAgICAgICAgICAgIHJvb3RfcGF0aD1zZWxmLmRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoLAogICAgICAgICAgICBkYl9uYW1lPXNlbGYudGVtcF9kYl9uYW1lLCB0YWJsZV9uYW1lPXNlbGYudGVtcF90YWJsZV9uYW1lKQoKICAgICAgICBwcmludCgiQ29weWluZyBmaWxlcyBmcm9tIFt7fV0gdG8gW3t9XSIuZm9ybWF0KHRlbXBfdGFibGVfbG9jYXRpb24sIGV4dGVybmFsX3RhYmxlX2xvY2F0aW9uKSkKICAgICAgICBzZWxmLmhkZnNfZGlzdF9jb3B5KGZvcmNlPWNvcHlfZmlsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGZzX2hvc3Q9c2VsZi5kZXN0aW5hdGlvbl9ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRmc19wb3J0PXNlbGYuZGVzdGluYXRpb25fcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj10ZW1wX3RhYmxlX2xvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD1leHRlcm5hbF90YWJsZV9sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkPXNlbGYuZGVzdGluYXRpb25faG9zdF9wYXNzd29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPXNlbGYuZGVzdGluYXRpb25faG9zdF91c2VybmFtZSkKCiAgICAgICAgc2VsZi5wcmludF9maW5pc2hfc3RlcCgpCiAgICAgICAgIwogICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICAjIFN0ZXAgNSAtIEV4dGVybmFsIHRhYmxlIGNyZWF0aW9uIHVzaW5nIGhkZnMgZmlsZXMKICAgICAgICBzZWxmLnByaW50X3N0YXJ0X3N0ZXAobmFtZT0iTG9jYWwgVGVtcG9yYXJ5IFRhYmxlIENyZWF0aW9uIiwgc3RlcF9udW1iZXI9NSwgdG90YWxfc3RlcHM9NikKCiAgICAgICAgIyBjcmVhdGluZyBleHRlcm5hbCB0YWJsZSB1c2luZyBwYXJxdWV0IGZpbGVzIGluIGhkZnMKICAgICAgICBwcmludCgiRHJvcHBpbmcgdGVtcCB0YWJsZSB7fSBvbiB7fSAuLiAiLmZvcm1hdChzZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lLCBzZWxmLmRlc3RpbmF0aW9uX2hvc3QpKQogICAgICAgIHNlbGYuZHJvcF90YWJsZShjb25uPWxvY2FsX3RlbXBfZGJfY29ubiwgdGFibGVfbmFtZT1zZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lKQoKICAgICAgICAjIGNyZWF0ZSB0ZW1wIHRhYmxlCiAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRlbXAgdGFibGUge30gdXNpbmcgaW1wb3J0ZWQgaGRmcyBmaWxlcyBmcm9tIFt7fV0gLi4uIi5mb3JtYXQoc2VsZi5mdWxsX3RlbXBfdGFibGVfbmFtZSwgZXh0ZXJuYWxfdGFibGVfbG9jYXRpb24pKQogICAgICAgIHNlbGYuY3JlYXRlX2V4dGVybmFsX3RhYmxlKGNvbm49bG9jYWxfdGVtcF9kYl9jb25uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfdGFibGVfbmFtZT1zZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkbD1kZGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFycXVldF9maWxlX2xvY2F0aW9uPWV4dGVybmFsX3RhYmxlX2xvY2F0aW9uKQoKICAgICAgICBwcmludCgiUmVmcmVzaGluZyB0YWJsZSB7fSBwYXJ0aXRpb25zIG9uIHt9IC4uIi5mb3JtYXQoc2VsZi5mdWxsX3RlbXBfdGFibGVfbmFtZSwgc2VsZi5kZXN0aW5hdGlvbl9ob3N0KSkKICAgICAgICBzZWxmLnJlZnJlc2hfcGFydGl0aW9ucyhjb25uPWxvY2FsX3RlbXBfZGJfY29ubiwgdGFibGVfbmFtZT1zZWxmLmZ1bGxfdGVtcF90YWJsZV9uYW1lKQoKICAgICAgICBzZWxmLnByaW50X2ZpbmlzaF9zdGVwKCkKCiAgICAgICAgIwogICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAgICAjIFN0ZXAgNiAtIERlc3RpbmF0aW9uIHRhYmxlIGNyZWF0aW9uIGZyb20gZXh0ZXJuYWwgdGFibGUKICAgICAgICBzZWxmLnByaW50X3N0YXJ0X3N0ZXAobmFtZT0iVGFibGUgcG9wdWxhdGlvbiIsIHN0ZXBfbnVtYmVyPTYsIHRvdGFsX3N0ZXBzPTYpCgogICAgICAgICMgY3JlYXRlIHZpZXcKICAgICAgICBwcmludCgiRHJvcHBpbmcgdGFibGUgdmlldyB7fSBvbiB7fSAuLiAiLmZvcm1hdChzZWxmLmZ1bGxfdGFibGVfbmFtZSwgc2VsZi5kZXN0aW5hdGlvbl9ob3N0KSkKICAgICAgICBzZWxmLmRyb3Bfdmlldyhjb25uPWxvY2FsX2Nvbm4sIHZpZXdfbmFtZT1zZWxmLmZ1bGxfdGFibGVfbmFtZSkKCiAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRhYmxlIHZpZXcge30gLi4uICIuZm9ybWF0KHNlbGYuZnVsbF90YWJsZV9uYW1lLCBzZWxmLmRlc3RpbmF0aW9uX2hvc3QpKQogICAgICAgIHNlbGYuY3JlYXRlX3ZpZXcoY29ubj1sb2NhbF9jb25uLCB2aWV3X25hbWU9c2VsZi5mdWxsX3RhYmxlX25hbWUsIHRhYmxlX25hbWU9c2VsZi5mdWxsX3RlbXBfdGFibGVfbmFtZSkKCiAgICAgICAgc2VsZi5wcmludF9maW5pc2hfc3RlcCgpCgogICAgICAgIHByaW50KCJQcm9jZWR1cmUgZG9uZSEhISEiKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIHRlbXBfdGFibGVfcHJlZml4KHNlbGYpOgogICAgICAgIHJldHVybiAie30iLmZvcm1hdChzbHVnaWZ5KHNlbGYuZW5naW5lKS5yZXBsYWNlKCctJywgJ18nKSkKCiAgICBAcHJvcGVydHkKICAgIGRlZiB0ZW1wX3RhYmxlX25hbWUoc2VsZik6CiAgICAgICAgcmV0dXJuICJ7fV97fV97fV97fSIuZm9ybWF0KAogICAgICAgICAgICBzZWxmLnRlbXBfdGFibGVfcHJlZml4LAogICAgICAgICAgICBzZWxmLm9yaWdpbl9kYiwKICAgICAgICAgICAgc2VsZi50YXJnZXRfdGFibGVfbmFtZSwKICAgICAgICAgICAgaGFzaGxpYi5zaGExKHNsdWdpZnkoc2VsZi5zYW1wbGVfc3FsKS5lbmNvZGUoJ3V0Zi04JykpLmhleGRpZ2VzdCgpCiAgICAgICAgKQoKICAgIEBwcm9wZXJ0eQogICAgZGVmIGZ1bGxfdGFibGVfbmFtZShzZWxmKToKICAgICAgICByZXR1cm4gInt9Lnt9Ii5mb3JtYXQoc2VsZi5vcmlnaW5fZGIsIHNlbGYudGFyZ2V0X3RhYmxlX25hbWUpCgogICAgQHByb3BlcnR5CiAgICBkZWYgZnVsbF90ZW1wX3RhYmxlX25hbWUoc2VsZik6CiAgICAgICAgcmV0dXJuICJ7fS57fSIuZm9ybWF0KHNlbGYudGVtcF9kYl9uYW1lLCBzZWxmLnRlbXBfdGFibGVfbmFtZSkKCiAgICBkZWYgZ2VuZXJhdGVfdGFibGVfbG9jYXRpb24oc2VsZiwgcm9vdF9wYXRoLCBob3N0LCBkYl9uYW1lLCB0YWJsZV9uYW1lKToKICAgICAgICByZXR1cm4gImhkZnM6Ly97fTo4MDIwe30iLmZvcm1hdChob3N0LCBvcy5wYXRoLmpvaW4ocm9vdF9wYXRoLCBkYl9uYW1lLCB0YWJsZV9uYW1lKSkKCiAgICBkZWYgY2xlYW5fZGRsKHNlbGYsIGRkbCwgcmVtb3ZlX2Zvcm1hdHM9VHJ1ZSwgcmVtb3ZlX2dlbmVyYWw9VHJ1ZSk6CiAgICAgICAgaWYgcmVtb3ZlX2dlbmVyYWw6CiAgICAgICAgICAgICMgUmVtb3ZpbmcgTE9DQVRJT04gc3RhdGVtZW50CiAgICAgICAgICAgIHJlZ2V4ID0gIihMT0NBVElPTlxzKycoLio/KScpIgogICAgICAgICAgICByZXN1bHQgPSByZS5zZWFyY2gocmVnZXgsIGRkbCkKICAgICAgICAgICAgZGRsID0gZGRsLnJlcGxhY2UocmVzdWx0Lmdyb3VwKDEpLCAiICIpIGlmIHJlc3VsdCBlbHNlIGRkbAoKICAgICAgICAgICAgIyBSZW1vdmluZyBUQkxQUk9QRVJUSUVTIHN0YXRlbWVudAogICAgICAgICAgICByZWdleCA9ICIoVEJMUFJPUEVSVElFU1xzKyguKj8pXCkpIgogICAgICAgICAgICByZXN1bHQgPSByZS5zZWFyY2gocmVnZXgsIGRkbCkKICAgICAgICAgICAgZGRsID0gZGRsLnJlcGxhY2UocmVzdWx0Lmdyb3VwKDEpLCAiICIpIGlmIHJlc3VsdCBlbHNlIGRkbAoKICAgICAgICAgICAgIyBSZW1vdmluZyBXSVRIIFNFUkRFUFJPUEVSVElFUyBzdGF0ZW1lbnQKICAgICAgICAgICAgcmVnZXggPSAiKFdJVEggU0VSREVQUk9QRVJUSUVTXHMrKC4qPylcKSkiCiAgICAgICAgICAgIHJlc3VsdCA9IHJlLnNlYXJjaChyZWdleCwgZGRsKQogICAgICAgICAgICBkZGwgPSBkZGwucmVwbGFjZShyZXN1bHQuZ3JvdXAoMSksICIgIikgaWYgcmVzdWx0IGVsc2UgZGRsCgogICAgICAgIGlmIHJlbW92ZV9mb3JtYXRzOgogICAgICAgICAgICAjIFJlbW92aW5nIFNUT1JFRCBBUyBJTlBVVEZPUk1BVCBzdGF0ZW1lbnQKICAgICAgICAgICAgcmVnZXggPSAiKFNUT1JFRCBBUyBJTlBVVEZPUk1BVFxzKycoLio/KScpIgogICAgICAgICAgICByZXN1bHQgPSByZS5zZWFyY2gocmVnZXgsIGRkbCkKICAgICAgICAgICAgZGRsID0gZGRsLnJlcGxhY2UocmVzdWx0Lmdyb3VwKDEpLCAiICIpIGlmIHJlc3VsdCBlbHNlIGRkbAoKICAgICAgICAgICAgIyBSZW1vdmluZyBPVVRQVVRGT1JNQVQgc3RhdGVtZW50CiAgICAgICAgICAgIHJlZ2V4ID0gIihPVVRQVVRGT1JNQVRccysnKC4qPyknKSIKICAgICAgICAgICAgcmVzdWx0ID0gcmUuc2VhcmNoKHJlZ2V4LCBkZGwpCiAgICAgICAgICAgIGRkbCA9IGRkbC5yZXBsYWNlKHJlc3VsdC5ncm91cCgxKSwgIiAiKSBpZiByZXN1bHQgZWxzZSBkZGwKCiAgICAgICAgcmV0dXJuIGRkbAoKICAgIGRlZiBnZXRfdGFibGVfZm9ybWF0KHNlbGYsIGRkbCk6CiAgICAgICAgcmVnZXggPSAiKFNUT1JFRCBBUyBJTlBVVEZPUk1BVFxzKycoLio/KScpIgogICAgICAgIHJlc3VsdCA9IHJlLnNlYXJjaChyZWdleCwgZGRsKQogICAgICAgIGlucHV0X2Zvcm1hdCA9IHJlc3VsdC5ncm91cCgyKQogICAgICAgIHJldHVybiBzZWxmLnN1cHBvcnRlZF9mb3JtYXRfdHlwZXNbaW5wdXRfZm9ybWF0LnNwbGl0KCIuIilbLTFdXQoKICAgIGRlZiBnZXRfZGF0YWJhc2VfaW5mbyhzZWxmLCBkZGwpOgogICAgICAgIHJlZ2V4ID0gIkNSRUFURSBUQUJMRSBgKCguKj8pXC4pPyguKj8pYFwoIgogICAgICAgIHJlc3VsdCA9IHJlLnNlYXJjaChyZWdleCwgZGRsKQogICAgICAgIGlmIHJlc3VsdDoKICAgICAgICAgICAgZ3JvdXBzID0gcmVzdWx0Lmdyb3VwcygpCiAgICAgICAgICAgIGlmIGdyb3Vwc1swXToKICAgICAgICAgICAgICAgICMgZm91bmQgZGIgbmFtZQogICAgICAgICAgICAgICAgcmV0dXJuIHsnZGInOiBncm91cHNbMV0sICd0YWJsZSc6IGdyb3Vwc1syXX0KICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHsnZGInOiBOb25lLCAndGFibGUnOiBncm91cHNbMl19CiAgICAgICAgcmV0dXJuIHsnZGInOiBOb25lLCAndGFibGUnOiBOb25lfQoKICAgIGRlZiBnZXRfY3JlYXRldGFibGVfZGRsKHNlbGYsIGNvbm4sIG9yaWdpbl90YWJsZV9uYW1lLCBkZXN0X3RhYmxlX25hbWUpOgogICAgICAgIGN1cnNvciA9IGNvbm4uY3Vyc29yKCkKICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiU0hPVyBDUkVBVEUgVEFCTEUgIiArIG9yaWdpbl90YWJsZV9uYW1lKQogICAgICAgIF9saW5lcyA9IFtfbGluZVswXSBmb3IgX2xpbmUgaW4gY3Vyc29yLmZldGNoYWxsKCldCiAgICAgICAgZGRsID0gJycuam9pbihfbGluZXMpCiAgICAgICAgZGRsID0gc2VsZi5jbGVhbl9kZGwoZGRsLCByZW1vdmVfZm9ybWF0cz1GYWxzZSwgcmVtb3ZlX2dlbmVyYWw9VHJ1ZSkKICAgICAgICBkZGwgPSBkZGwucmVwbGFjZShvcmlnaW5fdGFibGVfbmFtZSwgZGVzdF90YWJsZV9uYW1lKQogICAgICAgIGN1cnNvci5jbG9zZSgpCiAgICAgICAgcmV0dXJuIGRkbAoKICAgIGRlZiBjcmVhdGVfZGF0YWJhc2Uoc2VsZiwgY29ubiwgZGIpOgogICAgICAgIHNlbGYuX2V4ZWN1dGVfZGJfY29tbWFuZChjb25uLCAiQ1JFQVRFIERBVEFCQVNFIElGIE5PVCBFWElTVFMgIiArIGRiKQoKICAgIGRlZiBkcm9wX3RhYmxlKHNlbGYsIGNvbm4sIHRhYmxlX25hbWUpOgogICAgICAgIHNlbGYuX2V4ZWN1dGVfZGJfY29tbWFuZChjb25uLCAnRFJPUCBUQUJMRSBJRiBFWElTVFMgJyArIHRhYmxlX25hbWUpCgogICAgZGVmIGRyb3BfdmlldyhzZWxmLCBjb25uLCB2aWV3X25hbWUpOgogICAgICAgIHNlbGYuX2V4ZWN1dGVfZGJfY29tbWFuZChjb25uLCAnRFJPUCBWSUVXICcgKyB2aWV3X25hbWUpCgogICAgZGVmIGNyZWF0ZV90YWJsZShzZWxmLCBjb25uLCB0YWJsZV9uYW1lLCBkZGwpOgogICAgICAgIHNlbGYuX2V4ZWN1dGVfZGJfY29tbWFuZChjb25uLCBkZGwpCgogICAgZGVmIF9leGVjdXRlX2RiX2NvbW1hbmQoc2VsZiwgY29ubiwgY29tbWFuZCk6CiAgICAgICAgY3Vyc29yID0gY29ubi5jdXJzb3IoKQogICAgICAgIGN1cnNvci5leGVjdXRlKGNvbW1hbmQpCiAgICAgICAgc2VsZi5zaG93X2xvZyhjdXJzb3IpCiAgICAgICAgY3Vyc29yLmNsb3NlKCkKCiAgICBkZWYgZ2V0X2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCwgZGI9J0RFRkFVTFQnLCBxdWV1ZT0nZGVmYXVsdCcpOgogICAgICAgIHJldHVybiBoaXZlLmNvbm5lY3QoaG9zdD1ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2U9ZGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uPXsnbWFwcmVkLmpvYi5xdWV1ZS5uYW1lJzogcXVldWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGhpdmUuZXhlYy5keW5hbWljLnBhcnRpdGlvbi5tb2RlJzogJ25vbnN0cmljdCd9KQoKICAgIGRlZiByZXRyaWV2ZV9kYXRhX3NhbXBsZShzZWxmLCBjb25uLCBmdWxsX3RhYmxlX25hbWUsIHNhbXBsZV9saW1pdD0xMDApOgogICAgICAgIGN1cnNvciA9IGNvbm4uY3Vyc29yKCkKCiAgICAgICAgc3FsID0gIlNFTEVDVCAqIEZST00ge30gVEFCTEVTQU1QTEUgKHt9IFJPV1MpIi5mb3JtYXQoZnVsbF90YWJsZV9uYW1lLCBzYW1wbGVfbGltaXQpCgogICAgICAgIGN1cnNvci5leGVjdXRlKHNxbCkKICAgICAgICBkYXRhX2hlYWRlciA9IFt7J2NvbCc6IGxpbmVbMF0uc3BsaXQoJy4nKVsxXSwgJ3RhYmxlJzogbGluZVswXS5zcGxpdCgnLicpWzBdLCAndHlwZSc6IGxpbmVbMV19IGZvciBsaW5lIGluIGN1cnNvci5kZXNjcmlwdGlvbl0KICAgICAgICBkYXRhID0gW3JvdyBmb3Igcm93IGluIGN1cnNvci5mZXRjaGFsbCgpXQogICAgICAgIHNlbGYuc2hvd19sb2coY3Vyc29yKQogICAgICAgIGN1cnNvci5jbG9zZSgpCiAgICAgICAgcmV0dXJuIHsnZGF0YV9oZWFkZXInOiBkYXRhX2hlYWRlciwKICAgICAgICAgICAgICAgICd0b3RhbF9saW5lcyc6IGxlbihkYXRhKSwKICAgICAgICAgICAgICAgICdkYXRhJzogZGF0YSwKICAgICAgICAgICAgICAgICdlc3RpbWF0ZV9xdWVyeV9zaXplJzogc3lzLmdldHNpemVvZihkYXRhKSwKICAgICAgICAgICAgICAgICdlc3RpbWF0ZV9xdWVyeV9tZWFuX3Blcl9saW5lJzogc3lzLmdldHNpemVvZihkYXRhKSAvIGxlbihkYXRhKX0KCiAgICBkZWYgY291bnRfcm93cyhzZWxmLCBjb25uLCBzcWwpOgogICAgICAgIGN1cnNvciA9IGNvbm4uY3Vyc29yKCkKICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiU0VMRUNUIENPVU5UKDEpICIgKyBzcWxbc3FsLnVwcGVyKCkucmZpbmQoIkZST00iKTpdKQogICAgICAgIHNpemUgPSBjdXJzb3IuZmV0Y2hvbmUoKVswXQogICAgICAgIHNlbGYuc2hvd19sb2coY3Vyc29yKQogICAgICAgIGN1cnNvci5jbG9zZSgpCiAgICAgICAgcmV0dXJuIHNpemUKCiAgICBkZWYgc2hvd19sb2coc2VsZiwgY3Vyc29yKToKICAgICAgICBmb3IgbCBpbiBjdXJzb3IuZmV0Y2hfbG9ncygpOgogICAgICAgICAgICBsb2dnZXIuZGVidWcobCkKCiAgICBkZWYgc2F2ZV9kYXRhKHNlbGYsIGNvbm4sIHRhYmxlLCBkYXRhKToKICAgICAgICBjdXJzb3IgPSBjb25uLmN1cnNvcigpCiAgICAgICAgcHJpbnQoJ0luc2VydGluZyB7fSByb3dzIGluIHt9IHRhYmxlLi4uJy5mb3JtYXQoZGF0YVsndG90YWxfbGluZXMnXSwgdGFibGUpKQogICAgICAgIGNvbHMgPSBbdlsnY29sJ10gZm9yIHYgaW4gZGF0YVsnZGF0YV9oZWFkZXInXV0KICAgICAgICBkbWwgPSAiSU5TRVJUIElOVE8gezB9ICh7MX0pIFZBTFVFUyAoezJ9KSIuZm9ybWF0KHRhYmxlLCAiLCAiLmpvaW4oY29scyksICIsICIuam9pbihbJyVzJyBmb3IgY29sIGluIGNvbHNdKSkKICAgICAgICBjdXJzb3IuZXhlY3V0ZW1hbnkoZG1sLCBbKHYsKSBmb3IgdiBpbiBkYXRhWydkYXRhJ11bMToxMF1dKQogICAgICAgIHNlbGYuc2hvd19sb2coY3Vyc29yKQogICAgICAgIGN1cnNvci5jbG9zZSgpCgogICAgZGVmIGdldF9wYXJ0aXRpb25zKHNlbGYsIGRkbCk6CiAgICAgICAgcmVnZXggPSAiKFBBUlRJVElPTkVEIEJZXHMrXCgoLio/KVwpKSIKICAgICAgICByZXN1bHQgPSByZS5zZWFyY2gocmVnZXgsIGRkbCkKICAgICAgICBpZiByZXN1bHQ6CiAgICAgICAgICAgIHBfY29scyA9IHJlc3VsdC5ncm91cCgyKS5zdHJpcCgpLnJlcGxhY2UoJ2AnLCAnJykuc3BsaXQoIiwiKQogICAgICAgICAgICByZXR1cm4gW3snY29sJzogcF9jb2wuc3BsaXQoKVswXSwgJ3R5cGUnOiBwX2NvbC5zcGxpdCgpWzFdfSBmb3IgcF9jb2wgaW4gcF9jb2xzXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHJldHVybiBbXQoKICAgIGRlZiBoYXNfcGFydGl0aW9ucyhzZWxmLCBzcWwsIHBhcnRpdGlvbnMpOgogICAgICAgIHJlZ2V4ID0gIldIRVJFKC4qPykoIiArICJ8Ii5qb2luKHBhcnRpdGlvbnMpLnVwcGVyKCkgKyAiKSIKICAgICAgICByZXN1bHQgPSByZS5zZWFyY2gocmVnZXgsIHNxbC51cHBlcigpKQoKICAgICAgICBpZiByZXN1bHQ6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgZGVmIHBvcHVsYXRlX3RhYmxlKHNlbGYsIGNvbm4sIHRhYmxlX25hbWUsIHBhcnRpdGlvbnMsIHNxbCk6CiAgICAgICAgcGFydGl0aW9ucyA9IFtwWydjb2wnXSBmb3IgcCBpbiBwYXJ0aXRpb25zXQogICAgICAgIHBhcnRpdGlvbnNfc3RhdGVtZW50ID0gIlBBUlRJVElPTiAoe30pIi5mb3JtYXQoIiwgIi5qb2luKHBhcnRpdGlvbnMpKSBpZiBwYXJ0aXRpb25zIGVsc2UgIiIKICAgICAgICBkbWwgPSAiSU5TRVJUIE9WRVJXUklURSBUQUJMRSB7MH0gezF9IHsyfSIuZm9ybWF0KHRhYmxlX25hbWUsIHBhcnRpdGlvbnNfc3RhdGVtZW50LCBzcWwpCiAgICAgICAgc2VsZi5fZXhlY3V0ZV9kYl9jb21tYW5kKGNvbm4sIGRtbCkKCiAgICBkZWYgY3JlYXRlX3ZpZXcoc2VsZiwgY29ubiwgdmlld19uYW1lLCB0YWJsZV9uYW1lKToKICAgICAgICBkbWwgPSAiQ1JFQVRFIFZJRVcgezB9IEFTIFNFTEVDVCAqIEZST00gezF9Ii5mb3JtYXQodmlld19uYW1lLCB0YWJsZV9uYW1lKQogICAgICAgIHNlbGYuX2V4ZWN1dGVfZGJfY29tbWFuZChjb25uLCBkbWwpCgogICAgZGVmIHJlZnJlc2hfcGFydGl0aW9ucyhzZWxmLCBjb25uLCB0YWJsZV9uYW1lKToKICAgICAgICByZWZyZXNoX3N0YXRlbWVudCA9ICJNU0NLIFJFUEFJUiBUQUJMRSB7MH0iLmZvcm1hdCh0YWJsZV9uYW1lKQogICAgICAgIHNlbGYuX2V4ZWN1dGVfZGJfY29tbWFuZChjb25uLCByZWZyZXNoX3N0YXRlbWVudCkKCiAgICBkZWYgZ2V0X3RhYmxlX2xvY2F0aW9uKHNlbGYsIGNvbm4sIHRhYmxlX25hbWUpOgogICAgICAgIGN1cnNvciA9IGNvbm4uY3Vyc29yKCkKICAgICAgICBjdXJzb3IuZXhlY3V0ZSgiREVTQ1JJQkUgRk9STUFUVEVEIHt9Ii5mb3JtYXQodGFibGVfbmFtZSkpCiAgICAgICAgbG9jYXRpb24gPSBba2V5WzFdLnN0cmlwKCkgZm9yIGtleSBpbiBjdXJzb3IuZmV0Y2hhbGwoKSBpZiBrZXlbMF0gYW5kIGtleVswXS5zdHJpcCgpLnVwcGVyKCkgPT0gJ0xPQ0FUSU9OOiddCiAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvblswXS5yZXBsYWNlKCdoZGZzOi8vJywgJ2hmdHA6Ly8nKQogICAgICAgIGN1cnNvci5jbG9zZSgpCiAgICAgICAgcmV0dXJuIGxvY2F0aW9uCgogICAgZGVmIGRlbGV0ZV9maWxlcyhzZWxmLCBzc2gsIHVybCk6CiAgICAgICAgY21kID0gImhkZnMgZGZzIC1ybSAtUiAne30nIi5mb3JtYXQodXJsKQogICAgICAgIHNlbGYuX2hkZnNfY29tbWFuZHMoc3NoLCBjbWQpCgogICAgZGVmIGNvcHlfZmlsZXMoc2VsZiwgc3NoLCBvcmlnaW4sIGRlc3QpOgogICAgICAgIGNtZCA9ICJoYWRvb3AgZGlzdGNwIC0tdXBkYXRlICd7fScgJ3t9JyIuZm9ybWF0KG9yaWdpbiwgZGVzdCkKICAgICAgICByZXR1cm4gc2VsZi5faGRmc19jb21tYW5kcyhzc2gsIGNtZCkKCiAgICBkZWYgX2hkZnNfY29tbWFuZHMoc2VsZiwgc3NoLCBjbWQpOgogICAgICAgIGxvZ2dlci5kZWJ1ZygiRXhlY3V0aW5nIHJlbW90ZSBjb21tYW5kOiB7fSIuZm9ybWF0KGNtZCkpCiAgICAgICAgaSwgbywgZSA9IHNzaC5leGVjX2NvbW1hbmQoY21kKQogICAgICAgIGVycm9ycyA9IGUucmVhZGxpbmVzKCkKICAgICAgICBvdXRwdXQgPSBvLnJlYWRsaW5lcygpCiAgICAgICAgbG9nZ2VyLmRlYnVnKG91dHB1dCkKICAgICAgICBsb2dnZXIuZGVidWcoZXJyb3JzKQogICAgICAgIHJldHVybiBvdXRwdXQsIGVycm9ycwoKICAgIGRlZiBfZ2V0X3NzaF9jbGllbnQoc2VsZiwgaGRmc19ob3N0LCBoZGZzX3BvcnQsIHVzZXJuYW1lLCBwYXNzd29yZCk6CiAgICAgICAgc3NoID0gU1NIQ2xpZW50KCkKICAgICAgICBzc2guc2V0X21pc3NpbmdfaG9zdF9rZXlfcG9saWN5KEF1dG9BZGRQb2xpY3koKSkKICAgICAgICBzc2guY29ubmVjdChob3N0bmFtZT1oZGZzX2hvc3QsIHBvcnQ9aGRmc19wb3J0LCB1c2VybmFtZT11c2VybmFtZSwgcGFzc3dvcmQ9cGFzc3dvcmQsICkKICAgICAgICByZXR1cm4gc3NoCgogICAgZGVmIGhkZnNfZGlzdF9jb3B5KHNlbGYsIGZvcmNlLCBoZGZzX2hvc3QsIGhkZnNfcG9ydCwgb3JpZ2luLCBkZXN0LCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lKToKICAgICAgICAjIGNvbm5lY3Rpbmcgd2l0aCBoZGZzIGhvc3QKICAgICAgICBzc2ggPSBzZWxmLl9nZXRfc3NoX2NsaWVudChoZGZzX2hvc3QsIGhkZnNfcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkKQoKICAgICAgICBpZiBmb3JjZToKICAgICAgICAgICAgcHJpbnQoIlJlbW92aW5nIG9sZCBoZGZzIGZpbGVzIGlmIG5lY2Vzc2FyeS4gVG8gZm9yY2UgY29weSByZW1vdGUgZmlsZXMgdXNlIC0tZm9yY2UtY29weS1maWxlcyBmbGFnLiIpCgogICAgICAgICAgICAjIGRlbGV0ZSBmaWxlcyBmcm9tIGRlc3QKICAgICAgICAgICAgc2VsZi5kZWxldGVfZmlsZXMoc3NoLCBkZXN0KQoKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiVXNpbmcgb2xkIGhkZnMgZmlsZXMgdG8gY29tcGxldGUgdGhlIHByb2NlZHVyZS4gSWYgbmVjZXNzYXJ5IHRvIGNvcHkgZmlsZXMgYWdhaW4gdXNlIC0tZm9yY2UtY29weS1maWxlcyBmbGFnLiIpCgogICAgICAgICMgY29weSBmaWxlcyBmcm9tIG9yaWdpbiB0byBkZXN0aW5hdGlvbgogICAgICAgIF8sIGNvcHlfZXJyb3JzID0gc2VsZi5jb3B5X2ZpbGVzKHNzaCwgb3JpZ2luLCBkZXN0KQoKICAgICAgICAjIHZhbGlkYXRlIGNvcHkKICAgICAgICBjbWRfdGVtcGxhdGUgPSAiaGRmcyBkZnMgLWxzIC1SICd7fScgfCBncmVwIC1FICdeLScgfCB3YyAtbCIKICAgICAgICBjbWQgPSBjbWRfdGVtcGxhdGUuZm9ybWF0KG9yaWdpbikKICAgICAgICByZXN1bHQxLCBfID0gc2VsZi5faGRmc19jb21tYW5kcyhzc2gsIGNtZCkKCiAgICAgICAgY21kID0gY21kX3RlbXBsYXRlLmZvcm1hdChkZXN0KQogICAgICAgIHJlc3VsdDIsIF8gPSBzZWxmLl9oZGZzX2NvbW1hbmRzKHNzaCwgY21kKQoKICAgICAgICBpZiByZXN1bHQxID09IHJlc3VsdDI6CiAgICAgICAgICAgIHByaW50KCJGaWxlcyB7fSBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQhISIuZm9ybWF0KHJlc3VsdDEpKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50KCJFcnJvcnMgZHVyaW5nIGhkZnMgZmlsZXMgY29weSBwcm9jZXNzISEiKQog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bnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgY2xpY2sKaW1wb3J0IGpzb24KaW1wb3J0IG9zCmltcG9ydCBzeXMKaW1wb3J0IHRpbWUKaW1wb3J0IG9zLnBhdGgKaW1wb3J0IHJlCmltcG9ydCBzaHV0aWwKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IGppbmphMgppbXBvcnQgc2l4CmZyb20gdW5pZGVjb2RlIGltcG9ydCB1bmlkZWNvZGUKaW1wb3J0IG11bHRpcHJvY2Vzc2luZwpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24ucHJvZmlsaW5nIGltcG9ydCBwcm9maWxpbmcKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmRhdGEgaW1wb3J0IE1hcnZpbkRhdGEKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmNvbmZpZyBpbXBvcnQgQ29uZmlnCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgaXRlcml0ZW1zCmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKCmxvZ2dlciA9IGdldF9sb2dnZXIoJ21hbmFnZW1lbnQuZW5naW5lJykKCgpAY2xpY2suZ3JvdXAoJ2VuZ2luZScpCmRlZiBjbGkoKToKICAgIHBhc3MKCgpAY2xpLmNvbW1hbmQoJ2VuZ2luZS1kcnlydW4nLCBoZWxwPSdNYXJ2aW4gRHJ5cnVuIFV0aWxpdHkgLSBSdW4gbWFydmluIGVuZ2luZXMgaW4gYSBzdGFkYWxvbmUgd2F5JykKQGNsaWNrLm9wdGlvbigKICAgICctLWFjdGlvbicsCiAgICAnLWEnLAogICAgZGVmYXVsdD0nYWxsJywKICAgIHR5cGU9Y2xpY2suQ2hvaWNlKFsnYWxsJywgJ2FjcXVpc2l0b3InLCAndHByZXBhcmF0b3InLCAndHJhaW5lcicsICdldmFsdWF0b3InLCAncHByZXBhcmF0b3InLCAncHJlZGljdG9yJywgJ2ZlZWRiYWNrJ10pLAogICAgaGVscD0nTWFydmluIGVuZ2luZSBhY3Rpb24gbmFtZScpCkBjbGljay5vcHRpb24oJy0taW5pdGlhbC1kYXRhc2V0JywgJy1pZCcsIGhlbHA9J0luaXRpYWwgZGF0YXNldCBmaWxlIHBhdGgnLCB0eXBlPWNsaWNrLlBhdGgoZXhpc3RzPVRydWUpKQpAY2xpY2sub3B0aW9uKCctLWRhdGFzZXQnLCAnLWQnLCBoZWxwPSdEYXRhc2V0IGZpbGUgcGF0aCcsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSkpCkBjbGljay5vcHRpb24oJy0tbW9kZWwnLCAnLW0nLCBoZWxwPSdFbmdpbmUgbW9kZWwgZmlsZSBwYXRoJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSkKQGNsaWNrLm9wdGlvbignLS1tZXRyaWNzJywgJy1tZScsIGhlbHA9J0VuZ2luZSBNZXRyaWNzIGZpbGUgcGF0aCcsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSkpCkBjbGljay5vcHRpb24oJy0tcGFyYW1zLWZpbGUnLCAnLXBmJywgZGVmYXVsdD0nZW5naW5lLnBhcmFtcycsIGhlbHA9J01hcnZpbiBlbmdpbmUgcGFyYW1zIGZpbGUgcGF0aCcsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSkpCkBjbGljay5vcHRpb24oJy0tbWVzc2FnZXMtZmlsZScsICctbWYnLCBkZWZhdWx0PSdlbmdpbmUubWVzc2FnZXMnLCBoZWxwPSdNYXJ2aW4gZW5naW5lIHByZWRpY3RvciBpbnB1dCBtZXNzYWdlcyBmaWxlIHBhdGgnLCB0eXBlPWNsaWNrLlBhdGgoZXhpc3RzPVRydWUpKQpAY2xpY2sub3B0aW9uKCctLWZlZWRiYWNrLWZpbGUnLCAnLWZmJywgZGVmYXVsdD0nZmVlZGJhY2subWVzc2FnZXMnLCBoZWxwPSdNYXJ2aW4gZW5naW5lIGZlZWRiYWNrIGlucHV0IG1lc3NhZ2VzIGZpbGUgcGF0aCcsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSkpCkBjbGljay5vcHRpb24oJy0tcmVzcG9uc2UnLCAnLXInLCBkZWZhdWx0PVRydWUsIGlzX2ZsYWc9VHJ1ZSwgaGVscD0nSWYgZW5hYmxlLCBwcmludCByZXNwb25zZXMgZnJvbSBlbmdpbmUgb25saW5lIGFjdGlvbnMgKHBwcmVwYXJhdG9yIGFuZCBwcmVkaWN0b3IpJykKQGNsaWNrLm9wdGlvbignLS1wcm9maWxpbmcnLCBkZWZhdWx0PUZhbHNlLCBpc19mbGFnPVRydWUsIGhlbHA9J0VuYWJsZSBleGVjdXRlIG1ldGhvZCBwcm9maWxpbmcnKQpAY2xpY2sub3B0aW9uKCctLXNwYXJrLWNvbmYnLCAnLWMnLCBlbnZ2YXI9J1NQQVJLX0NPTkZfRElSJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSwgaGVscD0nU3BhcmsgY29uZmlndXJhdGlvbiBmb2xkZXIgcGF0aCB0byBiZSB1c2VkIGluIHRoaXMgc2Vzc2lvbicpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIGRyeXJ1bl9jbGkoY3R4LCBhY3Rpb24sIHBhcmFtc19maWxlLCBtZXNzYWdlc19maWxlLCBmZWVkYmFja19maWxlLCBpbml0aWFsX2RhdGFzZXQsIGRhdGFzZXQsIG1vZGVsLCBtZXRyaWNzLCByZXNwb25zZSwgc3BhcmtfY29uZiwgcHJvZmlsaW5nKToKICAgIGRyeXJ1bihjdHgsIGFjdGlvbiwgcGFyYW1zX2ZpbGUsIG1lc3NhZ2VzX2ZpbGUsIGZlZWRiYWNrX2ZpbGUsIGluaXRpYWxfZGF0YXNldCwgZGF0YXNldCwgbW9kZWwsIG1ldHJpY3MsIHJlc3BvbnNlLCBzcGFya19jb25mLCBwcm9maWxpbmcpCgoKZGVmIGRyeXJ1bihjdHgsIGFjdGlvbiwgcGFyYW1zX2ZpbGUsIG1lc3NhZ2VzX2ZpbGUsIGZlZWRiYWNrX2ZpbGUsIGluaXRpYWxfZGF0YXNldCwgZGF0YXNldCwgbW9kZWwsIG1ldHJpY3MsIHJlc3BvbnNlLCBzcGFya19jb25mLCBwcm9maWxpbmcpOgoKICAgIHByaW50KGNocigyNykgKyAiWzJKIikKCiAgICAjIHNldHRpbmcgc3BhcmsgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkKICAgIG9zLmVudmlyb25bIlNQQVJLX0NPTkZfRElSIl0gPSBzcGFya19jb25mIGlmIHNwYXJrX2NvbmYgZWxzZSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsiU1BBUktfSE9NRSJdLCAiY29uZiIpCiAgICBvcy5lbnZpcm9uWyJZQVJOX0NPTkZfRElSIl0gPSBvcy5lbnZpcm9uWyJTUEFSS19DT05GX0RJUiJdCgogICAgcGFyYW1zID0gcmVhZF9maWxlKHBhcmFtc19maWxlKQogICAgbWVzc2FnZXNfZmlsZSA9IHJlYWRfZmlsZShtZXNzYWdlc19maWxlKQogICAgZmVlZGJhY2tfZmlsZSA9IHJlYWRfZmlsZShmZWVkYmFja19maWxlKQoKICAgIGlmIGFjdGlvbiBpbiBbJ2FsbCcsICdwcHJlcGFyYXRvcicsICdwcmVkaWN0b3InXSBhbmQgbm90IG1lc3NhZ2VzX2ZpbGU6CiAgICAgICAgcHJpbnQoJ1BsZWFzZSwgc2V0IHRoZSBpbnB1dCBtZXNzYWdlIHRvIGJlIHVzZWQgYnkgdGhlIGRyeSBydW4gcHJvY2Vzcy4gVXNlIC0tbWVzc2FnZXMtZmlsZSBmbGFnIHRvIGluZm9ybWUgaW4gYSBqc29uIHZhbGlkIGZvcm0uJykKICAgICAgICBzeXMuZXhpdCgiU3RvcGluZyBwcm9jZXNzISIpCgogICAgaWYgYWN0aW9uIGluIFsnYWxsJywgJ2ZlZWRiYWNrJ10gYW5kIG5vdCBmZWVkYmFja19maWxlOgogICAgICAgIHByaW50KCdQbGVhc2UsIHNldCB0aGUgZmVlZGJhY2sgaW5wdXQgbWVzc2FnZSB0byBiZSB1c2VkIGJ5IHRoZSBkcnkgcnVuIHByb2Nlc3MuIFVzZSAtLWZlZWRiYWNrLWZpbGUgZmxhZyB0byBpbmZvcm1lIGluIGEganNvbiB2YWxpZCBmb3JtLicpCiAgICAgICAgc3lzLmV4aXQoIlN0b3BpbmcgcHJvY2VzcyEiKQoKICAgIGlmIGFjdGlvbiA9PSAnYWxsJzoKICAgICAgICBwaXBlbGluZSA9IFsnYWNxdWlzaXRvcicsICd0cHJlcGFyYXRvcicsICd0cmFpbmVyJywgJ2V2YWx1YXRvcicsICdwcHJlcGFyYXRvcicsICdwcmVkaWN0b3InLCAnZmVlZGJhY2snXQogICAgZWxzZToKICAgICAgICBwaXBlbGluZSA9IFthY3Rpb25dCgogICAgX2RyeXJ1biA9IE1hcnZpbkRyeVJ1bihjdHg9Y3R4LCBtZXNzYWdlcz1bbWVzc2FnZXNfZmlsZSwgZmVlZGJhY2tfZmlsZV0sIHByaW50X3Jlc3BvbnNlPXJlc3BvbnNlKQoKICAgIGluaXRpYWxfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCgogICAgZm9yIHN0ZXAgaW4gcGlwZWxpbmU6CiAgICAgICAgX2RyeXJ1bi5leGVjdXRlKGNsYXp6PUNMQVpaRVNbc3RlcF0sIHBhcmFtcz1wYXJhbXMsIGluaXRpYWxfZGF0YXNldD1pbml0aWFsX2RhdGFzZXQsIGRhdGFzZXQ9ZGF0YXNldCwgbW9kZWw9bW9kZWwsIG1ldHJpY3M9bWV0cmljcywKICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsaW5nX2VuYWJsZWQ9cHJvZmlsaW5nKQoKICAgIHByaW50KCJUb3RhbCBUaW1lIDogezouMmZ9cyIuZm9ybWF0KHRpbWUudGltZSgpIC0gaW5pdGlhbF9zdGFydF90aW1lKSkKCiAgICBwcmludCgiXG4iKQoKCkNMQVpaRVMgPSB7CiAgICAiYWNxdWlzaXRvciI6ICJBY3F1aXNpdG9yQW5kQ2xlYW5lciIsCiAgICAidHByZXBhcmF0b3IiOiAiVHJhaW5pbmdQcmVwYXJhdG9yIiwKICAgICJ0cmFpbmVyIjogIlRyYWluZXIiLAogICAgImV2YWx1YXRvciI6ICJNZXRyaWNzRXZhbHVhdG9yIiwKICAgICJwcHJlcGFyYXRvciI6ICJQcmVkaWN0aW9uUHJlcGFyYXRvciIsCiAgICAicHJlZGljdG9yIjogIlByZWRpY3RvciIsCiAgICAiZmVlZGJhY2siOiAiRmVlZGJhY2siCn0KCgpjbGFzcyBNYXJ2aW5EcnlSdW4ob2JqZWN0KToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjdHgsIG1lc3NhZ2VzLCBwcmludF9yZXNwb25zZSk6CiAgICAgICAgc2VsZi5wcmVkaWN0b3JfbWVzc2FnZXMgPSBtZXNzYWdlc1swXQogICAgICAgIHNlbGYuZmVlZGJhY2tfbWVzc2FnZXMgPSBtZXNzYWdlc1sxXQogICAgICAgIHNlbGYucG1lc3NhZ2VzID0gW10KICAgICAgICBzZWxmLnBhY2thZ2VfbmFtZSA9IGN0eC5vYmpbJ3BhY2thZ2VfbmFtZSddCiAgICAgICAgc2VsZi5rd2FyZ3MgPSBOb25lCiAgICAgICAgc2VsZi5wcmludF9yZXNwb25zZSA9IHByaW50X3Jlc3BvbnNlCgogICAgZGVmIGV4ZWN1dGUoc2VsZiwgY2xhenosIHBhcmFtcywgaW5pdGlhbF9kYXRhc2V0LCBkYXRhc2V0LCBtb2RlbCwgbWV0cmljcywgcHJvZmlsaW5nX2VuYWJsZWQ9RmFsc2UpOgogICAgICAgIHNlbGYucHJpbnRfc3RhcnRfc3RlcChjbGF6eikKCiAgICAgICAgX1N0ZXAgPSBkeW5hbWljX2ltcG9ydCgie30ue30iLmZvcm1hdChzZWxmLnBhY2thZ2VfbmFtZSwgY2xhenopKQoKICAgICAgICBpZiBub3Qgc2VsZi5rd2FyZ3M6CiAgICAgICAgICAgIHNlbGYua3dhcmdzID0gZ2VuZXJhdGVfa3dhcmdzKF9TdGVwLCBwYXJhbXMsIGluaXRpYWxfZGF0YXNldCwgZGF0YXNldCwgbW9kZWwsIG1ldHJpY3MpCgogICAgICAgIHN0ZXAgPSBfU3RlcCgqKnNlbGYua3dhcmdzKQoKICAgICAgICBkZWYgY2FsbF9vbmxpbmVfYWN0aW9ucyhzdGVwLCBtc2csIG1zZ19pZHgpOgogICAgICAgICAgICBkZWYgcHJpbnRfbWVzc2FnZShyZXN1bHQpOgogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0LCBpbmRlbnQ9NCwgc29ydF9rZXlzPVRydWUpKQogICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICBwcmludCgiVW5hYmxlIHRvIHNlcmlhbGl6ZSB0aGUgb2JqZWN0IHJldHVybmVkISIpCgogICAgICAgICAgICBpZiBzZWxmLnByaW50X3Jlc3BvbnNlOgogICAgICAgICAgICAgICAgICAgIHByaW50KCJcbk1lc3NhZ2Uge30gOlxuIi5mb3JtYXQobXNnX2lkeCkpCiAgICAgICAgICAgICAgICAgICAgcHJpbnRfbWVzc2FnZShtc2cpCgogICAgICAgICAgICBpZiBwcm9maWxpbmdfZW5hYmxlZDoKICAgICAgICAgICAgICAgIHdpdGggcHJvZmlsaW5nKG91dHB1dF9wYXRoPSIucHJvZmlsaW5nIiwgdWlkPWNsYXp6KSBhcyBwcm9mOgogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZXAuZXhlY3V0ZShpbnB1dF9tZXNzYWdlPW1zZywgcGFyYW1zPXBhcmFtcykKCiAgICAgICAgICAgICAgICBwcm9mLmRpc2FibGUKICAgICAgICAgICAgICAgIHByaW50KCJcblByb2ZpbGUgaW1hZ2VzIGNyZWF0ZWQgaW4ge31cbiIuZm9ybWF0KHByb2YuaW1hZ2VfcGF0aCkpCgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RlcC5leGVjdXRlKGlucHV0X21lc3NhZ2U9bXNnLCBwYXJhbXM9cGFyYW1zKQoKICAgICAgICAgICAgaWYgc2VsZi5wcmludF9yZXNwb25zZToKICAgICAgICAgICAgICAgIHByaW50KCJcblJlc3VsdCBmb3IgTWVzc2FnZSB7fSA6XG4iLmZvcm1hdChtc2dfaWR4KSkKICAgICAgICAgICAgICAgIHByaW50X21lc3NhZ2UocmVzdWx0KQoKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAoKICAgICAgICBpZiBjbGF6eiA9PSAnUHJlZGljdGlvblByZXBhcmF0b3InOgogICAgICAgICAgICBmb3IgaWR4LCBtc2cgaW4gZW51bWVyYXRlKHNlbGYucHJlZGljdG9yX21lc3NhZ2VzKToKICAgICAgICAgICAgICAgIHNlbGYucG1lc3NhZ2VzLmFwcGVuZChjYWxsX29ubGluZV9hY3Rpb25zKHN0ZXAsIG1zZywgaWR4KSkKCiAgICAgICAgZWxpZiBjbGF6eiA9PSAnRmVlZGJhY2snOgogICAgICAgICAgICBmb3IgaWR4LCBtc2cgaW4gZW51bWVyYXRlKHNlbGYuZmVlZGJhY2tfbWVzc2FnZXMpOgogICAgICAgICAgICAgICAgc2VsZi5wbWVzc2FnZXMuYXBwZW5kKGNhbGxfb25saW5lX2FjdGlvbnMoc3RlcCwgbXNnLCBpZHgpKQoKICAgICAgICBlbGlmIGNsYXp6ID09ICdQcmVkaWN0b3InOgoKICAgICAgICAgICAgc2VsZi5leGVjdXRlKCJQcmVkaWN0aW9uUHJlcGFyYXRvciIsIHBhcmFtcywgaW5pdGlhbF9kYXRhc2V0LCBkYXRhc2V0LCBtb2RlbCwgbWV0cmljcykKCiAgICAgICAgICAgIHNlbGYucG1lc3NhZ2VzID0gc2VsZi5tZXNzYWdlcyBpZiBub3Qgc2VsZi5wbWVzc2FnZXMgZWxzZSBzZWxmLnBtZXNzYWdlcwoKICAgICAgICAgICAgZm9yIGlkeCwgbXNnIGluIGVudW1lcmF0ZShzZWxmLnBtZXNzYWdlcyk6CiAgICAgICAgICAgICAgICBjYWxsX29ubGluZV9hY3Rpb25zKHN0ZXAsIG1zZywgaWR4KQoKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBwcm9maWxpbmdfZW5hYmxlZDoKICAgICAgICAgICAgICAgIHdpdGggcHJvZmlsaW5nKG91dHB1dF9wYXRoPSIucHJvZmlsaW5nIiwgdWlkPWNsYXp6KSBhcyBwcm9mOgogICAgICAgICAgICAgICAgICAgIHN0ZXAuZXhlY3V0ZShwYXJhbXM9cGFyYW1zKQoKICAgICAgICAgICAgICAgIHByb2YuZGlzYWJsZQoKICAgICAgICAgICAgICAgIHByaW50KCJcblByb2ZpbGUgaW1hZ2VzIGNyZWF0ZWQgaW4ge31cbiIuZm9ybWF0KHByb2YuaW1hZ2VfcGF0aCkpCgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgc3RlcC5leGVjdXRlKHBhcmFtcz1wYXJhbXMpCgogICAgICAgIHNlbGYucHJpbnRfZmluaXNoX3N0ZXAoKQoKICAgIGRlZiBwcmludF9maW5pc2hfc3RlcChzZWxmKToKICAgICAgICBwcmludCgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNURVAgVEFLRVMgezouNGZ9IChzZWNvbmRzKSAiLmZvcm1hdCgodGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0X3RpbWUpKSkKCiAgICBkZWYgcHJpbnRfc3RhcnRfc3RlcChzZWxmLCBuYW1lKToKICAgICAgICBwcmludCgiXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKQogICAgICAgIHByaW50KCJNQVJWSU4gRFJZUlVOIC0gU1RFUCBbe31dIi5mb3JtYXQobmFtZSkpCiAgICAgICAgcHJpbnQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIikKICAgICAgICBzZWxmLnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQoKCmRlZiBkeW5hbWljX2ltcG9ydChjbGF6eik6CiAgICBjb21wb25lbnRzID0gY2xhenouc3BsaXQoJy4nKQogICAgbW9kID0gX19pbXBvcnRfXyhjb21wb25lbnRzWzBdKQogICAgZm9yIGNvbXAgaW4gY29tcG9uZW50c1sxOl06CiAgICAgICAgbW9kID0gZ2V0YXR0cihtb2QsIGNvbXApCiAgICByZXR1cm4gbW9kCgoKZGVmIHJlYWRfZmlsZShmaWxlbmFtZSk6CiAgICBmbmFtZSA9IG9zLnBhdGguam9pbigiIiwgZmlsZW5hbWUpCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbmFtZSk6CgogICAgICAgIHByaW50KCJFbmdpbmUgZmlsZSB7fSBsb2FkZWQhIi5mb3JtYXQoZmlsZW5hbWUpKQoKICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICdyJykgYXMgZnA6CiAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWQoZnApCiAgICBlbHNlOgogICAgICAgIHByaW50KCJFbmdpbmUgZmlsZSB7fSBkb2Vzbid0IGV4aXN0cy4uLiIuZm9ybWF0KGZpbGVuYW1lKSkKICAgICAgICByZXR1cm4ge30KCgpkZWYgZ2VuZXJhdGVfa3dhcmdzKGNsYXp6LCBwYXJhbXM9Tm9uZSwgaW5pdGlhbF9kYXRhc2V0PU5vbmUsIGRhdGFzZXQ9Tm9uZSwgbW9kZWw9Tm9uZSwgbWV0cmljcz1Ob25lKToKICAgIGt3YXJncyA9IHt9CgogICAgaWYgcGFyYW1zOgogICAgICAgIGt3YXJnc1sicGFyYW1zIl0gPSBwYXJhbXMKICAgIGlmIGRhdGFzZXQ6CiAgICAgICAga3dhcmdzWyJkYXRhc2V0Il0gPSBjbGF6ei5yZXRyaWV2ZV9vYmooZGF0YXNldCkKICAgIGlmIGluaXRpYWxfZGF0YXNldDoKICAgICAgICBrd2FyZ3NbImluaXRpYWxfZGF0YXNldCJdID0gY2xhenoucmV0cmlldmVfb2JqKGluaXRpYWxfZGF0YXNldCkKICAgIGlmIG1vZGVsOgogICAgICAgIGt3YXJnc1sibW9kZWwiXSA9IGNsYXp6LnJldHJpZXZlX29iaihtb2RlbCkKICAgIGlmIG1ldHJpY3M6CiAgICAgICAga3dhcmdzWyJtZXRyaWNzIl0gPSBjbGF6ei5yZXRyaWV2ZV9vYmoobWV0cmljcykKCiAgICBrd2FyZ3NbInBlcnNpc3RlbmNlX21vZGUiXSA9ICdsb2NhbCcKICAgIGt3YXJnc1siZGVmYXVsdF9yb290X3BhdGgiXSA9IG9zLnBhdGguam9pbihvcy5nZXRlbnYoJ01BUlZJTl9EQVRBX1BBVEgnKSwgJy5hcnRpZmFjdHMnKQogICAga3dhcmdzWyJpc19yZW1vdGVfY2FsbGluZyJdID0gVHJ1ZQoKICAgIHJldHVybiBrd2FyZ3MKCgpjbGFzcyBNYXJ2aW5FbmdpbmVTZXJ2ZXIob2JqZWN0KToKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIGNyZWF0ZShzZWxmLCBjdHgsIGFjdGlvbiwgcG9ydCwgd29ya2VycywgcnBjX3dvcmtlcnMsIHBhcmFtcywgaW5pdGlhbF9kYXRhc2V0LCBkYXRhc2V0LCBtb2RlbCwgbWV0cmljcywgcGlwZWxpbmUpOgogICAgICAgIHBhY2thZ2VfbmFtZSA9IGN0eC5vYmpbJ3BhY2thZ2VfbmFtZSddCgogICAgICAgIGRlZiBjcmVhdGVfb2JqZWN0KGFjdCk6CiAgICAgICAgICAgIGNsYXp6ID0gQ0xBWlpFU1thY3RdCiAgICAgICAgICAgIF9BY3Rpb24gPSBkeW5hbWljX2ltcG9ydCgie30ue30iLmZvcm1hdChwYWNrYWdlX25hbWUsIGNsYXp6KSkKICAgICAgICAgICAga3dhcmdzID0gZ2VuZXJhdGVfa3dhcmdzKF9BY3Rpb24sIHBhcmFtcywgaW5pdGlhbF9kYXRhc2V0LCBkYXRhc2V0LCBtb2RlbCwgbWV0cmljcykKICAgICAgICAgICAgcmV0dXJuIF9BY3Rpb24oKiprd2FyZ3MpCgogICAgICAgIHJvb3Rfb2JqID0gY3JlYXRlX29iamVjdChhY3Rpb24pCiAgICAgICAgcHJldmlvdXNfb2JqZWN0ID0gcm9vdF9vYmoKCiAgICAgICAgaWYgcGlwZWxpbmU6CiAgICAgICAgICAgIGZvciBzdGVwIGluIGxpc3QocmV2ZXJzZWQocGlwZWxpbmUpKToKICAgICAgICAgICAgICAgIHByZXZpb3VzX29iamVjdC5fcHJldmlvdXNfc3RlcCA9IGNyZWF0ZV9vYmplY3Qoc3RlcCkKICAgICAgICAgICAgICAgIHByZXZpb3VzX29iamVjdCA9IHByZXZpb3VzX29iamVjdC5fcHJldmlvdXNfc3RlcAoKICAgICAgICBzZXJ2ZXIgPSByb290X29iai5fcHJlcGFyZV9yZW1vdGVfc2VydmVyKHBvcnQ9cG9ydCwgd29ya2Vycz13b3JrZXJzLCBycGNfd29ya2Vycz1ycGNfd29ya2VycykKCiAgICAgICAgcHJpbnQoIlN0YXJ0aW5nIEdSUEMgc2VydmVyIFt7fV0gZm9yIHt9IEFjdGlvbiIuZm9ybWF0KHBvcnQsIGFjdGlvbikpCiAgICAgICAgc2VydmVyLnN0YXJ0KCkKCiAgICAgICAgcmV0dXJuIHNlcnZlcgoKCkBjbGkuY29tbWFuZCgnZW5naW5lLWdycGNzZXJ2ZXInLCBoZWxwPSdNYXJ2aW4gZ1JQQyBlbmdpbmUgYWN0aW9uIHNlcnZlciBzdGFydHMnKQpAY2xpY2sub3B0aW9uKAogICAgJy0tYWN0aW9uJywKICAgICctYScsCiAgICBkZWZhdWx0PSdhbGwnLAogICAgdHlwZT1jbGljay5DaG9pY2UoWydhbGwnLCAnYWNxdWlzaXRvcicsICd0cHJlcGFyYXRvcicsICd0cmFpbmVyJywgJ2V2YWx1YXRvcicsICdwcmVkaWN0b3InLCAnZmVlZGJhY2snXSksCiAgICBoZWxwPSdNYXJ2aW4gZW5naW5lIGFjdGlvbiBuYW1lJykKQGNsaWNrLm9wdGlvbignLS1pbml0aWFsLWRhdGFzZXQnLCAnLWlkJywgaGVscD0nSW5pdGlhbCBkYXRhc2V0IGZpbGUgcGF0aCcsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSkpCkBjbGljay5vcHRpb24oJy0tZGF0YXNldCcsICctZCcsIGhlbHA9J0RhdGFzZXQgZmlsZSBwYXRoJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSkKQGNsaWNrLm9wdGlvbignLS1tb2RlbCcsICctbScsIGhlbHA9J0VuZ2luZSBtb2RlbCBmaWxlIHBhdGgnLCB0eXBlPWNsaWNrLlBhdGgoZXhpc3RzPVRydWUpKQpAY2xpY2sub3B0aW9uKCctLW1ldHJpY3MnLCAnLW1lJywgaGVscD0nRW5naW5lIE1ldHJpY3MgZmlsZSBwYXRoJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSkKQGNsaWNrLm9wdGlvbignLS1wYXJhbXMtZmlsZScsICctcGYnLCBkZWZhdWx0PSdlbmdpbmUucGFyYW1zJywgaGVscD0nTWFydmluIGVuZ2luZSBwYXJhbXMgZmlsZSBwYXRoJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSkKQGNsaWNrLm9wdGlvbignLS1tZXRhZGF0YS1maWxlJywgJy1tZicsIGRlZmF1bHQ9J2VuZ2luZS5tZXRhZGF0YScsIGhlbHA9J01hcnZpbiBlbmdpbmUgbWV0YWRhdGEgZmlsZSBwYXRoJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSkKQGNsaWNrLm9wdGlvbignLS1zcGFyay1jb25mJywgJy1jJywgZW52dmFyPSdTUEFSS19DT05GX0RJUicsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSksIGhlbHA9J1NwYXJrIGNvbmZpZ3VyYXRpb24gcGF0aCB0byBiZSB1c2VkJykKQGNsaWNrLm9wdGlvbignLS1tYXgtd29ya2VycycsICctdycsIGRlZmF1bHQ9bXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpLCBoZWxwPSdNYXggbnVtYmVyIG9mIGdycGMgdGhyZWFkcyB3b3JrZXJzIHBlciBhY3Rpb24nKQpAY2xpY2sub3B0aW9uKCctLW1heC1ycGMtd29ya2VycycsICctcncnLCBkZWZhdWx0PW11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwgaGVscD0nTWF4IG51bWJlciBvZiBncnBjIHdvcmtlcnMgcGVyIGFjdGlvbicpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIGVuZ2luZV9zZXJ2ZXIoY3R4LCBhY3Rpb24sIHBhcmFtc19maWxlLCBtZXRhZGF0YV9maWxlLCBpbml0aWFsX2RhdGFzZXQsIGRhdGFzZXQsIG1vZGVsLCBtZXRyaWNzLCBzcGFya19jb25mLCBtYXhfd29ya2VycywgbWF4X3JwY193b3JrZXJzKToKCiAgICBwcmludCgiU3RhcnRpbmcgc2VydmVyIC4uLiIpCgogICAgIyBzZXR0aW5nIHNwYXJrIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5CiAgICBvcy5lbnZpcm9uWyJTUEFSS19DT05GX0RJUiJdID0gc3BhcmtfY29uZiBpZiBzcGFya19jb25mIGVsc2Ugb3MucGF0aC5qb2luKG9zLmVudmlyb25bIlNQQVJLX0hPTUUiXSwgImNvbmYiKQogICAgb3MuZW52aXJvblsiWUFSTl9DT05GX0RJUiJdID0gb3MuZW52aXJvblsiU1BBUktfQ09ORl9ESVIiXQoKICAgIHBhcmFtcyA9IHJlYWRfZmlsZShwYXJhbXNfZmlsZSkKICAgIG1ldGFkYXRhID0gcmVhZF9maWxlKG1ldGFkYXRhX2ZpbGUpCiAgICBkZWZhdWx0X2FjdGlvbnMgPSB7YWN0aW9uWyduYW1lJ106IGFjdGlvbiBmb3IgYWN0aW9uIGluIG1ldGFkYXRhWydhY3Rpb25zJ119CgogICAgaWYgYWN0aW9uID09ICdhbGwnOgogICAgICAgIGFjdGlvbiA9IGRlZmF1bHRfYWN0aW9ucwogICAgZWxzZToKICAgICAgICBhY3Rpb24gPSB7YWN0aW9uOiBkZWZhdWx0X2FjdGlvbnNbYWN0aW9uXX0KCiAgICBzZXJ2ZXJzID0gW10KICAgIGZvciBhY3Rpb25fbmFtZSBpbiBhY3Rpb24ua2V5cygpOgogICAgICAgICMgaW5pdGlhbGl6aW5nIHNlcnZlciBjb25maWd1cmF0aW9uCiAgICAgICAgZW5naW5lX3NlcnZlciA9IE1hcnZpbkVuZ2luZVNlcnZlci5jcmVhdGUoCiAgICAgICAgICAgIGN0eD1jdHgsCiAgICAgICAgICAgIGFjdGlvbj1hY3Rpb25fbmFtZSwKICAgICAgICAgICAgcG9ydD1hY3Rpb25bYWN0aW9uX25hbWVdWyJwb3J0Il0sCiAgICAgICAgICAgIHdvcmtlcnM9bWF4X3dvcmtlcnMsCiAgICAgICAgICAgIHJwY193b3JrZXJzPW1heF9ycGNfd29ya2VycywKICAgICAgICAgICAgcGFyYW1zPXBhcmFtcywKICAgICAgICAgICAgaW5pdGlhbF9kYXRhc2V0PWluaXRpYWxfZGF0YXNldCwKICAgICAgICAgICAgZGF0YXNldD1kYXRhc2V0LAogICAgICAgICAgICBtb2RlbD1tb2RlbCwKICAgICAgICAgICAgbWV0cmljcz1tZXRyaWNzLAogICAgICAgICAgICBwaXBlbGluZT1hY3Rpb25bYWN0aW9uX25hbWVdWyJwaXBlbGluZSJdCiAgICAgICAgKQoKICAgICAgICBzZXJ2ZXJzLmFwcGVuZChlbmdpbmVfc2VydmVyKQoKICAgIHRyeToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICB0aW1lLnNsZWVwKDEwMCkKCiAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgcHJpbnQoIlRlcm1pbmF0aW5nIHNlcnZlciAuLi4iKQogICAgICAgIGZvciBzZXJ2ZXIgaW4gc2VydmVyczoKICAgICAgICAgICAgc2VydmVyLnN0b3AoMCkKCgpURU1QTEFURV9CQVNFUyA9IHsKICAgICdweXRob24tZW5naW5lJzogb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICd0ZW1wbGF0ZXMnLCAncHl0aG9uLWVuZ2luZScpCn0KClJFTkFNRV9ESVJTID0gWwogICAgKCdwcm9qZWN0X3BhY2thZ2UnLCAne3twcm9qZWN0LnBhY2thZ2V9fScpLApdCgpJR05PUkVfRElSUyA9IFsKICAgICMgSWdub3JlIHNlcnZpY2UgaW50ZXJuYWwgdGVtcGxhdGVzCiAgICAndGVtcGxhdGVzJwpdCgoKX29yaWdfdHlwZSA9IHR5cGUKCgpAY2xpLmNvbW1hbmQoJ2VuZ2luZS1nZW5lcmF0ZWVudicsIGhlbHA9J0dlbmVyYXRlIGEgbmV3IG1hcnZpbiBlbmdpbmUgZW52aXJvbm1lbnQgYW5kIGluc3RhbGwgZGVmYXVsdCByZXF1aXJlbWVudHMuJykKQGNsaWNrLmFyZ3VtZW50KCdlbmdpbmUtcGF0aCcsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSkpCkBjbGljay5vcHRpb24oJy0tcHl0aG9uJywgJy1wJywgZGVmYXVsdD0ncHl0aG9uJywgaGVscD0nVGhlIFB5dGhvbiBpbnRlcnByZXRlciB0byB1c2UgdG8gY3JlYXRlIHRoZSBuZXcgZW52aXJvbm1lbnQnKQpkZWYgZ2VuZXJhdGVfZW52KGVuZ2luZV9wYXRoLCBweXRob24pOgogICAgZGlyXyA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5hYnNwYXRoKGVuZ2luZV9wYXRoKSkKICAgIHZlbnZfbmFtZSA9IF9jcmVhdGVfdmlydHVhbF9lbnYoZGlyXywgZW5naW5lX3BhdGgsIHB5dGhvbikKICAgIF9jYWxsX21ha2VfZW52KHZlbnZfbmFtZSkKCiAgICBwcmludCgnXG5Eb25lISEhIScpCiAgICBwcmludCgnTm93IHRvIHdvcmtvbiBpbiB0aGUgbmV3IGVuZ2luZSBwcm9qZWN0IHVzZTogd29ya29uIHt9Jy5mb3JtYXQodmVudl9uYW1lKSkKCgpAY2xpLmNvbW1hbmQoJ2VuZ2luZS1nZW5lcmF0ZScsIGhlbHA9J0dlbmVyYXRlIGEgbmV3IG1hcnZpbiBlbmdpbmUgcHJvamVjdCBhbmQgaW5zdGFsbCBkZWZhdWx0IHJlcXVpcmVtZW50cy4nKQpAY2xpY2sub3B0aW9uKCctLW5hbWUnLCAnLW4nLCBwcm9tcHQ9J1Byb2plY3QgbmFtZScsIGhlbHA9J1Byb2plY3QgbmFtZScpCkBjbGljay5vcHRpb24oJy0tZGVzY3JpcHRpb24nLCAnLWQnLCBwcm9tcHQ9J1Nob3J0IGRlc2NyaXB0aW9uJywgZGVmYXVsdD0nTWFydmluIGVuZ2luZScsIGhlbHA9J0xpYnJhcnkgc2hvcnQgZGVzY3JpcHRpb24nKQpAY2xpY2sub3B0aW9uKCctLW1hbnRhaW5lcicsICctbScsIHByb21wdD0nTWFudGFpbmVyIG5hbWUnLCBkZWZhdWx0PSdNYXJ2aW4gQUkgQ29tbXVuaXR5JywgaGVscD0nTWFudGFpbmVyIG5hbWUnKQpAY2xpY2sub3B0aW9uKCctLWVtYWlsJywgJy1lJywgcHJvbXB0PSdNYW50YWluZXIgZW1haWwnLCBkZWZhdWx0PSdtYXJ2aW4tYWlAZ29vZ2xlZ3JvdXBzLmNvbScsIGhlbHA9J01hbnRhaW5lciBlbWFpbCcpCkBjbGljay5vcHRpb24oJy0tcGFja2FnZScsICctcCcsIGRlZmF1bHQ9JycsIGhlbHA9J1BhY2thZ2UgbmFtZScpCkBjbGljay5vcHRpb24oJy0tZGVzdCcsICctZCcsIGVudnZhcj0nTUFSVklOX0hPTUUnLCB0eXBlPWNsaWNrLlBhdGgoZXhpc3RzPVRydWUpLCBoZWxwPSdSb290IGZvbGRlciBwYXRoIGZvciB0aGUgY3JlYXRpb24nKQpAY2xpY2sub3B0aW9uKCctLW5vLWVudicsIGlzX2ZsYWc9VHJ1ZSwgZGVmYXVsdD1GYWxzZSwgaGVscD0nRG9uXCd0IGNyZWF0ZSB0aGUgdmlydHVhbCBlbnZpcm9tZW50JykKQGNsaWNrLm9wdGlvbignLS1uby1naXQnLCBpc19mbGFnPVRydWUsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9J0RvblwndCBpbml0aWFsaXplIHRoZSBnaXQgcmVwb3NpdG9yeScpCkBjbGljay5vcHRpb24oJy0tcHl0aG9uJywgJy1weScsIGRlZmF1bHQ9J3B5dGhvbicsIGhlbHA9J1RoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgbmV3IGVudmlyb25tZW50JykKZGVmIGdlbmVyYXRlKG5hbWUsIGRlc2NyaXB0aW9uLCBtYW50YWluZXIsIGVtYWlsLCBwYWNrYWdlLCBkZXN0LCBub19lbnYsIG5vX2dpdCwgcHl0aG9uKToKICAgIHR5cGVfID0gJ3B5dGhvbi1lbmdpbmUnCiAgICB0eXBlID0gX29yaWdfdHlwZQoKICAgICMgUHJvY2VzcyBwYWNrYWdlIG5hbWUKCiAgICBwYWNrYWdlID0gX3NsdWdpZnkocGFja2FnZSBvciBuYW1lKQoKICAgICMgTWFrZSBzdXJlIHBhY2thZ2UgbmFtZSBzdGFydHMgd2l0aCAibWFydmluIgogICAgaWYgbm90IHBhY2thZ2Uuc3RhcnRzd2l0aCgnbWFydmluJyk6CiAgICAgICAgcGFja2FnZSA9ICdtYXJ2aW5fe30nLmZvcm1hdChwYWNrYWdlKQoKICAgICMgUmVtb3ZlICJsaWIiIHByZWZpeCBmcm9tIHBhY2thZ2UgbmFtZQogICAgaWYgdHlwZV8gPT0gJ2xpYicgYW5kIHBhY2thZ2UuZW5kc3dpdGgoJ2xpYicpOgogICAgICAgIHBhY2thZ2UgPSBwYWNrYWdlWzotM10KICAgICMgQ3VzdG9tIHN0cmlwIHRvIHJlbW92ZSB1bmRlcnNjb3JlcwogICAgcGFja2FnZSA9IHBhY2thZ2Uuc3RyaXAoJ18nKQoKICAgICMgQXBwZW5kIHByb2plY3QgdHlwZSB0byBzZXJ2aWNlcwoKICAgIGlmIHR5cGVfID09ICdweXRob24tZW5naW5lJyBhbmQgbm90IHBhY2thZ2UuZW5kc3dpdGgoJ2VuZ2luZScpOgogICAgICAgIHBhY2thZ2UgPSAne31fZW5naW5lJy5mb3JtYXQocGFja2FnZSkKCiAgICAjIFByb2Nlc3MgZGlyZWN0b3J5L3ZpcnR1YWxlbnYgbmFtZQoKICAgICMgRGlyZWN0b3J5IG5hbWUgc2hvdWxkIHVzZSAnLScgaW5zdGVhZCBvZiAnXycKICAgIGRpcl8gPSBwYWNrYWdlLnJlcGxhY2UoJ18nLCAnLScpCgogICAgIyBSZW1vdmUgIm1hcnZpbiIgcHJlZml4IGZyb20gZGlyZWN0b3J5CiAgICBpZiBkaXJfLnN0YXJ0c3dpdGgoJ21hcnZpbicpOgogICAgICAgIGRpcl8gPSBkaXJfWzY6XQogICAgZGlyXyA9IGRpcl8uc3RyaXAoJy0nKQoKICAgICMgQXBwZW5kICJsaWIiIHRvIGRpcmVjdG9yeSBuYW1lIGlmIGNyZWF0aW5nIGEgbGliCiAgICBpZiB0eXBlXyA9PSAnbGliJyBhbmQgbm90IGRpcl8uZW5kc3dpdGgoJ2xpYicpOgogICAgICAgIGRpcl8gPSAne30tbGliJy5mb3JtYXQoZGlyXykKCiAgICBkZXN0ID0gb3MucGF0aC5qb2luKGRlc3QsIGRpcl8pCgogICAgaWYgdHlwZV8gbm90IGluIFRFTVBMQVRFX0JBU0VTOgogICAgICAgIHByaW50KCdbRVJST1JdIENvdWxkIG5vdCBmb3VuZCB0ZW1wbGF0ZSBmaWxlcyBmb3IgInt0eXBlfSIuJy5mb3JtYXQodHlwZT10eXBlXykpCiAgICAgICAgc3lzLmV4aXQoMSkKCiAgICBwcm9qZWN0ID0gewogICAgICAgICduYW1lJzogX3NsdWdpZnkobmFtZSksCiAgICAgICAgJ2Rlc2NyaXB0aW9uJzogZGVzY3JpcHRpb24sCiAgICAgICAgJ3BhY2thZ2UnOiBwYWNrYWdlLAogICAgICAgICd0b29sYm94X3ZlcnNpb24nOiBvcy5nZXRlbnYoJ1RPT0xCT1hfVkVSU0lPTicpLAogICAgICAgICd0eXBlJzogdHlwZV8KICAgIH0KCiAgICBtYW50YWluZXIgPSB7CiAgICAgICAgJ25hbWUnOiBtYW50YWluZXIsCiAgICAgICAgJ2VtYWlsJzogZW1haWwsCiAgICB9CgogICAgY29udGV4dCA9IHsKICAgICAgICAncHJvamVjdCc6IHByb2plY3QsCiAgICAgICAgJ21hbnRhaW5lcic6IG1hbnRhaW5lciwKICAgIH0KCiAgICBmb2xkZXJfY3JlYXRlZCA9IEZhbHNlCgogICAgdHJ5OgogICAgICAgIF9jb3B5X3NjYWZmb2xkX3N0cnVjdHVyZShURU1QTEFURV9CQVNFU1t0eXBlX10sIGRlc3QpCgogICAgICAgIGZvbGRlcl9jcmVhdGVkID0gVHJ1ZQoKICAgICAgICBfY29weV9wcm9jZXNzZWRfZmlsZXMoVEVNUExBVEVfQkFTRVNbdHlwZV9dLCBkZXN0LCBjb250ZXh0KQogICAgICAgIF9yZW5hbWVfZGlycyhkZXN0LCBSRU5BTUVfRElSUywgY29udGV4dCkKICAgICAgICBfbWFrZV9kYXRhX2xpbmsoZGVzdCkKCiAgICAgICAgdmVudl9uYW1lID0gTm9uZQogICAgICAgIGlmIG5vdCBub19lbnY6CiAgICAgICAgICAgIHZlbnZfbmFtZSA9IF9jcmVhdGVfdmlydHVhbF9lbnYoZGlyXywgZGVzdCwgcHl0aG9uKQogICAgICAgICAgICBfY2FsbF9tYWtlX2Vudih2ZW52X25hbWUpCgogICAgICAgIGlmIG5vdCBub19naXQ6CiAgICAgICAgICAgIF9jYWxsX2dpdF9pbml0KGRlc3QpCgogICAgICAgIHByaW50KCdcbkRvbmUhISEhJykKCiAgICAgICAgaWYgbm90IG5vX2VudjoKICAgICAgICAgICAgcHJpbnQoJ05vdyB0byB3b3Jrb24gaW4gdGhlIG5ldyBlbmdpbmUgcHJvamVjdCB1c2U6IHdvcmtvbiB7fScuZm9ybWF0KHZlbnZfbmFtZSkpCgogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIGxvZ2dlci5pbmZvKGUpCiAgICAgICAgIyByZW1vdmUgcHJvamVjdCBpZiBjcmVhdGVkCiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGVzdCkgYW5kIGZvbGRlcl9jcmVhdGVkOgogICAgICAgICAgICBzaHV0aWwucm10cmVlKGRlc3QpCgoKX3B1bmN0X3JlID0gcmUuY29tcGlsZShyJ1tcdCAhIiMkJSZcJygpKlwtLzw9Pj9AXFtcXFxdXl9ge3x9LC5dKycpCgoKZGVmIF9zbHVnaWZ5KHRleHQsIGRlbGltPSdfJyk6CiAgICByZXN1bHQgPSBbXQogICAgZm9yIHdvcmQgaW4gX3B1bmN0X3JlLnNwbGl0KHRleHQubG93ZXIoKSk6CiAgICAgICAgcmVzdWx0LmV4dGVuZCh1bmlkZWNvZGUod29yZCkuc3BsaXQoKSkKICAgIHJldHVybiBzaXgudShkZWxpbS5qb2luKHJlc3VsdCkpCgoKZGVmIF9jb3B5X3NjYWZmb2xkX3N0cnVjdHVyZShzcmMsIGRlc3QpOgogICAgb3MubWtkaXIoZGVzdCkKCiAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzcmMpOgogICAgICAgIGZvciBkaXJfIGluIGRpcnM6CiAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZGlyXykKICAgICAgICAgICAgZGlybmFtZSA9ICd7ZGVzdH17ZGlybmFtZX0nLmZvcm1hdChkZXN0PWRlc3QsIGRpcm5hbWU9ZGlybmFtZS5yZXBsYWNlKHNyYywgJycpKSAgIyBnZXQgZGlybmFtZSB3aXRob3V0IHNvdXJjZSBwYXRoCgogICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQoKCmRlZiBfY29weV9wcm9jZXNzZWRfZmlsZXMoc3JjLCBkZXN0LCBjb250ZXh0KToKICAgIGVudiA9IGppbmphMi5FbnZpcm9ubWVudChsb2FkZXI9amluamEyLkZpbGVTeXN0ZW1Mb2FkZXIoc3JjKSkKCiAgICBwcmludCgnUHJvY2Vzc2luZyB0ZW1wbGF0ZSBmaWxlcy4uLicpCgogICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjKToKCiAgICAgICAgZGlybmFtZSA9IHJvb3QucmVwbGFjZShzcmMsICcnKVsxOl0gICMgZ2V0IGRpcm5hbWUgd2l0aG91dCBzb3VyY2UgcGF0aAogICAgICAgIHRvX2Rpcm5hbWUgPSBvcy5wYXRoLmpvaW4oZGVzdCwgZGlybmFtZSkKCiAgICAgICAgc2hvdWxkX3Byb2Nlc3MgPSBub3QgYW55KHJvb3Quc3RhcnRzd2l0aChkaXJfKSBmb3IgZGlyXyBpbiBJR05PUkVfRElSUykKCiAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CgogICAgICAgICAgICAjIElnbm9yZSB0cmFzaAogICAgICAgICAgICBpZiBmaWxlID09ICcuRFNfU3RvcmUnIG9yIGZpbGUuZW5kc3dpdGgoJy5weWMnKToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICBmcm9tXyA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBmaWxlKQogICAgICAgICAgICB0b18gPSBvcy5wYXRoLmpvaW4odG9fZGlybmFtZSwgZmlsZSkKCiAgICAgICAgICAgIHByaW50KCdDb3B5aW5nICJ7MH0iIHRvICJ7MX0iLi4uJy5mb3JtYXQoZnJvbV8sIHRvXykpCgogICAgICAgICAgICBpZiBub3Qgc2hvdWxkX3Byb2Nlc3M6CiAgICAgICAgICAgICAgICBzaHV0aWwuY29weShvcy5wYXRoLmpvaW4oc3JjLCBmcm9tXyksIHRvXykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gZW52LmdldF90ZW1wbGF0ZShmcm9tXykKICAgICAgICAgICAgICAgIG91dHB1dCA9IHRlbXBsYXRlLnJlbmRlcigqKmNvbnRleHQpCgogICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRvXywgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUob3V0cHV0KQoKCmRlZiBfcmVuYW1lX2RpcnMoYmFzZSwgZGlycywgY29udGV4dCk6CiAgICBmb3IgZGlyXyBpbiBkaXJzOgogICAgICAgIGRpcm5hbWUsIHRlbXBsYXRlID0gZGlyXwogICAgICAgIG9sZG5hbWUgPSBvcy5wYXRoLmpvaW4oYmFzZSwgZGlybmFtZSkKCiAgICAgICAgcHJvY2Vzc2VkID0gamluamEyLlRlbXBsYXRlKHRlbXBsYXRlKS5yZW5kZXIoKipjb250ZXh0KQogICAgICAgIG5ld25hbWUgPSBvcy5wYXRoLmpvaW4oYmFzZSwgcHJvY2Vzc2VkKQoKICAgICAgICBzaHV0aWwubW92ZShvbGRuYW1lLCBuZXduYW1lKQoKICAgICAgICBwcmludCgnUmVuYW1pbmcgezB9IGFzIHsxfScuZm9ybWF0KG9sZG5hbWUsIG5ld25hbWUpKQoKCmRlZiBfY3JlYXRlX3ZpcnR1YWxfZW52KG5hbWUsIGRlc3QsIHB5dGhvbik6CiAgICB2ZW52X25hbWUgPSAne30tZW52Jy5mb3JtYXQobmFtZSkucmVwbGFjZSgnXycsICctJykKICAgIHByaW50KCdDcmVhdGluZyB2aXJ0dWFsZW52OiB7MH0uLi4nLmZvcm1hdCh2ZW52X25hbWUpKQoKICAgIGNvbW1hbmQgPSBbJ2Jhc2gnLCAnLWMnLCAnLiB2aXJ0dWFsZW52d3JhcHBlci5zaDsgbWt2aXJ0dWFsZW52IC1wIHswfSAtYSB7MX0gezJ9OycuZm9ybWF0KHB5dGhvbiwgZGVzdCwgdmVudl9uYW1lKV0KCiAgICB0cnk6CiAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLCBlbnY9b3MuZW52aXJvbikud2FpdCgpCgogICAgICAgIGlmIHJlc3VsdCA+IDA6CiAgICAgICAgICAgIHN5cy5leGl0KDEpCgogICAgZXhjZXB0OgogICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0NvdWxkIG5vdCBjcmVhdGUgdGhlIHZpcnR1YWxlbnYhJykKICAgICAgICBzeXMuZXhpdCgxKQoKICAgIHJldHVybiB2ZW52X25hbWUKCgpkZWYgX2NhbGxfbWFrZV9lbnYodmVudl9uYW1lKToKICAgIGNvbW1hbmQgPSBbJ2Jhc2gnLCAnLWMnLCAnLiB2aXJ0dWFsZW52d3JhcHBlci5zaDsgd29ya29uIHt9OyBtYWtlIG1hcnZpbicuZm9ybWF0KHZlbnZfbmFtZSldCgogICAgdHJ5OgogICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgZW52PW9zLmVudmlyb24pLndhaXQoKQogICAgZXhjZXB0OgogICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0NvdWxkIG5vdCBjYWxsIG1ha2UgbWFydmluIScpCiAgICAgICAgc3lzLmV4aXQoMSkKCgpkZWYgX2NhbGxfZ2l0X2luaXQoZGVzdCk6CiAgICBjb21tYW5kID0gWydiYXNoJywgJy1jJywgJy91c3IvYmluL2dpdCBpbml0IHswfScuZm9ybWF0KGRlc3QpXQogICAgcHJpbnQoJ0luaXRpYWxpemluZyBnaXQgcmVwb3NpdG9yeS4uLicpCiAgICB0cnk6CiAgICAgICAgc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLCBlbnY9b3MuZW52aXJvbikud2FpdCgpCiAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICBwcmludCgnV0FSTklORzogQ291bGQgbm90IGluaXRpYWxpemUgcmVwb3NpdG9yeSEnKQoKCmRlZiBfbWFrZV9kYXRhX2xpbmsoZGVzdCk6CiAgICBkYXRhX3BhdGggPSBvcy5lbnZpcm9uWydNQVJWSU5fREFUQV9QQVRIJ10KICAgIGRhdGFfbGluayA9IG9zLnBhdGguam9pbihkZXN0LCAnbm90ZWJvb2tzL2RhdGEnKQogICAgb3Muc3ltbGluayhkYXRhX3BhdGgsIGRhdGFfbGluaykKCgpAY2xpLmNvbW1hbmQoJ2VuZ2luZS1odHRwc2VydmVyJywgaGVscD0nTWFydmluIGh0dHAgYXBpIHNlcnZlciBzdGFydHMnKQpAY2xpY2sub3B0aW9uKAogICAgJy0tYWN0aW9uJywKICAgICctYScsCiAgICBkZWZhdWx0PSdhbGwnLAogICAgdHlwZT1jbGljay5DaG9pY2UoWydhbGwnLCAnYWNxdWlzaXRvcicsICd0cHJlcGFyYXRvcicsICd0cmFpbmVyJywgJ2V2YWx1YXRvcicsICdwcHJlcGFyYXRvcicsICdwcmVkaWN0b3InLCAnZmVlZGJhY2snXSksCiAgICBoZWxwPSdNYXJ2aW4gZW5naW5lIGFjdGlvbiBuYW1lJykKQGNsaWNrLm9wdGlvbignLS1pbml0aWFsLWRhdGFzZXQnLCAnLWlkJywgaGVscD0nSW5pdGlhbCBkYXRhc2V0IGZpbGUgcGF0aCcsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSkpCkBjbGljay5vcHRpb24oJy0tZGF0YXNldCcsICctZCcsIGhlbHA9J0RhdGFzZXQgZmlsZSBwYXRoJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSkKQGNsaWNrLm9wdGlvbignLS1tb2RlbCcsICctbScsIGhlbHA9J0VuZ2luZSBtb2RlbCBmaWxlIHBhdGgnLCB0eXBlPWNsaWNrLlBhdGgoZXhpc3RzPVRydWUpKQpAY2xpY2sub3B0aW9uKCctLW1ldHJpY3MnLCAnLW1lJywgaGVscD0nRW5naW5lIE1ldHJpY3MgZmlsZSBwYXRoJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSkKQGNsaWNrLm9wdGlvbignLS1wcm90b2NvbCcsICctcHInLCBkZWZhdWx0PScnLCBoZWxwPSdNYXJ2aW4gcHJvdG9jb2wgdG8gYmUgbG9hZGVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4nKQpAY2xpY2sub3B0aW9uKCctLXBhcmFtcy1maWxlJywgJy1wZicsIGRlZmF1bHQ9J2VuZ2luZS5wYXJhbXMnLCBoZWxwPSdNYXJ2aW4gZW5naW5lIHBhcmFtcyBmaWxlIHBhdGgnLCB0eXBlPWNsaWNrLlBhdGgoZXhpc3RzPVRydWUpKQpAY2xpY2sub3B0aW9uKCctLXNwYXJrLWNvbmYnLCAnLWMnLCBlbnZ2YXI9J1NQQVJLX0NPTkZfRElSJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSwgaGVscD0nU3BhcmsgY29uZmlndXJhdGlvbiBmb2xkZXIgcGF0aCB0byBiZSB1c2VkIGluIHRoaXMgc2Vzc2lvbicpCkBjbGljay5vcHRpb24oJy0taHR0cC1ob3N0JywgJy1oJywgZGVmYXVsdD0nbG9jYWxob3N0JywgaGVscD0nRW5naW5lIGV4ZWN1dG9yIGh0dHAgYmluZCBob3N0JykKQGNsaWNrLm9wdGlvbignLS1odHRwLXBvcnQnLCAnLXAnLCBkZWZhdWx0PTgwMDAsIGhlbHA9J0VuZ2luZSBleGVjdXRvciBodHRwIHBvcnQnKQpAY2xpY2sub3B0aW9uKCctLWV4ZWN1dG9yLXBhdGgnLCAnLWUnLCBoZWxwPSdNYXJ2aW4gZW5naW5lIGV4ZWN1dG9yIGphciBwYXRoJywgdHlwZT1jbGljay5QYXRoKGV4aXN0cz1UcnVlKSkKQGNsaWNrLm9wdGlvbignLS1tYXgtd29ya2VycycsICctdycsIGRlZmF1bHQ9bXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpLCBoZWxwPSdNYXggbnVtYmVyIG9mIGdycGMgdGhyZWFkcyB3b3JrZXJzIHBlciBhY3Rpb24nKQpAY2xpY2sub3B0aW9uKCctLW1heC1ycGMtd29ya2VycycsICctcncnLCBkZWZhdWx0PW11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwgaGVscD0nTWF4IG51bWJlciBvZiBncnBjIHdvcmtlcnMgcGVyIGFjdGlvbicpCkBjbGljay5vcHRpb24oJy0tZXh0cmEtZXhlY3V0b3ItcGFyYW1ldGVycycsICctanZtJywgaGVscD0nVXNlIHRvIHNlbmQgZXh0cmEgSlZNIHBhcmFtZXRlcnMgdG8gZW5naW5lIGV4ZWN1dG9yIHByb2Nlc3MnKQpAY2xpY2sucGFzc19jb250ZXh0CmRlZiBlbmdpbmVfaHR0cHNlcnZlcl9jbGkoY3R4LCBhY3Rpb24sIHBhcmFtc19maWxlLCBpbml0aWFsX2RhdGFzZXQsIGRhdGFzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwsIG1ldHJpY3MsIHByb3RvY29sLCBzcGFya19jb25mLCBodHRwX2hvc3QsIGh0dHBfcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRvcl9wYXRoLCBtYXhfd29ya2VycywgbWF4X3JwY193b3JrZXJzLCBleHRyYV9leGVjdXRvcl9wYXJhbWV0ZXJzKToKICAgIGVuZ2luZV9odHRwc2VydmVyKAogICAgICAgIGN0eCwgYWN0aW9uLCBwYXJhbXNfZmlsZSwgaW5pdGlhbF9kYXRhc2V0LCBkYXRhc2V0LAogICAgICAgIG1vZGVsLCBtZXRyaWNzLCBwcm90b2NvbCwgc3BhcmtfY29uZiwgaHR0cF9ob3N0LCBodHRwX3BvcnQsCiAgICAgICAgZXhlY3V0b3JfcGF0aCwgbWF4X3dvcmtlcnMsIG1heF9ycGNfd29ya2VycywgZXh0cmFfZXhlY3V0b3JfcGFyYW1ldGVycwogICAgKQoKCmRlZiBlbmdpbmVfaHR0cHNlcnZlcihjdHgsIGFjdGlvbiwgcGFyYW1zX2ZpbGUsIGluaXRpYWxfZGF0YXNldCwgZGF0YXNldCwgbW9kZWwsIG1ldHJpY3MsIHByb3RvY29sLCBzcGFya19jb25mLCBodHRwX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICBodHRwX3BvcnQsIGV4ZWN1dG9yX3BhdGgsIG1heF93b3JrZXJzLCBtYXhfcnBjX3dvcmtlcnMsIGV4dHJhX2V4ZWN1dG9yX3BhcmFtZXRlcnMpOgogICAgbG9nZ2VyLmluZm8oIlN0YXJ0aW5nIGh0dHAgYW5kIGdycGMgc2VydmVycyAuLi4iKQoKICAgIGdycGNzZXJ2ZXIgPSBOb25lCiAgICBodHRwc2VydmVyID0gTm9uZQoKICAgIGRlZiBfcGFyYW1zKCoqa3dhcmdzKToKICAgICAgICBwYXJhbXMgPSBbXQogICAgICAgIGlmIGt3YXJncyBpcyBub3QgTm9uZToKICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlcml0ZW1zKGt3YXJncyk6CiAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCItezB9Ii5mb3JtYXQoc3RyKGtleSkpKQogICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoc3RyKHZhbHVlKSkKICAgICAgICByZXR1cm4gcGFyYW1zCgogICAgdHJ5OgogICAgICAgIG9wdGlvbmFsX2FyZ3MgPSBfcGFyYW1zKGlkPWluaXRpYWxfZGF0YXNldCwgZD1kYXRhc2V0LCBtPW1vZGVsLCBtZT1tZXRyaWNzLCBwZj1wYXJhbXNfZmlsZSwgYz1zcGFya19jb25mKQogICAgICAgIGdycGNzZXJ2ZXIgPSBzdWJwcm9jZXNzLlBvcGVuKFsnbWFydmluJywgJ2VuZ2luZS1ncnBjc2VydmVyJywgJy1hJywgYWN0aW9uLCAnLXcnLCBzdHIobWF4X3dvcmtlcnMpLCAnLXJ3Jywgc3RyKG1heF9ycGNfd29ya2VycyldICsgb3B0aW9uYWxfYXJncykKCiAgICAgICAgdGltZS5zbGVlcCgzKQoKICAgIGV4Y2VwdDoKICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCJDb3VsZCBub3Qgc3RhcnQgZ3JwYyBzZXJ2ZXIhIikKICAgICAgICBzeXMuZXhpdCgxKQoKICAgIHRyeToKICAgICAgICBpZiBub3QgKGV4ZWN1dG9yX3BhdGggYW5kIG9zLnBhdGguZXhpc3RzKGV4ZWN1dG9yX3BhdGgpKToKICAgICAgICAgICAgZXhlY3V0b3JfdXJsID0gQ29uZmlnLmdldCgiZXhlY3V0b3JfdXJsIiwgc2VjdGlvbj0ibWFydmluIikKICAgICAgICAgICAgZXhlY3V0b3JfcGF0aCA9IE1hcnZpbkRhdGEuZG93bmxvYWRfZmlsZShleGVjdXRvcl91cmwsIGZvcmNlPUZhbHNlKQoKICAgICAgICBjb21tYW5kX2xpc3QgPSBbJ2phdmEnXQogICAgICAgIGNvbW1hbmRfbGlzdC5hcHBlbmQoJy1EbWFydmluQ29uZmlnLmVuZ2luZUhvbWU9e30nLmZvcm1hdChjdHgub2JqWydjb25maWcnXVsnaW5pZGlyJ10pKQogICAgICAgIGNvbW1hbmRfbGlzdC5hcHBlbmQoJy1EbWFydmluQ29uZmlnLmlwQWRkcmVzcz17fScuZm9ybWF0KGh0dHBfaG9zdCkpCiAgICAgICAgY29tbWFuZF9saXN0LmFwcGVuZCgnLURtYXJ2aW5Db25maWcucG9ydD17fScuZm9ybWF0KGh0dHBfcG9ydCkpCiAgICAgICAgY29tbWFuZF9saXN0LmFwcGVuZCgnLURtYXJ2aW5Db25maWcucHJvdG9jb2w9e30nLmZvcm1hdChwcm90b2NvbCkpCgogICAgICAgIGlmIGV4dHJhX2V4ZWN1dG9yX3BhcmFtZXRlcnM6CiAgICAgICAgICAgIGNvbW1hbmRfbGlzdC5hcHBlbmQoZXh0cmFfZXhlY3V0b3JfcGFyYW1ldGVycykKCiAgICAgICAgY29tbWFuZF9saXN0LmFwcGVuZCgnLWphcicpCiAgICAgICAgY29tbWFuZF9saXN0LmFwcGVuZChleGVjdXRvcl9wYXRoKQoKICAgICAgICBodHRwc2VydmVyID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kX2xpc3QpCgogICAgZXhjZXB0OgogICAgICAgIGxvZ2dlci5leGNlcHRpb24oIkNvdWxkIG5vdCBzdGFydCBodHRwIHNlcnZlciEiKQogICAgICAgIGdycGNzZXJ2ZXIudGVybWluYXRlKCkgaWYgZ3JwY3NlcnZlciBlbHNlIE5vbmUKICAgICAgICBzeXMuZXhpdCgxKQoKICAgIHRyeToKICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICB0aW1lLnNsZWVwKDEwMCkKCiAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgbG9nZ2VyLmluZm8oIlRlcm1pbmF0aW5nIGh0dHAgYW5kIGdycGMgc2VydmVycy4uLiIpCiAgICAgICAgZ3JwY3NlcnZlci50ZXJtaW5hdGUoKSBpZiBncnBjc2VydmVyIGVsc2UgTm9uZQogICAgICAgIGh0dHBzZXJ2ZXIudGVybWluYXRlKCkgaWYgaHR0cHNlcnZlciBlbHNlIE5vbmUKICAgICAgICBsb2dnZXIuaW5mbygiSHR0cCBhbmQgZ3JwYyBzZXJ2ZXJzIHRlcm1pbmF0ZWQhIikKICAgICAgICBzeXMuZXhpdCgwKQoKCkBjbGkuY29tbWFuZCgnZW5naW5lLWRlcGxveScsIGhlbHA9J0VuZ2luZSBwcm92aXNpb25pbmcgYW5kIGRlcGxveW1lbnQgY29tbWFuZCcpCkBjbGljay5vcHRpb24oJy0tcHJvdmlzaW9uJywgaXNfZmxhZz1UcnVlLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdGb3JjZXMgcHJvdmlzaW9uaW5nJykKQGNsaWNrLm9wdGlvbignLS1wYWNrYWdlJywgaXNfZmxhZz1UcnVlLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdDcmVhdGVzIGVuZ2luZSBwYWNrYWdlJykKQGNsaWNrLm9wdGlvbignLS1za2lwLWNsZWFuJywgaXNfZmxhZz1UcnVlLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSdTa2lwcyBtYWtlIGNsZWFuJykKZGVmIGVuZ2luZV9kZXBsb3kocHJvdmlzaW9uLCBwYWNrYWdlLCBza2lwX2NsZWFuKToKCiAgICBUT09MQk9YX1ZFUlNJT04gPSBvcy5nZXRlbnYoJ1RPT0xCT1hfVkVSU0lPTicpCgogICAgaWYgcHJvdmlzaW9uOgogICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWwogICAgICAgICAgICAiZmFiIiwKICAgICAgICAgICAgInByb3Zpc2lvbiIsCiAgICAgICAgXSwgZW52PW9zLmVudmlyb24pLndhaXQoKQogICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWwogICAgICAgICAgICAiZmFiIiwKICAgICAgICAgICAgImRlcGxveTp2ZXJzaW9uPXt2ZXJzaW9ufSIuZm9ybWF0KHZlcnNpb249VE9PTEJPWF9WRVJTSU9OKSwKICAgICAgICBdLCBlbnY9b3MuZW52aXJvbikud2FpdCgpCiAgICBlbGlmIHBhY2thZ2U6CiAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbCiAgICAgICAgICAgICJmYWIiLAogICAgICAgICAgICAicGFja2FnZTp2ZXJzaW9uPXt2ZXJzaW9ufSIuZm9ybWF0KHZlcnNpb249VE9PTEJPWF9WRVJTSU9OKSwKICAgICAgICBdLCBlbnY9b3MuZW52aXJvbikud2FpdCgpCiAgICBlbGlmIHNraXBfY2xlYW46CiAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbCiAgICAgICAgICAgICJmYWIiLAogICAgICAgICAgICAiZGVwbG95OnZlcnNpb249e3ZlcnNpb259LHNraXBfY2xlYW49VHJ1ZSIuZm9ybWF0KHZlcnNpb249VE9PTEJPWF9WRVJTSU9OKSwKICAgICAgICBdLCBlbnY9b3MuZW52aXJvbikud2FpdCgpCiAgICBlbHNlOgogICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWwogICAgICAgICAgICAiZmFiIiwKICAgICAgICAgICAgImRlcGxveTp2ZXJzaW9uPXt2ZXJzaW9ufSIuZm9ybWF0KHZlcnNpb249VE9PTEJPWF9WRVJTSU9OKSwKICAgICAgICBdLCBlbnY9b3MuZW52aXJvbikud2FpdCgpCgoKQGNsaS5jb21tYW5kKCdlbmdpbmUtaHR0cHNlcnZlci1yZW1vdGUnLCBoZWxwPSdSZW1vdGUgSFRUUCBzZXJ2ZXIgY29udHJvbCBjb21tYW5kJykKQGNsaWNrLm9wdGlvbignLS1odHRwX2hvc3QnLCAnLWgnLCBkZWZhdWx0PScwLjAuMC4wJywgaGVscD0nRW5naW5lIGV4ZWN1dG9yIGh0dHAgYmluZCBob3N0JykKQGNsaWNrLm9wdGlvbignLS1odHRwX3BvcnQnLCAnLXAnLCBkZWZhdWx0PTgwMDAsIGhlbHA9J0VuZ2luZSBleGVjdXRvciBodHRwIHBvcnQnKQpAY2xpY2suYXJndW1lbnQoJ2NvbW1hbmQnLCB0eXBlPWNsaWNrLkNob2ljZShbJ3N0YXJ0JywgJ3N0b3AnLCAnc3RhdHVzJ10pKQpkZWYgZW5naW5lX2h0dHBzZXJ2ZXJfcmVtb3RlKGNvbW1hbmQsIGh0dHBfaG9zdCwgaHR0cF9wb3J0KToKICAgIGlmIGNvbW1hbmQgPT0gInN0YXJ0IjoKICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsKICAgICAgICAgICAgImZhYiIsCiAgICAgICAgICAgICJlbmdpbmVfc3RhcnQ6e2hvc3R9LHtwb3J0fSIuZm9ybWF0KGhvc3Q9aHR0cF9ob3N0LCBwb3J0PWh0dHBfcG9ydCkKICAgICAgICBdLCBlbnY9b3MuZW52aXJvbikud2FpdCgpCiAgICBlbGlmIGNvbW1hbmQgPT0gInN0b3AiOgogICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oWwogICAgICAgICAgICAiZmFiIiwKICAgICAgICAgICAgImVuZ2luZV9zdG9wIiwKICAgICAgICBdLCBlbnY9b3MuZW52aXJvbikud2FpdCgpCiAgICBlbGlmIGNvbW1hbmQgPT0gInN0YXR1cyI6CiAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbCiAgICAgICAgICAgICJmYWIiLAogICAgICAgICAgICAiZW5naW5lX3N0YXR1cyIsCiAgICAgICAgXSwgZW52PW9zLmVudmlyb24pLndhaXQoKQogICAgZWxzZToKICAgICAgICBwcmludCgiVXNhZ2U6IG1hcnZpbiBlbmdpbmUtaHR0cHNlcnZlci1yZW1vdGUgWyBzdGFydCB8IHN0b3AgfCBzdGF0dXMgXSIpCgAAAAAAAAAAAAAA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ZS1nZW5lcmF0ZWNvbmZ0BAAAAGhlbHBzIwAAAEdlbmVyYXRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlYwEAAAABAAAAAgAAAEMAAQBzDgAAAHQAAHwAAIMBAAFkAABTKAEAAABOKAEAAAB0EQAAAGhpdmVfZ2VuZXJhdGVjb25mKAEAAAB0AwAAAGN0eCgAAAAAKAAAAABzQwAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L2hpdmUucHl0FQAAAGhpdmVfZ2VuZXJhdGVjb25mX2NsaSsAAABzAgAAAAADYwEAAAADAAAACQAAAEMAAQBzbwAAAGkGAGQBAGQCADZkAwBkBAA2ZAUAZAYANmQHAGQIADZkCQBkCgA2ZAsAZAwANmcBAH0BAHQAAGQNAGQOAIMCAI8dAH0CAHQBAGoCAHwBAHwCAGQPAGQQAIMCAQFXZAAAUVh0AwBkEQCDAQABZAAAUygSAAAATnQNAAAAeHh4X2hvc3RfbmFtZXQLAAAAb3JpZ2luX2hvc3R0CwAAAHh4eF9kYl9uYW1ldAkAAABvcmlnaW5fZGJ0BgAAAG1hcnZpbnQMAAAAb3JpZ2luX3F1ZXVldA4AAAB4eHhfdGFibGVfbmFtZXQRAAAAdGFyZ2V0X3RhYmxlX25hbWVzEQAAAFNFTEVDVCAqIEZST00gWFhYdAoAAABzYW1wbGVfc3FsdAEAAAAxdAYAAABzcWxfaWRzFAAAAGhpdmVfZGF0YWltcG9ydC5jb25mdAEAAAB3dAYAAABpbmRlbnRpAgAAAHMHAAAARG9uZSEhISgEAAAAdAQAAABvcGVudAQAAABqc29udAQAAABkdW1wdAUAAABwcmludCgDAAAAUgoAAAB0DAAAAGRlZmF1bHRfY29uZnQHAAAAb3V0ZmlsZSgAAAAAKAAAAABzQwAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L2hpdmUucHlSCQAAADEAAABzFAAAAAABAwEHAQcBBwEHAQcBDQMSARwCcxAAAABoaXZlLXJlc2V0cmVtb3RlczMAAABEcm9wIGFsbCByZW1vdGUgdGFibGVzIGZyb20gaW5mb3JtZWQgZW5naW5lIG9uIGhvc3RzBgAAAC0taG9zdHMCAAAALWh0BwAAAGRlZmF1bHRzDQAAAG1hcnZpbi1oYWRvb3BzBwAAAC0tcXVldWVzCAAAAC0tZW5naW5ldAEAAAAucwIAAAAuLnMyAAAATWFydmluIGVuZ2luZSBuYW1lIChkZWZhdWx0IGlzIHRoZSBjdXJyZW50IGZvbGRlciljBAAAAAQAAAAFAAAAQwABAHMXAAAAdAAAfAAAfAEAfAIAfAMAgwQAAWQAAFMoAQAAAE4oAQAAAHQQAAAAaGl2ZV9yZXNldHJlbW90ZSgEAAAAUgoAAAB0BAAAAGhvc3R0BgAAAGVuZ2luZXQFAAAAcXVldWUoAAAAACgAAAAAc0MAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9oaXZlLnB5dBQAAABoaXZlX3Jlc2V0cmVtb3RlX2NsaUEAAABzAgAAAAAGYwQAAAAFAAAAGwAAAEMAAQBzZQAAAHQAAGQBAHwCAGQCAHwBAGQDAHwDAGQEAGQAAGQFAGQAAGQGAGQAAGQHAGQAAGQIAGQAAGQJAGQAAGQKAGQLAGQMAGQLAGQNAGQOAGQPAGQAAIMADX0EAHwEAGoCAIMAAAFkAABTKBAAAABOUiMAAABSDQAAAFIRAAAAUg8AAABSEwAAAFIUAAAAdA4AAABtYXhfcXVlcnlfc2l6ZXQQAAAAZGVzdGluYXRpb25faG9zdHQQAAAAZGVzdGluYXRpb25fcG9ydHQZAAAAZGVzdGluYXRpb25faG9zdF91c2VybmFtZXQHAAAAdmFncmFudHQZAAAAZGVzdGluYXRpb25faG9zdF9wYXNzd29yZHQaAAAAZGVzdGluYXRpb25faGRmc19yb290X3BhdGhzFQAAAC91c2VyL2hpdmUvd2FyZWhvdXNlL1IWAAAAKAMAAAB0EAAAAEhpdmVEYXRhSW1wb3J0ZXJ0BAAAAE5vbmV0EwAAAHJlc2V0X3JlbW90ZV90YWJsZXMoBQAAAFIKAAAAUiIAAABSIwAAAFIkAAAAdAMAAABoZGkoAAAAACgAAAAAc0MAAAAvb3B0L21hcnZpbi9weXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC9oaXZlLnB5UiEAAABKAAAAcx4AAAAAAQYBBgEGAQYBBgEGAQYBBgEGAQYBBgEGAQYBCQJzDwAAAGhpdmUtZGF0YWltcG9ydHODAAAARXhwb3J0IGFuZCBpbXBvcnQgZGF0YSBzYW1wbGVzIGZyb20gYSBoaXZlIGRhdGFic2UgdG8gdGhlIGhpdmUgcnVubmluZyBpbiB0aGlzIHRvb2xib3gsIGNsb25pbmcgc2FtZSBkYXRhIHN0cnVjdHVyZSAoZGIgYW5kIHRhYmxlKS5zHAAAAC0tZGVzdGluYXRpb24taGRmcy1yb290LXBhdGhzBQAAAC1oZGZzcxUAAAAvdXNlci9oaXZlL3dhcmVob3VzZS9zGwAAAC0tZGVzdGluYXRpb24taG9zdC1wYXNzd29yZHMCAAAALXBSKgAAAHMbAAAALS1kZXN0aW5hdGlvbi1ob3N0LXVzZXJuYW1lcwIAAAAtdXMSAAAALS1kZXN0aW5hdGlvbi1ob3N0cwMAAAAtZGhzEgAAAC0tZGVzdGluYXRpb24tcG9ydHMDAAAALWRwaRYAAABzEAAAAC0tbWF4LXF1ZXJ5LXNpemVzAgAAAC1zaTIAAABpAAQAAHMXAAAATWF4IHF1ZXJ5IHNpemUgaW4gYnl0ZXNzBwAAAC0tZm9yY2V0BwAAAGlzX2ZsYWdzPQAAAEZvcmNlIHRhYmxlIGNyZWF0aW9uIGV2ZW4gdGFibGUgYWxyZWFkeSBleGlzdHMgaW4gZGVzdGluYXRpb25zDgAAAC0tZm9yY2UtcmVtb3Rlc0QAAABGb3JjZSByZW1vdGUgdGVtcCB0YWJsZSBjcmVhdGlvbiBldmVuIHRhYmxlIGFscmVhZHkgZXhpc3RzIGluIG9yaWdpbnMKAAAALS12YWxpZGF0ZXMZAAAAVmFsaWRhdGUgdGhlIHF1ZXJ5IHNhbXBsZXMSAAAALS1mb3JjZS1jb3B5LWZpbGVzcyMAAABGb3JjZSB0aGUgaGRmcyBmaWxlcyBjb3B5IHByb2NlZHVyZXMZAAAALS1za2lwLXJlbW90ZS1wcmVwYXJhdGlvbnMmAAAAU2tpcCB0aGUgY3JlYXRpb24gb2YgcmVtb3RlIHRlbXAgdGFibGVzCAAAAC0tc3FsLWlkcwIAAAAtcXNIAAAA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AABqEQCDAgCDAQABfAAAaiQAZA8AfAsAZDgAfAAAaiIAZBsAfAAAahUAgwADAXwAAGoEAIMAAAF0AwBkOgCDAQABZAAAUyg7AAAATlJ6AAAAcxAAAABRdWVyeSBWYWxpZGF0aW9uUnsAAABpAQAAAFJ8AAAAaQYAAABzIwAAAEluZm9ybWVkIHNhbXBsZSBxdWVyeSBpcyBub3QgdmFsaWQhcxgAAABUYWJsZSBTY2hlbWEgQWNoaWV2ZW1lbnRpAgAAAHMlAAAAQ29ubmVjdGluZyB3aXRoIHt9IGRhdGFiYXNlIG9uIHt9IC4uIFIiAAAAUjsAAABSJAAAAHMaAAAAR2V0dGluZyBEREwgZnJvbSB7fSB0YWJsZSBSZQAAAHQRAAAAb3JpZ2luX3RhYmxlX25hbWV0DwAAAGRlc3RfdGFibGVfbmFtZXQEAAAAY29sc3NsAAAASW5mb3JtZWQgc2FtcGxlIHF1ZXJ5IGRvZXNuJ3QgaGF2ZSB2YWxpZCBwYXJ0aXRpb25zIGluIHRoZSBjbGF1c3VsZSB3aGVyZSEhISEgSW5mb3JtZSBhdCBsZXN0IG9uZSBwYXJ0aXRpb24uczsAAABUbyBkaXNhYmxlIHRoZSBxdWVyeSB2YWxpZGF0aW9uIHVzZSAtLXNraXAtdmFsaWRhdGlvbiBmbGFnLnMqAAAAQ29ubmVjdGluZyB3aXRoIERFRkFVTFQgZGF0YWJhc2Ugb24ge30gLi4gcxgAAABDcmVhdGluZyBkYXRhYmFzZSB7fSAuLi5zGAAAAFJlbW90ZSBUYWJsZSBQcmVwYXJhdGlvbmkDAAAAUjwAAABzGwAAAERyb3BwaW5nIHRhYmxlIHt9IG9uIHt9IC4uIFJ9AAAAcxsAAABDcmVhdGluZyB0YWJsZSB7fSBvbiB7fSAuLiB0AwAAAGRkbHM2AAAAUG9wdWxhdGluZyB0YWJsZSB7fSBvbiB7fSB1c2luZyBpbmZvcm1lZCBzYW1wbGUgc3FsLi4gdAoAAABwYXJ0aXRpb25zUmYAAABzIQAAAFRhYmxlIHt9IG9uIHt9IGFscmVhZHkgZXhpc3RzIC4uLnMSAAAAQ29weWluZyBIREZTIEZpbGVzaQQAAABzLQAAAEdldHRpbmcgaGRmcyBmaWxlcyBsb2NhdGlvbiBmcm9tIHt9IHRhYmxlIC4uLnQJAAAAcm9vdF9wYXRodAcAAABkYl9uYW1lcx8AAABDb3B5aW5nIGZpbGVzIGZyb20gW3t9XSB0byBbe31dUjcAAAB0CQAAAGhkZnNfaG9zdHQJAAAAaGRmc19wb3J0dAYAAABvcmlnaW50BAAAAGRlc3R0CAAAAHBhc3N3b3JkdAgAAAB1c2VybmFtZXMeAAAATG9jYWwgVGVtcG9yYXJ5IFRhYmxlIENyZWF0aW9uaQUAAABzIAAAAERyb3BwaW5nIHRlbXAgdGFibGUge30gb24ge30gLi4gcz4AAABDcmVhdGluZyB0ZW1wIHRhYmxlIHt9IHVzaW5nIGltcG9ydGVkIGhkZnMgZmlsZXMgZnJvbSBbe31dIC4uLnQPAAAAdGVtcF90YWJsZV9uYW1ldBUAAABwYXJxdWV0X2ZpbGVfbG9jYXRpb25zJwAAAFJlZnJlc2hpbmcgdGFibGUge30gcGFydGl0aW9ucyBvbiB7fSAuLnMQAAAAVGFibGUgcG9wdWxhdGlvbnMgAAAARHJvcHBpbmcgdGFibGUgdmlldyB7fSBvbiB7fSAuLiB0CQAAAHZpZXdfbmFtZXMbAAAAQ3JlYXRpbmcgdGFibGUgdmlldyB7fSAuLi4gcxIAAABQcm9jZWR1cmUgZG9uZSEhISEoJQAAAFJ+AAAAUm8AAABSdQAAAFIcAAAAUoQAAABSRwAAAFIPAAAAUg0AAABSaAAAAFIRAAAAUmEAAABSEwAAAHQTAAAAZ2V0X2NyZWF0ZXRhYmxlX2RkbFKYAAAAdA4AAABnZXRfcGFydGl0aW9uc3QOAAAAaGFzX3BhcnRpdGlvbnNSFAAAAFInAAAAdA8AAABjcmVhdGVfZGF0YWJhc2VSRAAAAFJFAAAAdBQAAABmdWxsX3RlbXBfdGFibGVfbmFtZVKAAAAAdAwAAABjcmVhdGVfdGFibGV0DgAAAHBvcHVsYXRlX3RhYmxldBIAAABnZXRfdGFibGVfbG9jYXRpb25SgQAAAFIsAAAAdA4AAABoZGZzX2Rpc3RfY29weVIoAAAAUisAAABSKQAAAHQVAAAAY3JlYXRlX2V4dGVybmFsX3RhYmxldBIAAAByZWZyZXNoX3BhcnRpdGlvbnNSSAAAAHQJAAAAZHJvcF92aWV3dAsAAABjcmVhdGVfdmlldygQAAAA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ICAgIAogfCAgXC8gIHwgICAgL1wgICAgfCAgX18gXFwgXCAgICAvIC98XyAgIF98fCBcIHwgfAogfCBcICAvIHwgICAvICBcICAgfCB8X18pIHxcIFwgIC8gLyAgIHwgfCAgfCAgXHwgfCAKIHwgfFwvfCB8ICAvIC9cIFwgIHwgIF8gIC8gIFwgXC8gLyAgICB8IHwgIHwgLiBgIHwgCiB8IHwgIHwgfCAvIF9fX18gXCB8IHwgXCBcICAgXCAgLyAgICBffCB8XyB8IHxcICB8IAogfF98ICB8X3wvXy8gICAgXF9cfF98ICBcX1wgICBcLyAgICB8X19fX198fF98IFxffCAKICAgICAgICAgICAgXyAgICBfICAgICAgICAgICAgIF8gICAgICAgICAgICAgICAgIF8gIF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgIHwgfCAgfCB8ICAgICAgICAgICB8IHwgICAgICAgICAgICAgICB8IHx8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgfCB8XyB8IHxfXyAgICBfX18gIHwgfF8gIF9fXyAgICBfX18gIHwgfHwgfF9fICAgIF9fXyBfXyAgX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICB8IF9ffHwgJ18gXCAgLyBfIFwgfCBfX3wvIF8gXCAgLyBfIFwgfCB8fCAnXyBcICAvIF8gXCBcLyAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgXyAgXyAgXyAgfCB8XyB8IHwgfCB8fCAgX18vIHwgfF98IChfKSB8fCAoXykgfHwgfHwgfF8pIHx8IChfKSB8PiAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIChfKShfKShfKSAgXF9ffHxffCB8X3wgXF9fX3wgIFxfX3xcX19fLyAgXF9fXy8gfF98fF8uX18vICBcX19fLy9fL1xfXCB2JSh2ZXJzaW9uKXMKYwUAAAARAAAACAAAAAMAAQBz+AIAAHQAAGoBAGoCAHQAAGoBAGoDAIgDAGQBAIMCAIMBAIkAAHwDAGQAAGsIAHJCAHQFAGoGAIgEAGcAAIMCAH0DAG4AAHQAAGoBAGoDAIgAAGQCAIMCAH0FAIgEAGQDAGsCAHKDAHQAAGoBAGoHAHwFAIMBAAxygwB8AwB0CAAXfQMAbgAAiAEAZAAAawgAcvEAZAQAfQYAiAAAfQcAdAAAagEAagMAfAcAfAYAgwIAfQgAaQIAfAcAZAUANmQGAGQHADZ9CQB0AABqAQBqBwB8CACDAQBy6AB0CQB8CAB8CQCDAgCJAQBx8QBpAACJAQBuAACIAQBqBgBkCABkCQBqAwB8AwCDAQCDAgB9AwB0CgB8AwB0CwCDAgByLQF8AwBqDABkCQCDAQB9AwBuAAB0DQBqDgBkCgCDAQB0DQBqDwBkCwBkDAB0EABkDQBkDgCDAQJ0DQBqEQCHAACHAQCHAgCHAwCHBABmBQBkDwCGAACDAQCDAQCDAQB9CgBpAAB9CwB8CwBqEgB0EwBqFACDAQABfAsAahIAdBUAahQAgwEAAXwLAGoSAHQWAGoUAIMBAAF8CwBqEgB0FwBqFACDAQABfAsAahIAdBgAahQAgwEAAXg8AHwLAGoZAIMAAERdLgBcAgB9DAB9DQB8DAB8AwBrBwBy3gF8CgBqGgB8DQBkEAB8DACDAQEBcd4Bcd4BV4gBAGoGAGQRAIMBAHQAAGoBAGoDAIgAAGQSAIMCAHQAAGoBAGoDAIgAAGQTAIMCAGcDAH0OAHhUAHwOAERdTAB9DwB8DwByTQJ0AABqAQBqBwB8DwCDAQByTQJ0GwB8DwCDAQB9CwB4GwB8CwBEXRMAfQ0AfAoAahoAfA0AgwEAAXF+AldQcU0CcU0CV2QUAGQVAGwcAG0dAH0QAAF0DQBqHgBkFgB8EABkFwB0HwBqIABkGABkGQCDAgCDAAJ8CgCDAQB9CgBkGgBqIQB0HwBpAQB8EABkFgA2FoMBAHwKAF8iAHwKAFMoGwAAAE5zAgAAAC4ucwQAAAAuZGV2UgsAAABzCgAAAG1hcnZpbi5pbml0BgAAAGluaWRpcnMZAAAAe2luaWRpcn0ve21hcnZpbl9wYWNrYWdlfXQRAAAAbWFydmluX3BhY2thZ2VkaXJ0DgAAAG1hcnZpbl9leGNsdWRldAEAAAAsdAYAAABjdXN0b21zBwAAAC0tZGVidWd0BwAAAGlzX2ZsYWd0BAAAAGhlbHBzEgAAAEVuYWJsZSBkZWJ1ZyBtb2RlLmMCAAAAAgAAAAMAAAATAAEAczcAAABpBgB8AQBkAQA2iAIAZAIANogDAGQDADaIAABkBAA2iAQAZAUANogBAGQGADZ8AABfAABkAABTKAcAAABOdAUAAABkZWJ1Z3QMAAAAcGFja2FnZV9uYW1ldAwAAABwYWNrYWdlX3BhdGh0CQAAAGJhc2VfcGF0aHQEAAAAdHlwZXQGAAAAY29uZmlnKAEAAAB0AwAAAG9iaigCAAAAdAMAAABjdHhSEwAAACgFAAAAUhYAAABSGAAAAFIUAAAAUhUAAAB0BQAAAHR5cGVfKAAAAABzRwAAAC9vcHQvbWFydmluL3B5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L19faW5pdF9fLnB5UgMAAABgAAAAcw4AAAAABAMBBwEHAQcBBwEHAXQEAAAAbmFtZXQTAAAAbWFydmluX2NvbW1hbmRzZmlsZXMSAAAAbWFydmluX2NvbW1hbmRzLnB5cwsAAABjb21tYW5kcy5weWkCAAAAKAEAAAB0CwAAAF9fdmVyc2lvbl9fdAcAAAB2ZXJzaW9udAcAAABtZXNzYWdlcwEAAAAKcwMAAAAKICBzBAAAAAh7fQooIwAAAHQCAAAAb3N0BAAAAHBhdGh0BwAAAGFic3BhdGh0BAAAAGpvaW50BAAAAE5vbmV0DwAAAEVYQ0xVREVfQllfVFlQRXQDAAAAZ2V0dAYAAABleGlzdHN0DAAAAFBST0RfRVhDTFVERVIEAAAAdAoAAABpc2luc3RhbmNldAMAAABzdHJ0BQAAAHNwbGl0dAUAAABjbGlja3QFAAAAZ3JvdXB0BgAAAG9wdGlvbnQEAAAAVHJ1ZXQMAAAAcGFzc19jb250ZXh0dAYAAAB1cGRhdGV0BwAAAGNsaV9wa2d0CAAAAGNvbW1hbmRzdAgAAABjbGlfdGVzdHQMAAAAY2xpX25vdGVib29rdAoAAABjbGlfZW5naW5ldAgAAABjbGlfaGl2ZXQFAAAAaXRlbXN0CwAAAGFk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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIyBDb3B5cmlnaHQgWzIwMTddIFtCMlcgRGlnaXRhbF0KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoKaW1wb3J0IG9zCmltcG9ydCBwaXAKZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCmltcG9ydCBzeXMKaW1wb3J0IHN1YnByb2Nlc3MKaW1wb3J0IGNsaWNrCmltcG9ydCByZQppbXBvcnQgb3MucGF0aAppbXBvcnQgZXJybm8KaW1wb3J0IHNodXRpbApmcm9tIC4uX2NvbXBhdGliaWxpdHkgaW1wb3J0IHVybHBhcnNlCmltcG9ydCBtdWx0aXByb2Nlc3NpbmcKCl9fYWxsX18gPSBbJ2NvcHknXQoKCkBjbGljay5ncm91cCgncGtnJykKZGVmIGNsaSgpOgogICAgcGFzcwoKCkBjbGkuY29tbWFuZCgncGtnLXNob3d2ZXJzaW9uJywgaGVscD0nU2hvdyB0aGUgcGFja2FnZSB2ZXJzaW9uLicpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIHZlcnNpb24oY3R4KToKICAgIHByaW50KGdldF92ZXJzaW9uKGN0eC5vYmpbJ3BhY2thZ2VfcGF0aCddKSkKCgpAY2xpLmNvbW1hbmQoJ3BrZy1zaG93Y2hhbmdlcycsIGhlbHA9J1Nob3cgdGhlIHBhY2thZ2UgY2hhbmdlbG9nLicpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIGxvZyhjdHgpOgogICAgb3Muc3lzdGVtKCdsZXNzIHt9Jy5mb3JtYXQob3MucGF0aC5qb2luKGN0eC5vYmpbJ2Jhc2VfcGF0aCddLCAnQ0hBTkdFUy5tZCcpKSkKCgpAY2xpLmNvbW1hbmQoJ3BrZy1zaG93aW5mbycsIGhlbHA9J1Nob3cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2thZ2UuJykKQGNsaWNrLnBhc3NfY29udGV4dApkZWYgaW5mbyhjdHgpOgogICAgdmVyc2lvbiA9IGdldF92ZXJzaW9uKGN0eC5vYmpbJ3BhY2thZ2VfcGF0aCddKQogICAgcmVwbyA9IGdldF9naXRfcmVwb3NpdG9yeV91cmwoY3R4Lm9ialsnYmFzZV9wYXRoJ10pCiAgICBicmFuY2ggPSBnZXRfZ2l0X2JyYW5jaChjdHgub2JqWydiYXNlX3BhdGgnXSkKICAgIGNvbW1pdCA9IGdldF9naXRfY29tbWl0KGN0eC5vYmpbJ2Jhc2VfcGF0aCddKQogICAgdGFnID0gZ2V0X2dpdF90YWcoY3R4Lm9ialsnYmFzZV9wYXRoJ10pCiAgICB0YWdfY29tbWl0ID0gZ2V0X2dpdF9jb21taXQoY3R4Lm9ialsnYmFzZV9wYXRoJ10sIHRhZz10YWcpCiAgICAjIHRhZ3MgPSB1dGlscy5nZXRfZ2l0X3RhZ3MoY3R4Lm9ialsnYmFzZV9wYXRoJ10pCiAgICB0YWdnZWQgPSAneWVzJyBpZiAodGFnWzE6XSA9PSB2ZXJzaW9uKSBlbHNlICdubycKICAgIGNsZWFuID0gaXNfZ2l0X2NsZWFuKGN0eC5vYmpbJ2Jhc2VfcGF0aCddKQogICAgc3RhdHVzID0gJ2NsZWFuJyBpZiBjbGVhbiBlbHNlICdkaXJ0eScKICAgIHVwZGF0ZWQgPSAoJycgaWYgKGNvbW1pdCA9PSB0YWdfY29tbWl0IGFuZCBjbGVhbikgZWxzZQogICAgICAgICAgICAgICAnKGRldiknIGlmIChub3QgdGFnWzE6XSA9PSB2ZXJzaW9uKSBlbHNlCiAgICAgICAgICAgICAgICcoc2hvdWxkIGJlIGJ1bXBlZCknKQogICAgcGlwID0gJ2dpdCtzc2g6Ly97cmVwb31Ae3RhZ30jZWdnPXtwa2d9Jy5mb3JtYXQoCiAgICAgICAgcmVwbz1yZXBvWzotNF0ucmVwbGFjZSgnOicsICcvJyksIHRhZz10YWcsCiAgICAgICAgcGtnPWN0eC5vYmpbJ3BhY2thZ2VfbmFtZSddKQoKICAgIHByaW50KCcnKQogICAgcHJpbnQoJ3BhY2thZ2U6IHtuYW1lfScuZm9ybWF0KG5hbWU9Y3R4Lm9ialsncGFja2FnZV9uYW1lJ10pKQogICAgcHJpbnQoJ3R5cGU6ICAgIHt0eXBlX30nLmZvcm1hdCh0eXBlXz0oY3R4Lm9ialsndHlwZSddIG9yICd1bmtub3duJykpKQogICAgcHJpbnQoJ3ZlcnNpb246IHt2ZXJzaW9ufSB7dXBkYXRlZH0nLmZvcm1hdCh2ZXJzaW9uPXZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ9dXBkYXRlZCkpCiAgICBwcmludCgnJykKICAgIHByaW50KCdicmFuY2g6ICB7YnJhbmNofScuZm9ybWF0KGJyYW5jaD1icmFuY2gpKQogICAgcHJpbnQoJ3N0YXR1czogIHtzdGF0dXN9Jy5mb3JtYXQoc3RhdHVzPXN0YXR1cykpCiAgICBwcmludCgnY29tbWl0OiAge2NvbW1pdH0nLmZvcm1hdChjb21taXQ9Y29tbWl0KSkKICAgIHByaW50KCdyZXBvOiAgICB7cmVwb30nLmZvcm1hdChyZXBvPXJlcG8pKQogICAgcHJpbnQoJycpCiAgICBwcmludCgndGFnZ2VkOiAge3RhZ2dlZH0nLmZvcm1hdCh0YWdnZWQ9dGFnZ2VkKSkKICAgIHByaW50KCdjdXJyZW50OiB7dGFnfSAoe3RhZ19jb21taXR9KScuZm9ybWF0KHRhZz10YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdfY29tbWl0PXRhZ19jb21taXQpKQogICAgcHJpbnQoJ3BpcCB1cmw6IHtwaXB9Jy5mb3JtYXQocGlwPXBpcCkpCiAgICBwcmludCgnJykKCgpAY2xpLmNvbW1hbmQoJ3BrZy11cGRhdGVkZXBzJywgaGVscD0nU2hvdyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2FnZS4nKQpAY2xpY2sucGFzc19jb250ZXh0CmRlZiBkZXBzKGN0eCk6CiAgICByZXBvcyA9IGdldF9yZXBvc19mcm9tX3JlcXVpcmVtZW50cyhjdHgub2JqWydiYXNlX3BhdGgnXSkKICAgIHJlcXVpcmVkX3ZlcnNpb25zID0gZ2V0X3RhZ19mcm9tX3JlcG9fdXJsKHJlcG9zKQogICAgbGF0ZXN0X3ZlcnNpb25zID0gZ2V0X2xhdGVzdF90YWdzX2Zyb21fcmVwb3MocmVwb3MpCiAgICBpbnN0YWxsZWRfcGtncyA9IHBpcC5nZXRfaW5zdGFsbGVkX2Rpc3RyaWJ1dGlvbnMoKQogICAgY2xpY2suZWNobygnJykKICAgIGZvciByZXBvIGluIHJlcG9zOgogICAgICAgIHN0YXR1cyA9ICdvdXRkYXRlZCcKICAgICAgICByZXF1aXJlZCA9IHJlcXVpcmVkX3ZlcnNpb25zW3JlcG9dCiAgICAgICAgbGF0ZXN0ID0gbGF0ZXN0X3ZlcnNpb25zW3JlcG9dCiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXBvX3NtYWxsID0gcmVwby5zcGxpdCgnQCcpWzFdCiAgICAgICAgICAgIHBrZ19uYW1lID0gcmVwby5zcGxpdCgnZWdnPScpWzFdCiAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgcGtnX25hbWVfbm9ybWFsaXplZCA9IHBrZ19uYW1lLmxvd2VyKCkucmVwbGFjZSgnXycsICctJykKICAgICAgICBpbnN0YWxsZWQgPSAndW5rbm93bicKICAgICAgICBpbnN0YWxsZWRfbGlzdCA9IFsKICAgICAgICAgICAgcGtnLnZlcnNpb24KICAgICAgICAgICAgZm9yIHBrZyBpbiBpbnN0YWxsZWRfcGtncwogICAgICAgICAgICBpZiBwa2cua2V5IGluIFtwa2dfbmFtZV9ub3JtYWxpemVkLCBwa2dfbmFtZV9ub3JtYWxpemVkICsgJy1saWInXQogICAgICAgIF0KICAgICAgICBpZiBpbnN0YWxsZWRfbGlzdDoKICAgICAgICAgICAgaW5zdGFsbGVkID0gJ3Z7fScuZm9ybWF0KGluc3RhbGxlZF9saXN0WzBdKQoKICAgICAgICBpZiBsYXRlc3QgaXMgTm9uZSBvciBpbnN0YWxsZWQgaXMgTm9uZToKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgaWYgTG9vc2VWZXJzaW9uKGluc3RhbGxlZCkgPiBMb29zZVZlcnNpb24obGF0ZXN0KToKICAgICAgICAgICAgc3RhdHVzID0gJ2RldmVsb3AnCiAgICAgICAgZWxpZiBMb29zZVZlcnNpb24oaW5zdGFsbGVkKSA8IExvb3NlVmVyc2lvbihyZXF1aXJlZCk6CiAgICAgICAgICAgIHN0YXR1cyA9ICd1cC10by1kYXRlIChvbGQgdmVyc2lvbiBpbnN0YWxsZWQpJwogICAgICAgIGVsaWYgcmVxdWlyZWQgPT0gbGF0ZXN0OgogICAgICAgICAgICBzdGF0dXMgPSAndXAtdG8tZGF0ZScKICAgICAgICBtc2cgPSAne3BrZ19uYW1lfToge3N0YXR1c30gKHJlcXVpcmVkOiB7cmVxdWlyZWR9LCBpbnN0YWxsZWQ6IHtpbnN0YWxsZWR9LCBsYXRlc3Q6IHtsYXRlc3R9KScuZm9ybWF0KAogICAgICAgICAgICByZXBvPXJlcG9fc21hbGwsIHBrZ19uYW1lPXBrZ19uYW1lX25vcm1hbGl6ZWQsIHN0YXR1cz1zdGF0dXMsIHJlcXVpcmVkPXJlcXVpcmVkLCBpbnN0YWxsZWQ9aW5zdGFsbGVkLCBsYXRlc3Q9bGF0ZXN0KQogICAgICAgIGlmIHN0YXR1cyA9PSAndXAtdG8tZGF0ZScgb3IgKHN0YXR1cyA9PSAnZGV2ZWxvcCcgYW5kIGluc3RhbGxlZCA9PSByZXF1aXJlZCk6CiAgICAgICAgICAgIGNvbG9yID0gJ2dyZWVuJwogICAgICAgIGVsaWYgc3RhdHVzIGluICgnZGV2ZWxvcCcsICd1cC10by1kYXRlIChvbGQgdmVyc2lvbiBpbnN0YWxsZWQpJykgb3IgaW5zdGFsbGVkID09IGxhdGVzdDoKICAgICAgICAgICAgY29sb3IgPSAneWVsbG93JwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGNvbG9yID0gJ3JlZCcKICAgICAgICBjbGljay5lY2hvKGNsaWNrLnN0eWxlKG1zZywgZmc9Y29sb3IpKQoKCkBjbGkuY29tbWFuZCgncGtnLWJ1bXB2ZXJzaW9uJywgaGVscD0nQnVtcCB0aGUgcGFja2FnZSB2ZXJzaW9uLicpCkBjbGljay5hcmd1bWVudCgncGFydCcsIGRlZmF1bHQ9J3BhdGNoJykKQGNsaWNrLm9wdGlvbignLS1hbGxvdy1kaXJ0eScsIGlzX2ZsYWc9VHJ1ZSwKICAgICAgICAgICAgICBoZWxwPSdBbGxvdyBkaXJ0eScpCkBjbGljay5vcHRpb24oJy0tZm9yY2UnLCAnLWYnLCBpc19mbGFnPVRydWUsCiAgICAgICAgICAgICAgaGVscD0nQWxpYXMgZm9yIC0tYWxsb3ctZGlydHknKQpAY2xpY2sub3B0aW9uKCctLXllcycsICcteScsIGlzX2ZsYWc9VHJ1ZSwKICAgICAgICAgICAgICBoZWxwPSdBbnN3ZXIgeWVzIHRvIGFsbCBwcm9tcHRzJykKQGNsaWNrLnBhc3NfY29udGV4dApkZWYgYnVtcHZlcnNpb24oY3R4LCBwYXJ0LCBhbGxvd19kaXJ0eSwgZm9yY2UsIHllcyk6CiAgICBhcmdzID0gW3BhcnRdCiAgICBhbGxvd19kaXJ0eSA9IGFsbG93X2RpcnR5IG9yIGZvcmNlCgogICAgaXNfY2xlYW4gPSBpc19naXRfY2xlYW4oY3R4Lm9ialsnYmFzZV9wYXRoJ10pCiAgICBpZiBub3QgaXNfY2xlYW4gYW5kIG5vdCBhbGxvd19kaXJ0eToKICAgICAgICBwcmludCgnJykKICAgICAgICBwcmludCgnRVJST1I6IEdpdCB3b3JraW5nIGRpcmVjdG9yeSBpcyBub3QgY2xlYW4uJykKICAgICAgICBwcmludCgnJykKICAgICAgICBwcmludCgnWW91IGNhbiB1c2UgLS1hbGxvdy1kaXJ0eSBvciAtLWZvcmNlIGlmIHlvdSBrbm93IHdoYXQgJwogICAgICAgICAgICAgICd5b3VcJ3JlIGRvaW5nLicpCiAgICAgICAgZXhpdGNvZGUgPSAxCiAgICBlbHNlOgogICAgICAgIGlmIGFsbG93X2RpcnR5OgogICAgICAgICAgICBhcmdzLmFwcGVuZCgnLS1hbGxvdy1kaXJ0eScpCiAgICAgICAgY29tbWFuZCA9IFsnYnVtcHZlcnNpb24nXSArIGFyZ3MKCiAgICAgICAgb2xkX3ZlcnNpb24gPSBnZXRfdmVyc2lvbihjdHgub2JqWydwYWNrYWdlX3BhdGgnXSkKICAgICAgICBleGl0Y29kZSA9IHN1YnByb2Nlc3MuY2FsbChjb21tYW5kLCBjd2Q9Y3R4Lm9ialsnYmFzZV9wYXRoJ10pCiAgICAgICAgbmV3X3ZlcnNpb24gPSBnZXRfdmVyc2lvbihjdHgub2JqWydwYWNrYWdlX3BhdGgnXSkKCiAgICAgICAgaWYgZXhpdGNvZGUgPT0gMDoKICAgICAgICAgICAgcHJpbnQoJ0J1bXAgdmVyc2lvbiBmcm9tIHtvbGR9IHRvIHtuZXd9Jy5mb3JtYXQoCiAgICAgICAgICAgICAgICBvbGQ9b2xkX3ZlcnNpb24sIG5ldz1uZXdfdmVyc2lvbikpCiAgICAgICAgaWYgeWVzIG9yIGNsaWNrLmNvbmZpcm0oJ0RvIHlvdSB3YW50IHRvIGVkaXQgQ0hBTkdFUy5tZD8nKToKICAgICAgICAgICAgY2xpY2suZWRpdChmaWxlbmFtZT1vcy5wYXRoLmpvaW4oY3R4Lm9ialsnYmFzZV9wYXRoJ10sICdDSEFOR0VTLm1kJykpCiAgICBzeXMuZXhpdChleGl0Y29kZSkKCgpAY2xpLmNvbW1hbmQoJ3BrZy1jcmVhdGV0YWcnLCBoZWxwPSdDcmVhdGUgZ2l0IHRhZyB1c2luZyB0aGUgcGFja2FnZSB2ZXJzaW9uLicpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIHRhZyhjdHgpOgogICAgdGFnID0gJ3Z7fScuZm9ybWF0KGdldF92ZXJzaW9uKGN0eC5vYmpbJ3BhY2thZ2VfcGF0aCddKSkKICAgIHByaW50KCdDcmVhdGluZyBnaXQgdGFnIHt9Jy5mb3JtYXQodGFnKSkKICAgIGNvbW1hbmQgPSBbJ2dpdCcsICd0YWcnLCAnLW0nLCAnInZlcnNpb24ge30iJy5mb3JtYXQodGFnKSwgdGFnXQogICAgc3lzLmV4aXQoc3VicHJvY2Vzcy5jYWxsKGNvbW1hbmQpKQoKCkBjbGkuY29tbWFuZCgncGtnLXVwZGF0ZWRlcHMnLCBoZWxwPSdVcGRhdGUgcmVxdWlyZW1lbnRzLnR4dC4nKQpAY2xpY2sub3B0aW9uKCctLWluc3RhbGwnLCAnLWknLCBpc19mbGFnPVRydWUpCkBjbGljay5vcHRpb24oJy0taW5zdGFsbC1hbGwnLCAnLWEnLCBpc19mbGFnPVRydWUpCkBjbGljay5wYXNzX2NvbnRleHQKZGVmIHVwZGF0ZShjdHgsIGluc3RhbGwsIGluc3RhbGxfYWxsKToKICAgIGJhc2VfcGF0aCA9IGN0eC5vYmpbJ2Jhc2VfcGF0aCddCiAgICByZXBvcyA9IGdldF9yZXBvc19mcm9tX3JlcXVpcmVtZW50cyhiYXNlX3BhdGgpCiAgICByZXF1aXJlZF92ZXJzaW9ucyA9IGdldF90YWdfZnJvbV9yZXBvX3VybChyZXBvcykKICAgIGxhdGVzdF92ZXJzaW9ucyA9IGdldF9sYXRlc3RfdGFnc19mcm9tX3JlcG9zKHJlcG9zKQogICAgaW5zdGFsbGVkX3BrZ3MgPSBwaXAuZ2V0X2luc3RhbGxlZF9kaXN0cmlidXRpb25zKCkKICAgIGluc3RhbGxfbGlzdCA9IFsnLWUgLiddCiAgICBjbGljay5lY2hvKCcnKQogICAgZm9yIHJlcG8gaW4gcmVwb3M6CiAgICAgICAgbGF0ZXN0ID0gbGF0ZXN0X3ZlcnNpb25zW3JlcG9dCiAgICAgICAgcmVxdWlyZWQgPSByZXF1aXJlZF92ZXJzaW9uc1tyZXBvXQogICAgICAgIHRyeToKICAgICAgICAgICAgcGtnX25hbWUgPSByZXBvLnNwbGl0KCdlZ2c9JylbMV0KICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBwa2dfbmFtZV9ub3JtYWxpemVkID0gcGtnX25hbWUubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKQogICAgICAgIGluc3RhbGxlZCA9ICd1bmtub3duJwogICAgICAgIGluc3RhbGxlZF9saXN0ID0gWwogICAgICAgICAgICBwa2cudmVyc2lvbgogICAgICAgICAgICBmb3IgcGtnIGluIGluc3RhbGxlZF9wa2dzCiAgICAgICAgICAgIGlmIHBrZy5rZXkgaW4gW3BrZ19uYW1lX25vcm1hbGl6ZWQsIHBrZ19uYW1lX25vcm1hbGl6ZWQgKyAnLWxpYiddCiAgICAgICAgXQogICAgICAgIGlmIGluc3RhbGxlZF9saXN0OgogICAgICAgICAgICBpbnN0YWxsZWQgPSAndnt9Jy5mb3JtYXQoaW5zdGFsbGVkX2xpc3RbMF0pCgogICAgICAgIGlmIExvb3NlVmVyc2lvbihyZXF1aXJlZCkgPCBMb29zZVZlcnNpb24obGF0ZXN0KToKICAgICAgICAgICAgY2xpY2suZWNobygnVXBkYXRpbmcge30gZnJvbSB7fSB0byB7fS4uLicuZm9ybWF0KHBrZ19uYW1lLCByZXF1aXJlZCwgbGF0ZXN0KSkKICAgICAgICAgICAgbmV3X3JlcG8gPSB1cGRhdGVfcmVwb190YWcocmVwbywgbGF0ZXN0LCBwYXRoPWJhc2VfcGF0aCkKICAgICAgICAgICAgaWYgTG9vc2VWZXJzaW9uKGluc3RhbGxlZCkgPCBMb29zZVZlcnNpb24obGF0ZXN0KToKICAgICAgICAgICAgICAgIGluc3RhbGxfbGlzdC5hcHBlbmQobmV3X3JlcG8pCiAgICAgICAgZWxpZiBMb29zZVZlcnNpb24oaW5zdGFsbGVkKSA8IExvb3NlVmVyc2lvbihyZXF1aXJlZCk6CiAgICAgICAgICAgIGluc3RhbGxfbGlzdC5hcHBlbmQocmVwbykKICAgIGlmIGluc3RhbGxfYWxsOgogICAgICAgIGluc3RhbGwgPSBUcnVlCiAgICAgICAgaW5zdGFsbF9saXN0ID0gWyctciByZXF1aXJlbWVudHMudHh0J10KICAgIGlmIGluc3RhbGw6CiAgICAgICAgZm9yIG5ld19yZXBvIGluIGluc3RhbGxfbGlzdDoKICAgICAgICAgICAgbmV3X3JlcG8gPSBuZXdfcmVwby5zdHJpcCgpCiAgICAgICAgICAgIGNsaWNrLmVjaG8oJycpCiAgICAgICAgICAgIGNsaWNrLmVjaG8oJ1J1bm5pbmcgYHBpcCBpbnN0YWxsIC1VIHt9YCAuLi4nLmZvcm1hdChuZXdfcmVwbykpCiAgICAgICAgICAgIGNvbW1hbmQgPSBbJ3BpcCcsICdpbnN0YWxsJywgJy1VJ10gKyBuZXdfcmVwby5zcGxpdCgnICcpCiAgICAgICAgICAgIGV4aXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKGNvbW1hbmQsIGN3ZD1iYXNlX3BhdGgpCiAgICAgICAgICAgIGlmIGV4aXRjb2RlID09IDA6CiAgICAgICAgICAgICAgICBjbGljay5lY2hvKCdEb25lLicpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjbGljay5lY2hvKCdGYWlsZWQuJykKICAgICAgICAgICAgICAgIHN5cy5leGl0KGV4aXRjb2RlKQoKCmRlZiBjb3B5KHNyYywgZGVzdCwgaWdub3JlPSgnLmdpdCcsICcucHljJywgJ19fcHljYWNoZV9fJykpOgogICAgdHJ5OgogICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmMsIGRlc3QsIGlnbm9yZT1zaHV0aWwuaWdub3JlX3BhdHRlcm5zKCppZ25vcmUpKQogICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1RESVI6CiAgICAgICAgICAgIHNodXRpbC5jb3B5KHNyYywgZGVzdCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgnRGlyZWN0b3J5IG5vdCBjb3BpZWQuIEVycm9yOiAlcycgJSBlKQoKCmRlZiBnZXRfdmVyc2lvbihwYXRoKToKICAgICIiIlJldHVybiB0aGUgcHJvamVjdCB2ZXJzaW9uIGZyb20gVkVSU0lPTiBmaWxlLiIiIgoKICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgJ1ZFUlNJT04nKSwgJ3JiJykgYXMgZjoKICAgICAgICB2ZXJzaW9uID0gZi5yZWFkKCkuZGVjb2RlKCdhc2NpaScpLnN0cmlwKCkKICAgIHJldHVybiB2ZXJzaW9uLnN0cmlwKCkKCgpkZWYgZ2V0X3JlcG9zX2Zyb21fcmVxdWlyZW1lbnRzKHBhdGgpOgogICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgIHBhdGggPSBvcy5wYXRoLmN1cmRpcgogICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwYXRoLCAncmVxdWlyZW1lbnRzLnR4dCcpLCAncicpIGFzIGZwOgogICAgICAgIHJlcG9zID0gW2xpbmUuc3RyaXAoKSBmb3IgbGluZSBpbiBmcCBpZiAnZ2l0QCcgaW4gbGluZSBhbmQgbm90IGxpbmUuc3RyaXAoKS5zdGFydHN3aXRoKCcjJyldCiAgICByZXR1cm4gcmVwb3MKCgpkZWYgZ2V0X3RhZ19mcm9tX3JlcG9fdXJsKHJlcG9zKToKICAgIHRhZ3MgPSB7fQogICAgZm9yIHJlcG8gaW4gcmVwb3M6CiAgICAgICAgaWYgJ0AnIGluIHJlcG86CiAgICAgICAgICAgIHJlcG9fcGFyc2VkID0gdXJscGFyc2UocmVwbykKICAgICAgICAgICAgcmVwb19wYXRoID0gcmVwb19wYXJzZWQucGF0aAogICAgICAgICAgICB0YWdzW3JlcG9dID0gcmVwb19wYXRoLnNwbGl0KCdAJylbMV0KICAgICAgICBlbHNlOgogICAgICAgICAgICB0YWdzW3JlcG9dID0gTm9uZQogICAgcmV0dXJuIHRhZ3MKCgpkZWYgX2Nsb25lKHJlcG8pOgogICAgcmV0dXJuIHJlcG8sIGdpdF9jbG9uZShyZXBvLCBjaGVja291dD1GYWxzZSwgZGVwdGg9MSkKCgpkZWYgZ2V0X2xhdGVzdF90YWdzX2Zyb21fcmVwb3MocmVwb3MpOgogICAgdGFncyA9IHt9CiAgICBpZiBub3QgcmVwb3M6CiAgICAgICAgcmV0dXJuIHRhZ3MKCiAgICBwb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2wobGVuKHJlcG9zKSkKCiAgICByZXBvc18gPSBwb29sLm1hcChfY2xvbmUsIHJlcG9zKQogICAgZm9yIHJlcG8sIHBhdGggaW4gcmVwb3NfOgogICAgICAgIGlmIHBhdGg6CiAgICAgICAgICAgIHRhZyA9IGdldF9naXRfdGFnKHBhdGgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdGFnID0gTm9uZQogICAgICAgIHRhZ3NbcmVwb10gPSB0YWcKICAgIHJldHVybiB0YWdzCgoKZGVmIHVwZGF0ZV9yZXBvX3RhZyhyZXBvLCB0YWcsIHBhdGg9Tm9uZSk6CiAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgcGF0aCA9IG9zLnBhdGguY3VyZGlyCiAgICByZXQgPSAnJwogICAgY29udGVudCA9ICcnCiAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBhdGgsICdyZXF1aXJlbWVudHMudHh0JyksICdyJykgYXMgZnA6CiAgICAgICAgZm9yIGxpbmUgaW4gZnA6CiAgICAgICAgICAgIGlmIHJlcG8gaW4gbGluZToKICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIocidAdlswLTldK1wuWzAtOV0rXC5bMC05XSsnLCAnQHt9Jy5mb3JtYXQodGFnKSwgbGluZSkKICAgICAgICAgICAgICAgIHJldCArPSBsaW5lCiAgICAgICAgICAgIGNvbnRlbnQgKz0gbGluZQoKICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ocGF0aCwgJ3JlcXVpcmVtZW50cy50eHQnKSwgJ3cnKSBhcyBmcDoKICAgICAgICBmcC53cml0ZShjb250ZW50KQoKICAgIHJldHVybiByZXQKCgpyZXBvX3JlID0gcmUuY29tcGlsZShyJzooXHcrKVwvKC4qKVwuZ2l0JykKCgpkZWYgZ2l0X2Nsb25lKHJlcG8sIGRlc3Q9Tm9uZSwgY2hlY2tvdXQ9VHJ1ZSwgZGVwdGg9Tm9uZSwgYnJhbmNoPU5vbmUsIHNpbmdsZV9icmFuY2g9RmFsc2UpOgogICAgaWYgJyNlZ2cnIGluIHJlcG86CiAgICAgICAgcmVwb19wYXJzZWQgPSB1cmxwYXJzZShyZXBvKQogICAgICAgIHJlcG9fcGF0aCA9IHJlcG9fcGFyc2VkLnBhdGgKICAgICAgICBpZiAnQCcgaW4gcmVwb19wYXRoOgogICAgICAgICAgICByZXBvX3BhdGggPSByZXBvX3BhdGguc3BsaXQoJ0AnKVswXQogICAgICAgIHJlcG9fcGF0aCA9IHJlcG9fcGF0aC5zdHJpcCgnLycpCiAgICAgICAgcmVwb190ZWFtLCByZXBvX25hbWUgPSB0dXBsZShyZXBvX3BhdGguc3BsaXQoJy8nKSkKICAgICAgICByZXBvID0gcmVwb19wYXJzZWQubmV0bG9jICsgJzonICsgcmVwb19wYXRoCiAgICBlbHNlOgogICAgICAgIHJlcG9faW5mbyA9IHJlLnNlYXJjaChyZXBvX3JlLCByZXBvKQogICAgICAgIGlmIG5vdCByZXBvX2luZm86CiAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgcmVwb190ZWFtID0gcmVwb19pbmZvLmdyb3VwKDEpCiAgICAgICAgcmVwb19uYW1lID0gcmVwb19pbmZvLmdyb3VwKDIpCiAgICBpZiBkZXN0IGlzIE5vbmU6CiAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwgJy5tYXJ2aW4tcHl0aG9uLXRvb2xib3gnLCAncmVwb3MnKQogICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4ocGF0aCwgcmVwb190ZWFtLCByZXBvX25hbWUpCgogICAgb3B0cyA9ICcnCiAgICBpZiBub3QgY2hlY2tvdXQ6CiAgICAgICAgb3B0cyArPSAnIC1uJwogICAgaWYgZGVwdGg6CiAgICAgICAgb3B0cyArPSAnIC0tZGVwdGggJyArIHN0cihkZXB0aCkKICAgIGlmIGJyYW5jaDoKICAgICAgICBvcHRzICs9ICcgLS1icmFuY2ggJyArIGJyYW5jaAogICAgaWYgc2luZ2xlX2JyYW5jaDoKICAgICAgICBvcHRzICs9ICcgLS1zaW5nbGUtYnJhbmNoJwoKICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkZXN0KToKICAgICAgICBvcy5tYWtlZGlycyhkZXN0KQogICAgICAgIGNvbW1hbmQgPSAnZ2l0IGNsb25lIHtvcHRzfSB7cmVwb30ge2Rlc3R9Jy5mb3JtYXQoCiAgICAgICAgICAgIG9wdHM9b3B0cywgcmVwbz1yZXBvLCBkZXN0PWRlc3QpCiAgICAgICAgcHJpbnQoY29tbWFuZCkKICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQuc3BsaXQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkud2FpdCgpCgogICAgb3B0cyA9ICcnCiAgICBpZiBkZXB0aDoKICAgICAgICBvcHRzICs9ICcgLS1kZXB0aCAnICsgc3RyKGRlcHRoKQogICAgcHJpbnQoJ0ZldGNoaW5nIGxhdGVzdCB2ZXJzaW9uIGZyb20ge30gcmVwb3NpdG9yeScuZm9ybWF0KHJlcG9fbmFtZSkpCiAgICB0cnk6CiAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbigoJ2dpdCBmZXRjaCAtLXRhZ3MgJyArIG9wdHMpLnNwbGl0KCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIGN3ZD1kZXN0KS53YWl0KCkKICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgIHByaW50KCdDb3VsZCBub3QgZmV0Y2ggdGFncyBmcm9tIHt9Jy5mb3JtYXQocmVwb19uYW1lKSkKICAgICAgICBkZXN0ID0gTm9uZQoKICAgIHJldHVybiBkZXN0CgoKZGVmIGdldF9naXRfYnJhbmNoKHBhdGg9Tm9uZSk6CiAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgcGF0aCA9IG9zLnBhdGguY3VyZGlyCiAgICBjb21tYW5kID0gJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQnLnNwbGl0KCkKICAgIGJyYW5jaCA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY3dkPXBhdGgpLnN0ZG91dC5yZWFkKCkKICAgIHJldHVybiBicmFuY2guc3RyaXAoKS5kZWNvZGUoJ3V0Zi04JykKCgpkZWYgZ2V0X2dpdF90YWcocGF0aD1Ob25lKToKICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICBwYXRoID0gb3MucGF0aC5jdXJkaXIKICAgIGNvbW1hbmQgPSAnZ2l0IHJldi1saXN0IC0tdGFncyAtLW1heC1jb3VudD0xJy5zcGxpdCgpCiAgICBjb21taXQgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGN3ZD1wYXRoKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQogICAgY29tbWFuZCA9ICdnaXQgZGVzY3JpYmUgLS10YWdzIHt9Jy5mb3JtYXQoY29tbWl0KS5zcGxpdCgpCiAgICB0YWcgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGN3ZD1wYXRoKS5zdGRvdXQucmVhZCgpLmRlY29kZSgndXRmLTgnKQogICAgcmV0dXJuIHRhZy5zdHJpcCgpCgoKZGVmIGdldF9naXRfY29tbWl0KHBhdGg9Tm9uZSwgdGFnPU5vbmUpOgogICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgIHBhdGggPSBvcy5wYXRoLmN1cmRpcgogICAgaWYgdGFnOgogICAgICAgIGNvbW1hbmQgPSAnZ2l0IHJldi1saXN0IC1uIDEge3RhZ30nLmZvcm1hdCh0YWc9dGFnKS5zcGxpdCgpCiAgICBlbHNlOgogICAgICAgIGNvbW1hbmQgPSAnZ2l0IHJldi1wYXJzZSBIRUFEJy5zcGxpdCgpCiAgICBjb21taXQgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGN3ZD1wYXRoKS5zdGRvdXQucmVhZCgpCiAgICByZXR1cm4gY29tbWl0LnN0cmlwKCkuZGVjb2RlKCd1dGYtOCcpCgoKZGVmIGdldF9naXRfcmVwb3NpdG9yeV91cmwocGF0aD1Ob25lKToKICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICBwYXRoID0gb3MucGF0aC5jdXJkaXIKICAgIGNvbW1hbmQgPSAnZ2l0IGNvbmZpZyAtLWdldCByZW1vdGUub3JpZ2luLnVybCcuc3BsaXQoKQogICAgdXJsID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBjd2Q9cGF0aCkuc3Rkb3V0LnJlYWQoKQogICAgcmV0dXJuIHVybC5zdHJpcCgpLmRlY29kZSgndXRmLTgnKQoKCmRlZiBnZXRfZ2l0X3RhZ3MocGF0aD1Ob25lKToKICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICBwYXRoID0gb3MucGF0aC5jdXJkaXIKICAgIGNvbW1hbmQgPSAnZ2l0IHRhZycuc3BsaXQoKQogICAgdGFncyA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY3dkPXBhdGgpLnN0ZG91dC5yZWFkKCkKICAgIHJldHVybiBzb3J0ZWQodGFncy5zdHJpcCgpLnNwbGl0KCdcbicpLCByZXZlcnNlPVRydWUpCgoKZGVmIGlzX2dpdF9jbGVhbihwYXRoPU5vbmUpOgogICAgaWYgcGF0aCBpcyBOb25lOgogICAgICAgIHBhdGggPSBvcy5wYXRoLmN1cmRpcgogICAgY29tbWFuZCA9ICdnaXQgZGlmZiAtLXF1aWV0IEhFQUQnLnNwbGl0KCkKICAgIGV4aXRfY29kZSA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY3dkPXBhdGgpLnN0ZG91dC5yZWFkKCkKICAgIHJldHVybiBleGl0X2Nv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bmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KCmltcG9ydCBvcwppbXBvcnQgc3lzCmltcG9ydCBjbGljawoKCkBjbGljay5ncm91cCgnbm90ZWJvb2snKQpkZWYgY2xpKCk6CiAgICBwYXNzCgoKQGNsaS5jb21tYW5kKCdub3RlYm9vaycsIGhlbHA9J1N0YXJ0IHRoZSBKdXB5dGVyIG5vdGVib29rIHNlcnZlci4nKQpAY2xpY2sub3B0aW9uKCctLXBvcnQnLCAnLXAnLCBkZWZhdWx0PTg4ODgsIGhlbHA9J0p1cHl0ZXIgc2VydmVyIHBvcnQnKQpAY2xpY2sub3B0aW9uKCctLWVuYWJsZS1zZWN1cml0eScsIGlzX2ZsYWc9VHJ1ZSwgaGVscD0nRW5hYmxlIGp1cHl0ZXIgbm90ZWJvb2sgdG9rZW4gc2VjdXJpdHkuJykKQGNsaWNrLm9wdGlvbignLS1zcGFyay1jb25mJywgJy1jJywgZW52dmFyPSdTUEFSS19DT05GX0RJUicsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSksIGhlbHA9J1NwYXJrIGNvbmZpZ3VyYXRpb24gZm9sZGVyIHBhdGggdG8gYmUgdXNlZCBpbiB0aGlzIHNlc3Npb24nKQpAY2xpY2sub3B0aW9uKCctLWFsbG93LXJvb3QnLCBpc19mbGFnPVRydWUsIGhlbHA9J1J1biBub3RlYm9vayBmcm9tIHJvb3QgdXNlci4nKQpAY2xpY2sucGFzc19jb250ZXh0CmRlZiBub3RlYm9va19jbGkoY3R4LCBwb3J0LCBlbmFibGVfc2VjdXJpdHksIHNwYXJrX2NvbmYsIGFsbG93X3Jvb3QpOgogICAgbm90ZWJvb2soY3R4LCBwb3J0LCBlbmFibGVfc2VjdXJpdHksIHNwYXJrX2NvbmYsIGFsbG93X3Jvb3QpCgoKZGVmIG5vdGVib29rKGN0eCwgcG9ydCwgZW5hYmxlX3NlY3VyaXR5LCBzcGFya19jb25mLCBhbGxvd19yb290KToKICAgIG5vdGVib29rZGlyID0gb3MucGF0aC5qb2luKGN0eC5vYmpbJ2Jhc2VfcGF0aCddLCAnbm90ZWJvb2tzJykKICAgIGNvbW1hbmQgPSBbCiAgICAgICAgIlNQQVJLX0NPTkZfRElSPXswfSBZQVJOX0NPTkZfRElSPXswfSIuZm9ybWF0KHNwYXJrX2NvbmYgaWYgc3BhcmtfY29uZiBlbHNlIG9zLnBhdGguam9pbihvcy5lbnZpcm9uWyJTUEFSS19IT01FIl0sICJjb25mIikpLAogICAgICAgICdqdXB5dGVyJywgJ25vdGVib29rJywKICAgICAgICAnLS1ub3RlYm9vay1kaXInLCBub3RlYm9va2RpciwKICAgICAgICAnLS1pcCcsICcwLjAuMC4wJywKICAgICAgICAnLS1wb3J0Jywgc3RyKHBvcnQpLAogICAgICAgICctLW5vLWJyb3dzZXInLAogICAgICAgICctLWNvbmZpZycsIG9zLnBhdGguam9pbihvcy5lbnZpcm9uWyJNQVJWSU5fVE9PTEJPWF9QQVRIIl0sICdleHRyYXMnLCAnbm90ZWJvb2tfZXh0ZW5zaW9ucycsICdqdXB5dGVyX25vdGVib29rX2NvbmZpZy5weScpCiAgICBdCgogICAgY29tbWFuZC5hcHBlbmQoIi0tTm90ZWJvb2tBcHAudG9rZW49IikgaWYgbm90IGVuYWJsZV9zZWN1cml0eSBlbHNlIE5vbmUKICAgIGNvbW1hbmQuYXBwZW5kKCItLWFsbG93LXJvb3QiKSBpZiBhbGxvd19yb290IGVsc2UgTm9uZQoKICAgIHJldCA9IG9zLnN5c3RlbSgnICcuam9pbihjb21tYW5kKSkKICAgIHN5cy5leGl0KHJldCkKCgpAY2xpLmNvbW1hbmQoJ2xhYicsIGhlbHA9J1N0YXJ0IHRoZSBKdXB5dGVyTGFiIHNlcnZlci4nKQpAY2xpY2sub3B0aW9uKCctLXBvcnQnLCAnLXAnLCBkZWZhdWx0PTg4ODgsIGhlbHA9J0p1cHl0ZXJMYWIgc2VydmVyIHBvcnQnKQpAY2xpY2sub3B0aW9uKCctLWVuYWJsZS1zZWN1cml0eScsIGlzX2ZsYWc9VHJ1ZSwgaGVscD0nRW5hYmxlIGp1cHl0ZXJsYWIgdG9rZW4gc2VjdXJpdHkuJykKQGNsaWNrLm9wdGlvbignLS1zcGFyay1jb25mJywgJy1jJywgZW52dmFyPSdTUEFSS19DT05GX0RJUicsIHR5cGU9Y2xpY2suUGF0aChleGlzdHM9VHJ1ZSksIGhlbHA9J1NwYXJrIGNvbmZpZ3VyYXRpb24gZm9sZGVyIHBhdGggdG8gYmUgdXNlZCBpbiB0aGlzIHNlc3Npb24nKQpAY2xpY2sucGFzc19jb250ZXh0CmRlZiBsYWJfY2xpKGN0eCwgcG9ydCwgZW5hYmxlX3NlY3VyaXR5LCBzcGFya19jb25mKToKICAgIGxhYihjdHgsIHBvcnQsIGVuYWJsZV9zZWN1cml0eSwgc3BhcmtfY29uZikKCgpkZWYgbGFiKGN0eCwgcG9ydCwgZW5hYmxlX3NlY3VyaXR5LCBzcGFya19jb25mKToKICAgIG5vdGVib29rZGlyID0gb3MucGF0aC5qb2luKGN0eC5vYmpbJ2Jhc2VfcGF0aCddLCAnbm90ZWJvb2tzJykKICAgIGNvbW1hbmQgPSBbCiAgICAgICAgIlNQQVJLX0NPTkZfRElSPXswfSBZQVJOX0NPTkZfRElSPXswfSIuZm9ybWF0KHNwYXJrX2NvbmYgaWYgc3BhcmtfY29uZiBlbHNlIG9zLnBhdGguam9pbihvcy5lbnZpcm9uWyJTUEFS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CiAgY29udGFjdDoKICAgICAgbmFtZTogbWFudGFpbmVyIHt7bWFudGFpbmVyLm5hbWV9fQogICAgICBlbWFpbDoge3ttYW50YWluZXIuZW1haWx9fQogICAgICB1cmw6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJ2aW4tYWkKICBsaWNlbnNlOgogICAgbmFtZTogQXBhY2hlIExpY2Vuc2UgMi4wCnNlcnZlcnM6CiAgLSB1cmw6IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMAogIC0gdXJsOiBodHRwOi8vMC4wLjAuMDo4MDAwCnRhZ3M6CiAgLSBuYW1lOiBEb2NrZXIKICAgIGRlc2NyaXB0aW9uOiBGb3IgRG9ja2VyIHVzZXJzLCBwbGVhc2UgdXNlICJtYWtlIGRvY2tlci1idWlsZCIgYW5kICJtYWtlIGRvY2tlci1ydW4iIGNvbW1hbmRzIGluIHlvdXIgZW5naW5lIHZpcnR1YWxlbnYgdG8gc3RhcnQgdGhlIHNlcnZlcgogIC0gbmFtZTogQWNxdWlzaXRvcgogICAgZGVzY3JpcHRpb246IFNldHVwIHRoZSBpbml0aWFsX2RhdGFzZXQgd2l0aCBhbGwgY2xlYW5lZCBkYXRhIG5lY2Vzc2FyeSB0byBidWlsZCB5b3VyIGRhdGFzZXQgaW4gdGhlIG5leHQgYWN0aW9uCiAgLSBuYW1lOiBUcHJlcGFyYXRvcgogICAgZGVzY3JpcHRpb246IFNldHVwIHRoZSBkYXRhc2V0IHdpdGggdGhlIHRyYW5zZm9ybWVkIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGFsZ29yaXRobSB1c2VkIHRvIGJ1aWxkIHRoZSBtb2RlbCBpbiB0aGUgbmV4dCBhY3Rpb24KICAtIG5hbWU6IFRyYWluZXIKICAgIGRlc2NyaXB0aW9uOiBTZXR1cCB0aGUgbW9kZWwgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhbGdvcml0aG0gdXNlZCB0byB0cmFpbmluZwogIC0gbmFtZTogRXZhbHVhdG9yCiAgICBkZXNjcmlwdGlvbjogU2V0dXAgdGhlIG1ldHJpY3Mgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhbGdvcml0aG1zIHVzZWQgdG8gdGVzdCB0aGUgbW9kZWwKICAtIG5hbWU6IFByZWRpY3RvcgogICAgZGVzY3JpcHRpb246IFJldHVybiB0aGUgcHJlZGljdGVkIHZhbHVlIGluIGEganNvbiBwYXJzYWJsZSBvYmplY3QgZm9ybWF0CiAgLSBuYW1lOiBGZWVkYmFjawogICAgZGVzY3JpcHRpb246IFJlY2VpdmUgZmVlZGJhY2sgbWVzc2FnZSwgdXNlciBjYW4gbWFuaXB1bGF0ZSB0aGlzIG1lc3NhZ2UgZm9yIGFueSB1c2UKICAtIG5hbWU6IFBpcGVsaW5lCiAgICBkZXNjcmlwdGlvbjogUGVyZm9ybSBhbGwgYmF0Y2ggYWN0aW9ucyBpbiB5b3VyIHJpZ2h0IG9yZGVyCnBhdGhzOgogIC9hY3F1aXNpdG9yL2hlYWx0aDoKICAgIGdldDoKICAgICAgc3VtbWFyeTogR2V0IGFjcXVpc2l0b3IncyBzZXJ2aWNlIGhlYWx0aAogICAgICBvcGVyYXRpb25JZDogZ2V0QWNxdWlzaXRvckhlYWx0aAogICAgICB0YWdzOgogICAgICAgIC0gQWNxdWlzaXRvcgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogUmVzdWx0IE1lc3NhZ2UgLyBTdWNjZXNzCiAgICAgICAgJzQwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogQmFkIFJlcXVlc3QgLyBJbGxlZ2FsIEFyZ3VtZW50IC8gTWlzc2luZyBQYXJhbWV0ZXJzCiAgICAgICAgJzUwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgU2VydmVyIEVycm9yIC8gVGltZW91dAogICAgICAgICc1MDMnOgogICAgICAgICAgZGVzY3JpcHRpb246IFNlcnZpY2UgVW5hdmFpbGFibGUKICAvYWNxdWlzaXRvci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIHN1bW1hcnk6IEdldCBhY3F1aXNpdG9yJ3Mgc2VydmljZSBzdGF0dXMKICAgICAgcGFyYW1ldGVyczogCiAgICAgICAgLSBpbjogcXVlcnkKICAgICAgICAgIG5hbWU6IHByb3RvY29sCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgUHJvdG9jb2wgdmFsdWUgZ2VuZXJhdGVkIGZyb20gbGFzdCBhY3Rpb24KICAgICAgb3BlcmF0aW9uSWQ6IGdldEFjcXVpc2l0b3JTdGF0dXMKICAgICAgdGFnczoKICAgICAgICAtIEFjcXVpc2l0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL2FjcXVpc2l0b3I6CiAgICBwb3N0OgogICAgICBzdW1tYXJ5OiBSdW4gYWNxdWlzaXRvcgogICAgICByZXF1ZXN0Qm9keToKICAgICAgICBkZXNjcmlwdGlvbjogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGJvZHkgaXMgYW4gZW1wdHkganNvbiBvYmplY3QKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgIG9wZXJhdGlvbklkOiBhY3F1aXNpdG9yCiAgICAgIHRhZ3M6CiAgICAgICAgLSBBY3F1aXNpdG9yCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBSZXN1bHQgTWVzc2FnZSAvIFN1Y2Nlc3MKICAgICAgICAnNDAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBCYWQgUmVxdWVzdCAvIElsbGVnYWwgQXJndW1lbnQgLyBNaXNzaW5nIFBhcmFtZXRlcnMKICAgICAgICAnNTAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgLyBUaW1lb3V0CiAgICAgICAgJzUwMyc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogU2VydmljZSBVbmF2YWlsYWJsZQogIC90cHJlcGFyYXRvci9oZWFsdGg6CiAgICBnZXQ6CiAgICAgIHN1bW1hcnk6IEdldCB0cmFpbmVyIHByZXBhcmF0b3IncyBzZXJ2aWNlIGhlYWx0aAogICAgICBvcGVyYXRpb25JZDogZ2V0VFByZXBhcmF0b3J0b3JIZWFsdGgKICAgICAgdGFnczoKICAgICAgICAtIFRwcmVwYXJhdG9yCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBSZXN1bHQgTWVzc2FnZSAvIFN1Y2Nlc3MKICAgICAgICAnNDAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBCYWQgUmVxdWVzdCAvIElsbGVnYWwgQXJndW1lbnQgLyBNaXNzaW5nIFBhcmFtZXRlcnMKICAgICAgICAnNTAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgLyBUaW1lb3V0CiAgICAgICAgJzUwMyc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogU2VydmljZSBVbmF2YWlsYWJsZQogIC90cHJlcGFyYXRvci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIHN1bW1hcnk6IEdldCB0cmFpbmVyIHByZXBhcmF0b3IncyBzZXJ2aWNlIHN0YXR1cwogICAgICBwYXJhbWV0ZXJzOiAKICAgICAgICAtIGluOiBxdWVyeQogICAgICAgICAgbmFtZTogcHJvdG9jb2wKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBQcm90b2NvbCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBsYXN0IGFjdGlvbgogICAgICBvcGVyYXRpb25JZDogZ2V0VFByZXBhcmF0b3JTdGF0dXMKICAgICAgdGFnczoKICAgICAgICAtIFRwcmVwYXJhdG9yCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBSZXN1bHQgTWVzc2FnZSAvIFN1Y2Nlc3MKICAgICAgICAnNDAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBCYWQgUmVxdWVzdCAvIElsbGVnYWwgQXJndW1lbnQgLyBNaXNzaW5nIFBhcmFtZXRlcnMKICAgICAgICAnNTAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgLyBUaW1lb3V0CiAgICAgICAgJzUwMyc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogU2VydmljZSBVbmF2YWlsYWJsZQogIC90cHJlcGFyYXRvci9yZWxvYWQ/cHJvdG9jb2w9OgogICAgcHV0OgogICAgICBzdW1tYXJ5OiBSZWxvYWQgYXJ0aWZhY3QgZm9yIHRyYWluZXIgcHJlcGFyYXRvcgogICAgICBwYXJhbWV0ZXJzOiAKICAgICAgICAtIGluOiBxdWVyeQogICAgICAgICAgbmFtZTogcHJvdG9jb2wKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBQcm90b2NvbCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBsYXN0IGFjdGlvbgogICAgICByZXF1ZXN0Qm9keToKICAgICAgICBkZXNjcmlwdGlvbjogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGJvZHkgaXMgYW4gZW1wdHkganNvbiBvYmplY3QKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgIG9wZXJhdGlvbklkOiByZWxvYWRUUHJlcGFyYXRvcgogICAgICB0YWdzOgogICAgICAgIC0gVHByZXBhcmF0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL3RwcmVwYXJhdG9yOgogICAgcG9zdDoKICAgICAgc3VtbWFyeTogUnVuIHRyYWluZXIgcHJlcGFyYXRvcgogICAgICByZXF1ZXN0Qm9keToKICAgICAgICBkZXNjcmlwdGlvbjogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGJvZHkgaXMgYW4gZW1wdHkganNvbiBvYmplY3QKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgIG9wZXJhdGlvbklkOiB0cHJlcGFyYXRvcgogICAgICB0YWdzOgogICAgICAgIC0gVHByZXBhcmF0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL3RyYWluZXIvaGVhbHRoOgogICAgZ2V0OgogICAgICBzdW1tYXJ5OiBHZXQgdHJhaW5lcidzIHNlcnZpY2UgaGVhbHRoCiAgICAgIG9wZXJhdGlvbklkOiBnZXRUcmFpbmVySGVhbHRoCiAgICAgIHRhZ3M6CiAgICAgICAgLSBUcmFpbmVyCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBSZXN1bHQgTWVzc2FnZSAvIFN1Y2Nlc3MKICAgICAgICAnNDAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBCYWQgUmVxdWVzdCAvIElsbGVnYWwgQXJndW1lbnQgLyBNaXNzaW5nIFBhcmFtZXRlcnMKICAgICAgICAnNTAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgLyBUaW1lb3V0CiAgICAgICAgJzUwMyc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogU2VydmljZSBVbmF2YWlsYWJsZQogIC90cmFpbmVyL3N0YXR1czoKICAgIGdldDoKICAgICAgc3VtbWFyeTogR2V0IHRyYWluZXIncyBzZXJ2aWNlIHN0YXR1cwogICAgICBwYXJhbWV0ZXJzOiAKICAgICAgICAtIGluOiBxdWVyeQogICAgICAgICAgbmFtZTogcHJvdG9jb2wKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBQcm90b2NvbCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBsYXN0IGFjdGlvbgogICAgICBvcGVyYXRpb25JZDogZ2V0VHJhaW5lclN0YXR1cwogICAgICB0YWdzOgogICAgICAgIC0gVHJhaW5lcgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogUmVzdWx0IE1lc3NhZ2UgLyBTdWNjZXNzCiAgICAgICAgJzQwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogQmFkIFJlcXVlc3QgLyBJbGxlZ2FsIEFyZ3VtZW50IC8gTWlzc2luZyBQYXJhbWV0ZXJzCiAgICAgICAgJzUwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgU2VydmVyIEVycm9yIC8gVGltZW91dAogICAgICAgICc1MDMnOgogICAgICAgICAgZGVzY3JpcHRpb246IFNlcnZpY2UgVW5hdmFpbGFibGUKICAvdHJhaW5lci9yZWxvYWQ/cHJvdG9jb2w9OgogICAgcHV0OgogICAgICBzdW1tYXJ5OiBSZWxvYWQgYXJ0aWZhY3QgZm9yIHRyYWluZXIKICAgICAgcGFyYW1ldGVyczogCiAgICAgICAgLSBpbjogcXVlcnkKICAgICAgICAgIG5hbWU6IHByb3RvY29sCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgUHJvdG9jb2wgdmFsdWUgZ2VuZXJhdGVkIGZyb20gbGFzdCBhY3Rpb24KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgZGVzY3JpcHRpb246IFRoZSBkZWZhdWx0IHZhbHVlIGZvciBib2R5IGlzIGFuIGVtcHR5IGpzb24gb2JqZWN0CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICBvcGVyYXRpb25JZDogcmVsb2FkVHJhaW5lcgogICAgICB0YWdzOgogICAgICAgIC0gVHJhaW5lcgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogUmVzdWx0IE1lc3NhZ2UgLyBTdWNjZXNzCiAgICAgICAgJzQwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogQmFkIFJlcXVlc3QgLyBJbGxlZ2FsIEFyZ3VtZW50IC8gTWlzc2luZyBQYXJhbWV0ZXJzCiAgICAgICAgJzUwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgU2VydmVyIEVycm9yIC8gVGltZW91dAogICAgICAgICc1MDMnOgogICAgICAgICAgZGVzY3JpcHRpb246IFNlcnZpY2UgVW5hdmFpbGFibGUKICAvdHJhaW5lcjoKICAgIHBvc3Q6CiAgICAgIHN1bW1hcnk6IFJ1biB0cmFpbmVyCiAgICAgIHJlcXVlc3RCb2R5OgogICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYm9keSBpcyBhbiBlbXB0eSBqc29uIG9iamVjdAogICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgY29udGVudDoKICAgICAgICAgIGFwcGxpY2F0aW9uL2pzb246CiAgICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgICB0eXBlOiBvYmplY3QKICAgICAgb3BlcmF0aW9uSWQ6IHRyYWluZXIKICAgICAgdGFnczoKICAgICAgICAtIFRyYWluZXIKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL2V2YWx1YXRvci9oZWFsdGg6CiAgICBnZXQ6CiAgICAgIHN1bW1hcnk6IEdldCBldmFsdWF0b3IncyBzZXJ2aWNlIGhlYWx0aAogICAgICBvcGVyYXRpb25JZDogZ2V0RXZhbHVhdG9ySGVhbHRoCiAgICAgIHRhZ3M6CiAgICAgICAgLSBFdmFsdWF0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL2V2YWx1YXRvci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIHN1bW1hcnk6IEdldCBldmFsdWF0b3IncyBzZXJ2aWNlIHN0YXR1cwogICAgICBwYXJhbWV0ZXJzOiAKICAgICAgICAtIGluOiBxdWVyeQogICAgICAgICAgbmFtZTogcHJvdG9jb2wKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBQcm90b2NvbCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBsYXN0IGFjdGlvbgogICAgICBvcGVyYXRpb25JZDogZ2V0RXZhbHVhdG9yU3RhdHVzCiAgICAgIHRhZ3M6CiAgICAgICAgLSBFdmFsdWF0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL2V2YWx1YXRvci9tZXRyaWNzP3Byb3RvY29sPToKICAgIGdldDoKICAgICAgc3VtbWFyeTogR2V0IG1ldHJpY3MncyB2YWx1ZQogICAgICBwYXJhbWV0ZXJzOiAKICAgICAgICAtIGluOiBxdWVyeQogICAgICAgICAgbmFtZTogcHJvdG9jb2wKICAgICAgICAgIHNjaGVtYTogCiAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiBNZXRyaWNzIHByb3RvY29sIHZhbHVlCiAgICAgIG9wZXJhdGlvbklkOiBnZXRNZXRyaWNzCiAgICAgIHRhZ3M6CiAgICAgICAgLSBFdmFsdWF0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL2V2YWx1YXRvci9yZWxvYWQ/cHJvdG9jb2w9OgogICAgcHV0OgogICAgICBzdW1tYXJ5OiBSZWxvYWQgYXJ0aWZhY3QgZm9yIGV2YWx1YXRvcgogICAgICBwYXJhbWV0ZXJzOiAKICAgICAgICAtIGluOiBxdWVyeQogICAgICAgICAgbmFtZTogcHJvdG9jb2wKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBQcm90b2NvbCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBsYXN0IGFjdGlvbgogICAgICBvcGVyYXRpb25JZDogcmVsb2FkRXZhbHVhdG9yCiAgICAgIHRhZ3M6CiAgICAgICAgLSBFdmFsdWF0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL2V2YWx1YXRvcjoKICAgIHBvc3Q6CiAgICAgIHN1bW1hcnk6IFJ1biBldmFsdWF0b3IKICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgZGVzY3JpcHRpb246IFRoZSBkZWZhdWx0IHZhbHVlIGZvciBib2R5IGlzIGFuIGVtcHR5IGpzb24gb2JqZWN0CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICBvcGVyYXRpb25JZDogZXZhbHVhdG9yCiAgICAgIHRhZ3M6CiAgICAgICAgLSBFdmFsdWF0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL3ByZWRpY3Rvci9oZWFsdGg6CiAgICBnZXQ6CiAgICAgIHN1bW1hcnk6IEdldCBwcmVkaWN0b3IncyBzZXJ2aWNlIGhlYWx0aAogICAgICBvcGVyYXRpb25JZDogZ2V0UHJlZGljdG9ySGVhbHRoCiAgICAgIHRhZ3M6CiAgICAgICAgLSBQcmVkaWN0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL3ByZWRpY3Rvci9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIHN1bW1hcnk6IEdldCBwcmVkaWN0b3IncyBzZXJ2aWNlIHN0YXR1cwogICAgICBwYXJhbWV0ZXJzOiAKICAgICAgICAtIGluOiBxdWVyeQogICAgICAgICAgbmFtZTogcHJvdG9jb2wKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBQcm90b2NvbCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBsYXN0IGFjdGlvbgogICAgICBvcGVyYXRpb25JZDogZ2V0UHJlZGljdG9yU3RhdHVzCiAgICAgIHRhZ3M6CiAgICAgICAgLSBQcmVkaWN0b3IKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL3ByZWRpY3Rvci9yZWxvYWQ/cHJvdG9jb2w9OgogICAgcHV0OgogICAgICBzdW1tYXJ5OiBSZWxvYWQgYXJ0aWZhY3QgZm9yIHByZWRpY3RvcgogICAgICBwYXJhbWV0ZXJzOiAKICAgICAgICAtIGluOiBxdWVyeQogICAgICAgICAgbmFtZTogcHJvdG9jb2wKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogc3RyaW5nCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgZGVzY3JpcHRpb246IFRoZSBQcm90b2NvbCB2YWx1ZSBnZW5lcmF0ZWQgZnJvbSBsYXN0IGFjdGlvbgogICAgICByZXF1ZXN0Qm9keToKICAgICAgICBkZXNjcmlwdGlvbjogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGJvZHkgaXMgYW4gZW1wdHkganNvbiBvYmplY3QKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgIG9wZXJhdGlvbklkOiByZWxvYWRQcmVkaWN0b3IKICAgICAgdGFnczoKICAgICAgICAtIFByZWRpY3RvcgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogUmVzdWx0IE1lc3NhZ2UgLyBTdWNjZXNzCiAgICAgICAgJzQwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogQmFkIFJlcXVlc3QgLyBJbGxlZ2FsIEFyZ3VtZW50IC8gTWlzc2luZyBQYXJhbWV0ZXJzCiAgICAgICAgJzUwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgU2VydmVyIEVycm9yIC8gVGltZW91dAogICAgICAgICc1MDMnOgogICAgICAgICAgZGVzY3JpcHRpb246IFNlcnZpY2UgVW5hdmFpbGFibGUKICAvcHJlZGljdG9yOgogICAgcG9zdDoKICAgICAgc3VtbWFyeTogUnVuIHByZWRpY3RvcgogICAgICByZXF1ZXN0Qm9keToKICAgICAgICBkZXNjcmlwdGlvbjogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGJvZHkgaXMgYW4gZW1wdHkganNvbiBvYmplY3QKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgIG9wZXJhdGlvbklkOiBwcmVkaWN0b3IKICAgICAgdGFnczoKICAgICAgICAtIFByZWRpY3RvcgogICAgICByZXNwb25zZXM6CiAgICAgICAgJzIwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogUmVzdWx0IE1lc3NhZ2UgLyBTdWNjZXNzCiAgICAgICAgJzQwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogQmFkIFJlcXVlc3QgLyBJbGxlZ2FsIEFyZ3VtZW50IC8gTWlzc2luZyBQYXJhbWV0ZXJzCiAgICAgICAgJzUwMCc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogSW50ZXJuYWwgU2VydmVyIEVycm9yIC8gVGltZW91dAogICAgICAgICc1MDMnOgogICAgICAgICAgZGVzY3JpcHRpb246IFNlcnZpY2UgVW5hdmFpbGFibGUKICAvZmVlZGJhY2svaGVhbHRoOgogICAgZ2V0OgogICAgICBzdW1tYXJ5OiBHZXQgZmVlZGJhY2sncyBzZXJ2aWNlIGhlYWx0aAogICAgICBvcGVyYXRpb25JZDogZ2V0RmVlZGJhY2tIZWFsdGgKICAgICAgdGFnczoKICAgICAgICAtIEZlZWRiYWNrCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBSZXN1bHQgTWVzc2FnZSAvIFN1Y2Nlc3MKICAgICAgICAnNDAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBCYWQgUmVxdWVzdCAvIElsbGVnYWwgQXJndW1lbnQgLyBNaXNzaW5nIFBhcmFtZXRlcnMKICAgICAgICAnNTAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgLyBUaW1lb3V0CiAgICAgICAgJzUwMyc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogU2VydmljZSBVbmF2YWlsYWJsZQogIC9mZWVkYmFjay9zdGF0dXM6CiAgICBnZXQ6CiAgICAgIHN1bW1hcnk6IEdldCBmZWVkYmFjaydzIHNlcnZpY2Ugc3RhdHVzCiAgICAgIHBhcmFtZXRlcnM6IAogICAgICAgIC0gaW46IHF1ZXJ5CiAgICAgICAgICBuYW1lOiBwcm90b2NvbAogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICB0eXBlOiBzdHJpbmcKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICBkZXNjcmlwdGlvbjogVGhlIFByb3RvY29sIHZhbHVlIGdlbmVyYXRlZCBmcm9tIGxhc3QgYWN0aW9uCiAgICAgIG9wZXJhdGlvbklkOiBnZXRGZWVkYmFja1N0YXR1cwogICAgICB0YWdzOgogICAgICAgIC0gRmVlZGJhY2sKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL2ZlZWRiYWNrL3JlbG9hZD9wcm90b2NvbD06CiAgICBwdXQ6CiAgICAgIHN1bW1hcnk6IFJlbG9hZCBhcnRpZmFjdCBmb3IgZmVlZGJhY2sKICAgICAgcGFyYW1ldGVyczogCiAgICAgICAgLSBpbjogcXVlcnkKICAgICAgICAgIG5hbWU6IHByb3RvY29sCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgIHR5cGU6IHN0cmluZwogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIGRlc2NyaXB0aW9uOiBUaGUgUHJvdG9jb2wgdmFsdWUgZ2VuZXJhdGVkIGZyb20gbGFzdCBhY3Rpb24KICAgICAgcmVxdWVzdEJvZHk6CiAgICAgICAgZGVzY3JpcHRpb246IFRoZSBkZWZhdWx0IHZhbHVlIGZvciBib2R5IGlzIGFuIGVtcHR5IGpzb24gb2JqZWN0CiAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICBjb250ZW50OgogICAgICAgICAgYXBwbGljYXRpb24vanNvbjoKICAgICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAgIHR5cGU6IG9iamVjdAogICAgICBvcGVyYXRpb25JZDogcmVsb2FkRmVlZGJhY2sKICAgICAgdGFnczoKICAgICAgICAtIEZlZWRiYWNrCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAnMjAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBSZXN1bHQgTWVzc2FnZSAvIFN1Y2Nlc3MKICAgICAgICAnNDAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBCYWQgUmVxdWVzdCAvIElsbGVnYWwgQXJndW1lbnQgLyBNaXNzaW5nIFBhcmFtZXRlcnMKICAgICAgICAnNTAwJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgLyBUaW1lb3V0CiAgICAgICAgJzUwMyc6CiAgICAgICAgICBkZXNjcmlwdGlvbjogU2VydmljZSBVbmF2YWlsYWJsZQogIC9mZWVkYmFjazoKICAgIHBvc3Q6CiAgICAgIHN1bW1hcnk6IFJ1biBmZWVkYmFjawogICAgICByZXF1ZXN0Qm9keToKICAgICAgICBkZXNjcmlwdGlvbjogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGJvZHkgaXMgYW4gZW1wdHkganNvbiBvYmplY3QKICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgIGNvbnRlbnQ6CiAgICAgICAgICBhcHBsaWNhdGlvbi9qc29uOgogICAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICAgdHlwZTogb2JqZWN0CiAgICAgIG9wZXJhdGlvbklkOiBmZWVkYmFjawogICAgICB0YWdzOgogICAgICAgIC0gRmVlZGJhY2sKICAgICAgcmVzcG9uc2VzOgogICAgICAgICcyMDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IFJlc3VsdCBNZXNzYWdlIC8gU3VjY2VzcwogICAgICAgICc0MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEJhZCBSZXF1ZXN0IC8gSWxsZWdhbCBBcmd1bWVudCAvIE1pc3NpbmcgUGFyYW1ldGVycwogICAgICAgICc1MDAnOgogICAgICAgICAgZGVzY3JpcHRpb246IEludGVybmFsIFNlcnZlciBFcnJvciAvIFRpbWVvdXQKICAgICAgICAnNTAzJzoKICAgICAgICAgIGRlc2NyaXB0aW9uOiBTZXJ2aWNlIFVuYXZhaWxhYmxlCiAgL3BpcGVsaW5lOgogICAgcG9zdDoKICAgICAg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MDAsCgkicGlwZWxpbmVBY3Rpb25zIjogWyJhY3F1aXNpdG9yIiwgInRwcmVwYXJhdG9yIiwgInRyYWluZXIiLCAiZXZhbHVhdG9yIl0sCgkiYWN0aW9ucyI6IFt7CgkJIm5hbWUiOiAiYWNxdWlzaXRvciIsCgkJImFjdGlvblR5cGUiOiAiYmF0Y2giLAoJCSJwb3J0IjogNTAwNTEsCgkJImhvc3QiOiAibG9jYWxob3N0IiwKCQkiYXJ0aWZhY3RzVG9QZXJzaXN0IjogWyJpbml0aWFsZGF0YXNldCJdLAoJCSJhcnRpZmFjdHNUb0xvYWQiOiBbXSwKCQkicGlwZWxpbmUiOiBbXQoJfSwgewoJCSJuYW1lIjogInRwcmVwYXJhdG9yIiwKCQkiYWN0aW9uVHlwZSI6ICJiYXRjaCIsCgkJInBvcnQiOiA1MDA1MiwKCQkiaG9zdCI6ICJsb2NhbGhvc3QiLAoJCSJhcnRpZmFjdHNUb1BlcnNpc3QiOiBbImRhdGFzZXQiXSwKCQkiYXJ0aWZhY3RzVG9Mb2FkIjogWyJpbml0aWFsZGF0YXNldCJdLAoJCSJwaXBlbGluZSI6IFtdCgl9LCB7CgkJIm5hbWUiOiAidHJhaW5lciIsCgkJImFjdGlvblR5cGUiOiAiYmF0Y2giLAoJCSJwb3J0IjogNTAwNTMsCgkJImhvc3QiOiAibG9jYWxob3N0IiwKCQkiYXJ0aWZhY3RzVG9QZXJzaXN0IjogWyJtb2RlbCJdLAoJCSJhcnRpZmFjdHNUb0xvYWQiOiBbImRhdGFzZXQiXSwKCQkicGlwZWxpbmUiOiBbXQoJfSwgewoJCSJuYW1lIjogImV2YWx1YXRvciIsCgkJImFjdGlvblR5cGUiOiAiYmF0Y2giLAoJCSJwb3J0IjogNTAwNTQsCgkJImhvc3QiOiAibG9jYWxob3N0IiwKCQkiYXJ0aWZhY3RzVG9QZXJzaXN0IjogWyJtZXRyaWNzIl0sCgkJImFydGlmYWN0c1RvTG9hZCI6IFsiZGF0YXNldCIsICJtb2RlbCJdLAoJCSJwaXBlbGluZSI6IFtdCgl9LCB7CgkJIm5hbWUiOiAicHJlZGljdG9yIiwKCQkiYWN0aW9uVHlwZSI6ICJvbmxpbmUiLAoJCSJwb3J0IjogNTAwNTUs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SU5FX0hPTUUgJiYgXAogICAgbWtkaXIgLXAgL3Zhci9sb2cvbWFydmluL2VuZ2luZXMgJiYgXAogICAgbWtkaXIgLXAgL3Zhci9ydW4vbWFydmluL2VuZ2luZXMKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEluc3RhbGwgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgZm9yIGRlZmF1bHQgaW5zdGFsbGF0aW9uIAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKUlVOIGFwdC1nZXQgdXBkYXRlIC15ICYmIFwKICAgIGFwdC1nZXQgaW5zdGFsbCAteSBidWlsZC1lc3NlbnRpYWwgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IG1hdmVuIGdpdCBweXRob24gY21ha2Ugc29mdHdhcmUtcHJvcGVydGllcy1jb21tb24gY3VybCBsaWJzdGRjKys2ICYmIFwKICAgIGFwdC1nZXQgaW5zdGFsbCAteSBnaXQgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IHB5dGhvbjIuNy1kZXYgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IHB5dGhvbi1waXAgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IGlweXRob24gJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IGxpYmZmaS1kZXYgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IGxpYnNzbC1kZXYgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IGxpYnhtbDItZGV2ICYmIFwKICAgIGFwdC1nZXQgaW5zdGFsbCAteSBsaWJ4c2x0MS1kZXYgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IGxpYnBuZzEyLWRldiAmJiBcCiAgICBhcHQtZ2V0IGluc3RhbGwgLXkgbGliZnJlZXR5cGU2LWRldiAmJiBcCiAgICBhcHQtZ2V0IGluc3RhbGwgLXkgcHl0aG9uLXRrICYmIFwKICAgIGFwdC1nZXQgaW5zdGFsbCAteSBsaWJzYXNsMi1kZXYgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IHB5dGhvbi1waXAgJiYgXAogICAgYXB0LWdldCBpbnN0YWxsIC15IGdyYXBodml6ICYmIFwKICAgIHBpcCBpbnN0YWxsIC0tdXBncmFkZSBwaXAgJiYgXAogICAgYXB0LWdldCBjbGVhbgoKUlVOIHBpcCBpbnN0YWxsIHZpcnR1YWxlbnZ3cmFwcGVyCgojIEluc3RhbGwgT3JhY2xlIEpESwpSVU4gYWRkLWFwdC1yZXBvc2l0b3J5IHBwYTp3ZWJ1cGQ4dGVhbS9qYXZhIC15ICYmIFwKICAgIGFwdC1nZXQgLXFxIHVwZGF0ZSAmJiBcCiAgICBlY2hvIGRlYmNvbmYgc2hhcmVkL2FjY2VwdGVkLW9yYWNsZS1saWNlbnNlLXYxLTEgc2VsZWN0IHRydWUgfCBkZWJjb25mLXNldC1zZWxlY3Rpb25zICYmIFwKICAgIGVjaG8gZGViY29uZiBzaGFyZWQvYWNjZXB0ZWQtb3JhY2xlLWxpY2Vuc2UtdjEtMSBzZWVuIHRydWUgfCBkZWJjb25mLXNldC1zZWxlY3Rpb25zICYmIFwKICAgIGFwdC1nZXQgaW5zdGFsbCAteSBvcmFjbGUtamF2YTgtaW5zdGFsbGVyICAgIAoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgSW5zdGFsbCBBcGFjaGUgU3BhcmsKIwojIFVuY29tbWVudCBpZiB5b3UgYXJlIHVzaW5nIHNwYXJrLCBub3RlIHRoYXQgaXMgbmVlZGVkIHRoZSAKIyBzcGFyayBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHRoZSB0aGluayB3b3JrcyBjb3JyZWN0bHkuCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIFJVTiBjdXJsIGh0dHBzOi8vZDNrYmNxYTQ5bWliMTMuY2xvdWRmcm9udC5uZXQvc3BhcmstMi4xLjEtYmluLWhhZG9vcDIuNi50Z3ogLW8gL3RtcC9zcGFyay0yLjEuMS1iaW4taGFkb29wMi42LnRneiAmJiBcCiMgICAgdGFyIC14ZiAvdG1wL3NwYXJrLTIuMS4xLWJpbi1oYWRvb3AyLjYudGd6IC1DIC9vcHQvICYmIFwKIyAgICBsbiAtcyAvb3B0L3NwYXJrLTIuMS4xLWJpbi1oYWRvb3AyLjYgL29wdC9zcGFyawoKIyBBZGQgdGhlIGIydyBkYXRhbGFrZSBjb25maWcgZm9yIFNwYXJrCiMgQUREIHNwYXJrLWNvbmYudGFyICRTUEFSS19DT05GX0RJUgpSVU4gbWtkaXIgLXAgJFNQQVJLX0NPTkZfRElSCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENyZWF0ZSB0aGUgdmlydHVhbGVudiBjb25maWd1cmF0aW9uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpSVU4gL2Jpbi9iYXNoIC1jICJjZCAkTUFSVklOX0VOR0lORV9IT01FICYmIFwKICAgIHNvdXJjZSAvdXNyL2xvY2FsL2Jpbi92aXJ0dWFsZW52d3JhcHBlci5zaCAmJiBcCiAgICBta3ZpcnR1YWxlbnYgJE1BUlZJTl9FTkdJTkVfRU5WIgoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgICAgICAgIDxDVVNUT00gRU5HSU5FIElOU1RBTExBVElPTiBQUk9DRURVUkUgSEVSRT4gICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBDb3B5IGFuZCBJbnN0YWxsIHRoZSBtYXJ2aW4gZW5naW5lIGluc2lkZSB2aXJ0dWFsZW52CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpBREQgYnVpbGQvZW5naW5lLnRhciAkTUFSVklOX0VOR0lORV9IT01FCgpBREQgYnVpbGQvbWFydmluLWVuZ2luZS1leGVjdXRvci1hc3NlbWJseS5qYXIgJE1BUlZJTl9EQVRBX1BBVEggCgpSVU4gL2Jpbi9iYXNoIC1jICJzb3VyY2UgL3Vzci9sb2NhbC9iaW4vdmlydHVhbGVudndyYXBwZXIuc2ggJiYgXAogICAgd29ya29uICRNQVJWSU5fRU5HSU5FX0VOViAmJiBcCiAgICBjZCAkTUFSVklOX0VOR0lORV9IT01FICYmIFwKICAgIHBpcCBpbnN0YWxsIC4gLS1wcm9jZXNzLWRlcGVuZGVuY3ktbGlua3MiCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTdGFydHMgdGhlIGVuZ2luZSBodHRwIHNlcnZlcgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKRVhQT1NFIDgwMDAKCkNNRCAvYmluL2Jhc2ggLWMgInNvdXJjZSAvdXNyL2xvY2FsL2Jpbi92aXJ0dWFsZW52d3JhcHBlci5zaCAmJiBcCiAgICB3b3Jrb24gJE1BUlZJTl9FTkdJTkVfRU5WICYmIFwKICAgIGNkICRNQVJWSU5fRU5HSU5FX0hPTUUgJiYgXAogICAgbWFydmluIGVuZ2luZS1odHRwc2VydmVyIC1oIDAuMC4wLjAgLXAgODAwMCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL01ha2VmaWxlAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwNTA0NiAxMzQ2MzMzMzQ3NiAwMzI3NDYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALlBIT05ZOiBoZWxwIG1hcnZpbiBtYXJ2aW4tcHJvZCB1cGRhdGUgY2xlYW4tcHljIGNsZWFuLWJ1aWxkIGNsZWFuLXJlcG9ydHMgY2xlYW4tZGVwcyBjbGVhbiBkb2NrZXItYnVpbGQgZG9ja2VyLXB1c2ggZG9ja2VyLXJ1bgoKRE9DS0VSX1ZFUlNJT04/PTAuMDAuMDEKRE9DS0VSX1JFR0lTVFJZX0FEUkVTUz89ZG9ja2VyLnJlZ2lzdHJ5LmlvCk1BUlZJTl9EQVRBX1BBVEg/PSQoSE9NRSkvbWFydmluL2RhdGEKTUFSVklOX0VOR0lORV9OQU1FPz17e3Byb2plY3QubmFtZX19Ck1BUlZJTl9UT09MQk9YX1ZFUlNJT04/PXt7cHJvamVjdC50b29sYm94X3ZlcnNpb259fQoKaGVscDoKCUBlY2hvICIgICAgbWFydmluIgoJQGVjaG8gIiAgICAgICAgUHJlcGFyZSBwcm9qZWN0IHRvIGJlIHVzZWQgYXMgYSBtYXJ2aW4gcGFja2FnZS4iCglAZWNobyAiICAgIG1hcnZpbi1wcm9kIgoJQGVjaG8gIiAgICAgICAgUHJlcGFyZSBwcm9qZWN0IHRvIGJlIHVzZWQgaW4gcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4iCglAZWNobyAiICAgIHVwZGF0ZSIKCUBlY2hvICIgICAgICAgIFJlaW5zdGFsbCByZXF1aXJlbWVudHMgYW5kIHNldHVwLnB5IGRlcGVuZGVuY2llcy4iCglAZWNobyAiICAgIGNsZWFuIgoJQGVjaG8gIiAgICAgICAgUmVtb3ZlIGFsbCBnZW5lcmF0ZWQgYXJ0aWZhY3RzLiIKCUBlY2hvICIgICAgY2xlYW4tcHljIgoJQGVjaG8gIiAgICAgICAgUmVtb3ZlIHB5dGhvbiBhcnRpZmFjdHMuIgoJQGVjaG8gIiAgICBjbGVhbi1idWlsZCIKCUBlY2hvICIgICAgICAgIFJlbW92ZSBidWlsZCBhcnRpZmFjdHMuIgoJQGVjaG8gIiAgICBjbGVhbi1yZXBvcnRzIgoJQGVjaG8gIiAgICAgICAgUmVtb3ZlIGNvdmVyYWdlIHJlcG9ydHMuIgoJQGVjaG8gIiAgICBjbGVhbi1kZXBzIgoJQGVjaG8gIiAgICAgICAgUmVtb3ZlIG1hcnZpbiBzZXR1cC5weSBkZXBlbmRlbmNpZXMuIgoJQGVjaG8gIiAgICBkb2NrZXItYnVpbGQiCglAZWNobyAiICAgICAgICBSdW5zIHRoZSBkb2NrZXIgYnVpbGQgY29tbWFuZCB3aXRoIG1hcnZpbiBlbnYgZGVmYXVsdCBwYXJhbWV0ZXJzLiIKCUBlY2hvICIgICAgZG9ja2VyLXB1c2giCglAZWNobyAiICAgICAgICBSdW5zIHRoZSBkb2NrZXIgcHVzaCBjb21tYW5kIHdpdGggbWFydmluIGVudiBkZWZhdWx0IHBhcmFtZXRlcnMuIgoJQGVjaG8gIiAgICBkb2NrZXItcnVuIgoJQGVjaG8gIiAgICAgICAgUnVucyB0aGUgZG9ja2VyIHJ1biBjb21tYW5kIHdpdGggbWFydmluIGVudiBkZWZhdWx0IHBhcmFtZXRlcnMuIgoKbWFydmluOgoJcGlwIGluc3RhbGwgLWUgIi5bdGVzdGluZ10iIC0tcHJvY2Vzcy1kZXBlbmRlbmN5LWxpbmtzCgltYXJ2aW4gLS1oZWxwCgptYXJ2aW4tcHJvZDoKCXBpcCBpbnN0YWxsIC4gLS1wcm9jZXNzLWRlcGVuZGVuY3ktbGlua3MKCW1hcnZpbiAtLWhlbHAKCnVwZGF0ZToKCXBpcCBpbnN0YWxsIC1lIC4gLVUgLS1wcm9jZXNzLWRlcGVuZGVuY3ktbGlua3MKCmNsZWFuLXB5YzoKCWZpbmQgLiAtbmFtZSAnKi5weWMnIC1leGVjIHJtIC1mIHt9ICsKCWZpbmQgLiAtbmFtZSAnKi5weW8nIC1leGVjIHJtIC1mIHt9ICsKCWZpbmQgLiAtbmFtZSAnKn4nIC1leGVjIHJtIC1mICB7fSArCgpjbGVhbi1idWlsZDoKCXJtIC1yZiAqLmVnZy1pbmZvCglybSAtcmYgLmNhY2hlCglybSAtcmYgLmVnZ3MKCXJtIC1yZiBkaXN0CglybSAtcmYgYnVpbGQKCmNsZWFuLXJlcG9ydHM6CglybSAtcmYgY292ZXJhZ2VfcmVwb3J0LwoJcm0gLWYgY292ZXJhZ2UueG1sCglybSAtZiAuY292ZXJhZ2UKCmNsZWFuLWRlcHM6CglwaXAgZnJlZXplIHwgZ3JlcCAtdiAiXi1lIiB8IHhhcmdzIHBpcCB1bmluc3RhbGwgLXkKCmNsZWFuOiBjbGVhbi1idWlsZCBjbGVhbi1weWMgY2xlYW4tcmVwb3J0cyBjbGVhbi1kZXBzCgpkb2NrZXItYnVpbGQ6IGNsZWFuLWJ1aWxkCglta2RpciAtcCBidWlsZAoJdGFyIC1jZiBidWlsZC9lbmdpbmUudGFyIC0tZXhjbHVkZT0qLmxvZyAtLWV4Y2x1ZGU9Ki5wa2wgLS1leGNsdWRlPSdidWlsZCcgLS1leGNsdWRlPSdub3RlYm9va3MnIC0tZXhjbHVkZT0qLnRhciAqCgljcCAtZiAkKE1BUlZJTl9EQVRBX1BBVEgpL21hcnZpbi1lbmdpbmUtZXhlY3V0b3ItYXNzZW1ibHktJChNQVJWSU5fVE9PTEJPWF9WRVJTSU9OKS5qYXIgYnVpbGQvbWFydmluLWVuZ2luZS1leGVjdXRvci1hc3NlbWJseS5qYXIKCXN1ZG8gZG9ja2VyIGJ1aWxkIC10ICQoRE9DS0VSX1JFR0lTVFJZX0FEUkVTUykvJChNQVJWSU5fRU5HSU5FX05BTUUpOiQoRE9DS0VSX1ZFUlNJT04pIC4KCmRvY2tlci1ydW46CglzdWRvIGRvY2tlciBydW4gLS1uYW1lPW1hcnZpbi0kKE1BUlZJTl9FTkdJTkVfTkFNRSktJChET0NLRVJfVkVSU0lPTikgLS1tb3VudCB0eXBlPWJpbmQsc291cmNlPSQoTUFSVklOX0RBVEFfUEFUSCksZGVzdGluYXRpb249L21hcnZpbi1kYXRhIC1wIDgwMDA6ODAwMCAkKERPQ0tFUl9SRUdJU1RSWV9BRFJFU1MpLyQoTUFSVklOX0VOR0lORV9OQU1FKTokKERPQ0tFUl9WRVJTSU9OKQoKZG9ja2VyLXB1c2g6CglzdWRvIGRvY2tlciBwdXNoICQoRE9DS0VSX1JFR0lTVFJZX0FEUkVTUykvJChNQVJWSU5fRU5HSU5FX05BTUUpOiQoRE9DS0VSX1ZFUlNJT04pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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c2VwYXJhdGUgaG9zdHMKMi4gYHBvcnRgOiB0aGUgU1NIIGNvbm5lY3Rpb24gcG9ydAozLiBgdXNlcmA6IHRoZSBTU0ggY29ubmVjdGlvbiB1c2VybmFtZS4gQ3VycmVudGx5LCBvbmx5IGEgc2luZ2xlIHVzZXIgaXMKc3VwcG9ydGVkLiBUaGlzIHVzZXIgc2hvdWxkIGJlIGNhcGFibGUgb2YgKnBhc3N3b3JkbGVzcyBzdWRvKiwgYWx0aG91Z2ggaXQgY2FuCnVzZSBwYXNzd29yZCBmb3IgdGhlIFNTSCBjb25uZWN0aW9uCgpOZXh0LCBlbnN1cmUgdGhhdCB0aGUgcmVtb3RlcyBzZXJ2ZXJzIGFyZSBwcm92aXNpb25lZCAoYWxsIHJlcXVpcmVkIHNvZnR3YXJlCmFyZSBpbnN0YWxsZWQpOgoKICAgIG1hcnZpbiBlbmdpbmUtZGVwbG95IC0tcHJvdmlzaW9uCgpOZXh0LCBwYWNrYWdlIHlvdXIgZW5naW5lOgoKICAgIG1hcnZpbiBlbmdpbmUtZGVwbG95IC0tcGFja2FnZQoKVGhpcyB3aWxsIGNyZWF0ZSBhIGNvbXByZXNzZWQgYXJjaGl2ZSBjb250YWluaW5nIHlvdXIgZW5naW5lIGNvZGUgdW5kZXIgdGhlCmAucGFja2FnZXNgIGRpcmVjdG9yeS4KCk5leHQsIGRlcGxveSB5b3VyIGVuZ2luZSB0byByZW1vdGVzIHNlcnZlcnM6CgogICAgbWFydmluIGVuZ2luZS1kZXBsb3kKCkJ5IGRlZmF1bHQsIGEgZGVwZW5kZW5jeSBjbGVhbiB3aWxsIGJlIGV4ZWN1dGVkIGF0IGVhY2ggZGVwbG95LiBZb3UgY2FuIHNraXAgaXQKdXNpbmc6CgogICAgbWFydmluIGVuZ2luZS1kZXBsb3kgLS1za2lwLWNsZWFuCgpOZXh0LCB5b3UgY2FuIHN0YXJ0IHRoZSBIVFRQIHNlcnZlciBpbiB0aGUgcmVtb3RlcyBzZXJ2ZXJzOgoKICAgIG1hcnZpbiBlbmdpbmUtaHR0cHNlcnZlci1yZW1vdGUgc3RhcnQKCllvdSBjYW4gY2hlY2sgaWYgdGhlIEhUVFAgc2VydmVyIGlzIHJ1bm5pbmc6CgogICAgbWFydmluIGVuZ2luZS1odHRwc2VydmVyLXJlbW90ZSBzdGF0dXMKCkFuZCBzdG9wIGl0OgoKICAgIG1hcnZpbiBlbmdpbmUtaHR0cHNlcnZlci1yZW1vdGUgc3RvcAoKQWZ0ZXIgc3RhcnRpbmcsIHlvdSBjYW4gdGVzdCBpdCBieSBtYWtpbmcgYSBIVFRQIHJlcXVlc3QgdG8gYW55IGVuZHBvaW50LCBsaWtlOgoKICAgIGN1cmwgLXYgaHR0cDovL2V4YW1wbGUuY29tL3ByZWRpY3Rvci9oZWFsdGgKClVuZGVyIHRoZSBob29kLCB0aGlzIGVuZ2luZSB1c2VzIEZhYnJpYyB0byBkZWZpbmUgcHJvdmlzaW9uaW5nIGFuZCBkZXBsb3ltZW50CnByb2Nlc3MuIENoZWNrIHRoZSBgZmFiZmlsZS5weWAgZm9yIG1vcmUgaW5mb3JtYXRpb24uIFlvdSBjYW4gYWRkIG5ldyB0YXNrcyBvcgplZGl0IGV4aXN0aW5nIG9uZXMgdG8gbWF0Y2ggeW91ciBwcm92aXNpb25pbmcgYW5kIGRlcGxveW1lbnQgcGlwZWxpbmUuCgojIyBEZXZlbG9wbWVudAoKIyMjIEdldHRpbmcgc3RhcnRlZAoKRmlyc3QsIGNyZWF0ZSBhIG5ldyB2aXJ0dWFsZW52CgpgYGAKbWt2aXJ0dWFsZW52IHt7cHJvamVjdC5wYWNrYWdlfX1fZW52CmBgYAoKTm93IGluc3RhbGwgdGhlIGRldmVsb3BtZW50IGRlcGVuZGVuY2llcwoKYGBgCm1ha2UgbWFydmluCmBgYAoKWW91IGFyZSBub3cgcmVhZHkgdG8gY29kZS4KCgojIyMgQWRkaW5nIG5ldyBkZXBlbmRlbmNpZXMKCkl0XGBzIHZlcnkgaW1wb3J0YW50LiBBbGwgZGV2ZWxvcG1lbnQgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBhZGRlZCB0byBgc2V0dXAucHlgLgoKIyMjIFJ1bm5pbmcgdGVzdHMKClRoaXMgcHJvamVjdCB1c2VzICpbcHkudGVzdF0oaHR0cDovL3B5dGVzdC5vcmcvKSogYXMgdGVzdCBydW5uZXIgYW5kICpbVG94XShodHRwczovL3RveC5yZWFkdGhlZG9jcy5pbykqIHRvIG1hbmFnZSB2aXJ0dWFsZW52cy4KClRvIHJ1biBhbGwgdGVzdHMgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZAoKYGBgCm1hcnZpbiB0ZXN0CmBgYAoKVG8gcnVuIHNwZWNpZmljIHRlc3QKCmBgYAptYXJ2aW4gdGVzdCB0ZXN0cy90ZXN0X2ZpbGUucHk6OlRlc3RDbGFzczo6dGVzdF9tZXRob2QKYGBgCgoKIyMjIFdyaXR0aW5nIGRvY3VtZW50YXRpb24KClRoZSBwcm9qZWN0IGRvY3VtZW50YXRpb24gaXMgd3JpdHRlbiB1c2luZyAqW0p1cHl0ZXJdKGh0dHA6Ly9qdXB5dGVyLnJlYWR0aGVkb2NzLmlvLykqIG5vdGVib29rcy4gCllvdSBjYW4gc3RhcnQgdGhlIG5vdGVib29rIHNlcnZlciBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQKCmBgYAptYXJ2aW4gbm90ZWJvb2sKYGBgCgpVc2Ugbm90ZWJvb2tzIHRvIGRlbW9uc3RyYXRlIGhvdyB0byB1c2UgdGhlIGxpYiBmZWF0dXJlcy4gSXQgY2FuIGFsc28gYmUgdXNlZnVsIHRvIHNob3cgc29tZSB1c2UgY2FzZXMuCgoKIyMjIEJ1bXBpbmcgdmVyc2lvbgoKYGBgCm1hcnZpbiBwa2ctYnVtcHZlcnNpb24gW3BhdGNofG1pbm9yfG1ham9yXQpnaXQgYWRkIC4gJiYgZ2l0IGNvbW1pdCAtbSAiQnVtcCB2ZXJzaW9uIgpgYGAKCgojIyMgVGFnZ2luZyB2ZXJzaW9uCgpgYGAKbWFydmluIHBrZy1jcmVhdGV0YWcKZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciAtLWZvbGxvdy10YWdzCmBgYAoKCiMjIyBMb2dnaW5nCgpUaGUgZGVmYXVsdCBsb2cgbGV2ZWwgaXMgc2V0IHRvIF9XQVJOSU5HXy4gWW91IGNhbiBjaGFuZ2UgdGhlIGxvZyBsZXZlbCBhdCBydW50aW1lIHNldHRpbmcgYW5vdGhlciB2YWx1ZSB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZTogYHt7cHJvamVjdC5wYWNrYWdlfHVwcGVyfX1fTE9HX0xFVkVMYCBvciBgTE9HX0xFVkVMYC4gVGhlIGF2YWlsYWJsZSB2YWx1ZXMgYXJlIF9DUklUSUNBTF8sIF9FUlJPUl8sIF9XQVJOSU5HXywgX0lORk9fIGFuZCBfREVCVUdfLgoKQmUgY2FyZWZ1bCB1c2luZyBgTE9HX0xFVkVMYCwgaXQgbWF5IGFmZmVjdCBhbm90aGVyIGxpYi4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvc2V0dXAucHkAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDExNjU1IDEzNDYzMzMzNDc2IDAzMzAyMwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgb3MKaW1wb3J0IHNodXRpbApmcm9tIG9zLnBhdGggaW1wb3J0IGRpcm5hbWUsIGpvaW4KZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cCwgZmluZF9wYWNrYWdlcwpmcm9tIHNldHVwdG9vbHMuY29tbWFuZC50ZXN0IGltcG9ydCB0ZXN0IGFzIFRlc3RDb21tYW5kCmZyb20gc2V0dXB0b29scy5jb21tYW5kLmRldmVsb3AgaW1wb3J0IGRldmVsb3AgYXMgX2RldmVsb3AKZnJvbSBzZXR1cHRvb2xzLmNvbW1hbmQuaW5zdGFsbCBpbXBvcnQgaW5zdGFsbCBhcyBfaW5zdGFsbAoKClJFUVVJUkVNRU5UU19URVNUUyA9IFsKICAgICdweXRlc3Q+PTIuNi40JywKICAgICdweXRlc3QtY292Pj0xLjguMScsCiAgICAnbW9jaz49Mi4wLjAnLAogICAgJ3ZpcnR1YWxlbnY+PTE1LjAuMScsCiAgICAndG94Pj0yLjIuMCcsCl0KCmRlZiBfZ2V0X3ZlcnNpb24oKToKICAgICIiIlJldHVybiB0aGUgcHJvamVjdCB2ZXJzaW9uIGZyb20gVkVSU0lPTiBmaWxlLiIiIgoKICAgIHdpdGggb3Blbihqb2luKGRpcm5hbWUoX19maWxlX18pLCAne3twcm9qZWN0LnBhY2thZ2V9fS9WRVJTSU9OJyksICdyYicpIGFzIGY6CiAgICAgICAgdmVyc2lvbiA9IGYucmVhZCgpLmRlY29kZSgnYXNjaWknKS5zdHJpcCgpCiAgICByZXR1cm4gdmVyc2lvbgoKCmRlZiBfaG9va3MoZGlyKToKICAgIF9zZXRfYXV0b2NvbXBsZXRlKCkKICAgIF9pbnN0YWxsX25vdGVib29rX2V4dGVuc2lvbigpCgoKZGVmIF9zZXRfYXV0b2NvbXBsZXRlKCk6CiAgICBpbXBvcnQgbWFydmluX3B5dGhvbl90b29sYm94IGFzIHRvb2xib3gKICAgIHZpcnR1YWxlbnYgPSBvcy5lbnZpcm9uLmdldCgnVklSVFVBTF9FTlYnLCBOb25lKQoKICAgIGlmIHZpcnR1YWxlbnY6CiAgICAgICAgcG9zdGFjdGl2YXRlID0gb3MucGF0aC5qb2luKHZpcnR1YWxlbnYsICdiaW4nLCAncG9zdGFjdGl2YXRlJykKCiAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocG9zdGFjdGl2YXRlKToKICAgICAgICAgICAgc2h1dGlsLmNvcHkoCiAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4odG9vbGJveC5fX3BhdGhfX1swXSwgJ2V4dHJhcycsICdtYXJ2aW5fYmFzaF9jb21wbGV0aW9uJyksCiAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4odmlydHVhbGVudiwgJ21hcnZpbl9iYXNoX2NvbXBsZXRpb24nKQogICAgICAgICAgICApCgogICAgICAgICAgICBjb21tYW5kID0gJ3NvdXJjZSAie30iJy5mb3JtYXQob3MucGF0aC5qb2luKHZpcnR1YWxlbnYsICdtYXJ2aW5fYmFzaF9jb21wbGV0aW9uJykpCgogICAgICAgICAgICB3aXRoIG9wZW4ocG9zdGFjdGl2YXRlLCAncisnKSBhcyBmcDoKICAgICAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKICAgICAgICAgICAgICAgIGZwLnNlZWsoMCkKICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgPSBGYWxzZQogICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgICAgICAgICAgICAgaWYgJ21hcnZpbl9iYXNoX2NvbXBsZXRpb24nIGluIGxpbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICMgUmVwbGFjaW5nIG9sZCBhdXRvY29tcGxldGUgY29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBmcC53cml0ZShjb21tYW5kKQogICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIGZwLndyaXRlKGxpbmUpCgogICAgICAgICAgICAgICAgaWYgbm90IGNvbmZpZ3VyZWQ6CiAgICAgICAgICAgICAgICAgICAgZnAud3JpdGUoY29tbWFuZCkKICAgICAgICAgICAgICAgICAgICAjICdBdXRvY29tcGxldGUgd2FzIHN1Y2Nlc3NmdWxseSBjb25maWd1cmVkJwogICAgICAgICAgICAgICAgZnAud3JpdGUoJ1xuJykKICAgICAgICAgICAgICAgIGZwLnRydW5jYXRlKCkKCgpkZWYgX2luc3RhbGxfbm90ZWJvb2tfZXh0ZW5zaW9uKCk6CiAgICBpbXBvcnQgbWFydmluX3B5dGhvbl90b29sYm94IGFzIHRvb2xib3gKCiAgICBpbnN0YWxsX2NvbW1hbmQgPSBbCiAgICAgICAgImp1cHl0ZXIiLAogICAgICAgICJuYmV4dGVuc2lvbiIsCiAgICAgICAgImluc3RhbGwiLAogICAgICAgIG9zLnBhdGguam9pbih0b29sYm94Ll9fcGF0aF9fWzBdLCAnZXh0cmFzJywgJ25vdGVib29rX2V4dGVuc2lvbnMnLCAnbWFpbi5qcycpLAogICAgICAgICItLWRlc3RpbmF0aW9uIiwKICAgICAgICAibWFydmluLmpzIiwKICAgICAgICAiLS1zeXMtcHJlZml4IiwKICAgICAgICAiLS1vdmVyd3JpdGUiCiAgICBdCgogICAgb3Muc3lzdGVtKCcgJy5qb2luKGluc3RhbGxfY29tbWFuZCkpCgogICAgZW5hYmxlX2NvbW1hbmQgPSBbCiAgICAgICAgImp1cHl0ZXIiLAogICAgICAgICJuYmV4dGVuc2lvbiIsCiAgICAgICAgImVuYWJsZSIsCiAgICAgICAgIm1hcnZpbiIsCiAgICAgICAgIi0tc3lzLXByZWZpeCIKICAgIF0KCiAgICBvcy5zeXN0ZW0oJyAnLmpvaW4oZW5hYmxlX2NvbW1hbmQpKQoKCmNsYXNzIGRldmVsb3AoX2RldmVsb3ApOgogICAgZGVmIHJ1bihzZWxmKToKICAgICAgICBfZGV2ZWxvcC5ydW4oc2VsZikKICAgICAgICBzZWxmLmV4ZWN1dGUoX2hvb2tzLCAoc2VsZi5pbnN0YWxsX2xpYiwpLCBtc2c9IlJ1bm5pbmcgZGV2ZWxvcCBwcmVwYXJhdGlvbiB0YXNrIikKCgpjbGFzcyBpbnN0YWxsKF9pbnN0YWxsKToKICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgX2luc3RhbGwucnVuKHNlbGYpCiAgICAgICAgc2VsZi5leGVjdXRlKF9ob29rcywgKHNlbGYuaW5zdGFsbF9saWIsKSwgbXNnPSJSdW5uaW5nIGluc3RhbGwgcHJlcGFyYXRpb24gdGFzayIpCgoKY2xhc3MgVG94KFRlc3RDb21tYW5kKToKICAgICIiIlJ1biB0aGUgdGVzdCBjYXNlcyB1c2luZyBUT1ggY29tbWFuZC4iIiIKCiAgICB1c2VyX29wdGlvbnMgPSBbKCd0b3gtYXJncz0nLCAnYScsICJBcmd1bWVudHMgdG8gcGFzcyB0byB0b3giKV0KCiAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgIFRlc3RDb21tYW5kLmluaXRpYWxpemVfb3B0aW9ucyhzZWxmKQogICAgICAgIHNlbGYudG94X2FyZ3MgPSBOb25lCgogICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgVGVzdENvbW1hbmQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQogICAgICAgIHNlbGYudGVzdF9hcmdzID0gW10KICAgICAgICBzZWxmLnRlc3Rfc3VpdGUgPSBUcnVlCgogICAgZGVmIHJ1bl90ZXN0cyhzZWxmKToKICAgICAgICAjIEltcG9ydCBoZXJlLCBjYXVzZSBvdXRzaWRlIHRoZSBlZ2dzIGFyZW4ndCBsb2FkZWQKICAgICAgICBpbXBvcnQgdG94CiAgICAgICAgaW1wb3J0IHNobGV4CiAgICAgICAgaW1wb3J0IHN5cwogICAgICAgIGFyZ3MgPSBzZWxmLnRveF9hcmdzCiAgICAgICAgaWYgYXJnczoKICAgICAgICAgICAgYXJncyA9IHNobGV4LnNwbGl0KHNlbGYudG94X2FyZ3MpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgIyBSdW4gYWxsIHRlc3RzIGJ5IGRlZmF1bHQKICAgICAgICAgICAgYXJncyA9IFsnLWMnLCBqb2luKGRpcm5hbWUoX19maWxlX18pLCAndG94LmluaScpLCAndGVzdHMnXQogICAgICAgIGVycm5vID0gdG94LmNtZGxpbmUoYXJncz1hcmdzKQogICAgICAgIHN5cy5leGl0KGVycm5vKQoKCnNldHVwKAogICAgbmFtZT0ne3twcm9qZWN0LnBhY2thZ2V9fScsCiAgICB2ZXJzaW9uPV9nZXRfdmVyc2lvbigpLAogICAgdXJsPSd7e3Byb2plY3QudXJsfX0nLAogICAgZGVzY3JpcHRpb249J3t7cHJvamVjdC5kZXNjcmlwdGlvbn19JywKICAgIGxvbmdfZGVzY3JpcHRpb249b3Blbihqb2luKGRpcm5hbWUoX19maWxlX18pLCAnUkVBRE1FLm1kJykpLnJlYWQoKSwKICAgIGF1dGhvcj0ne3ttYW50YWluZXIubmFtZX19JywKICAgIG1haW50YWluZXI9J3t7bWFudGFpbmVyLm5hbWV9fScsCiAgICBtYWludGFpbmVyX2VtYWlsPSd7e21hbnRhaW5lci5lbWFpbH19JywKICAgIHBhY2thZ2VzPWZpbmRfcGFja2FnZXMoZXhjbHVkZT0oJ3Rlc3RzJywgJ3Rlc3RzLionKSksCiAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLAogICAgemlwX3NhZmU9RmFsc2UsCiAgICBjbGFzc2lmaWVycz1bCiAgICAgICAgJ0RldmVsb3BtZW50IFN0YXR1cyA6OiAzIC0gQWxwaGEnLAogICAgICAgICdJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDInLAogICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMnLAogICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy4zJywKICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNCcsCiAgICAgICAgJ1Byb2dyYW1t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cGkgaW1wb3J0IGVudgpmcm9tIGZhYnJpYy5hcGkgaW1wb3J0IHJ1bgpmcm9tIGZhYnJpYy5hcGkgaW1wb3J0IGV4ZWN1dGUKZnJvbSBmYWJyaWMuYXBpIGltcG9ydCBjZApmcm9tIGZhYnJpYy5hcGkgaW1wb3J0IGxvY2FsCmZyb20gZmFicmljLmFwaSBpbXBvcnQgcHV0CmZyb20gZmFicmljLmFwaSBpbXBvcnQgc3Vkbwpmcm9tIGZhYnJpYy5zdGF0ZSBpbXBvcnQgb3V0cHV0CmZyb20gbWFydmluX3B5dGhvbl90b29sYm94IGltcG9ydCBfX3ZlcnNpb25fXyBhcyBUT09MQk9YX1ZFUlNJT04KZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmNvbmZpZyBpbXBvcnQgQ29uZmlnCgpfaG9zdCA9IENvbmZpZy5nZXQoImhvc3QiLCBzZWN0aW9uPSJzc2hfZGVwbG95bWVudCIpLnNwbGl0KCIsIikKX3BvcnQgPSBDb25maWcuZ2V0KCJwb3J0Iiwgc2VjdGlvbj0ic3NoX2RlcGxveW1lbnQiKQpfdXNlciA9IENvbmZpZy5nZXQoInVzZXIiLCBzZWN0aW9uPSJzc2hfZGVwbG95bWVudCIpCgpmb3IgaCBpbiBfaG9zdDoKICAgIGVudi5ob3N0cy5hcHBlbmQoInt1c2VyfUB7aG9zdH06e3BvcnR9Ii5mb3JtYXQodXNlcj1fdXNlciwgaG9zdD1oLCBwb3J0PV9wb3J0KSkKCm91dHB1dFsiZXZlcnl0aGluZyJdID0gRmFsc2UKb3V0cHV0WyJydW5uaW5nIl0gPSBUcnVlCgplbnYucGFja2FnZSA9ICJ7e3Byb2plY3QucGFja2FnZX19IgplbnYubWFyZ2luX2VuZ2luZV9leGVjdXRvcl9wcmVmaXggPSAiL29wdC9tYXJ2aW4vZW5naW5lLWV4ZWN1dG9yIgplbnYubWFyZ2luX2VuZ2luZV9leGVjdXRvcl9qYXIgPSAibWFydmluLWVuZ2luZS1leGVjdXRvci1hc3NlbWJseS17dmVyc2lvbn0uamFyIi5mb3JtYXQodmVyc2lvbj1UT09MQk9YX1ZFUlNJT04pCmVudi5tYXJ2aW5fZW5naW5lX2V4ZWN1dG9yX3BhdGggPSBlbnYubWFyZ2luX2VuZ2luZV9leGVjdXRvcl9wcmVmaXggKyAiLyIgKyBlbnYubWFyZ2luX2VuZ2luZV9leGVjdXRvcl9qYXIKCgpkZWYgaW5zdGFsbF9vcmFjbGVfamRrKCk6CiAgICBzdWRvKCJhZGQtYXB0LXJlcG9zaXRvcnkgcHBhOndlYnVwZDh0ZWFtL2phdmEgLXkiKQogICAgc3VkbygiYXB0LWdldCAtcXEgdXBkYXRlIikKICAgIHJ1bigiZWNobyBkZWJjb25mIHNoYXJlZC9hY2NlcHRlZC1vcmFjbGUtbGljZW5zZS12MS0xIHNlbGVjdCB0cnVlIHwgc3VkbyBkZWJjb25mLXNldC1zZWxlY3Rpb25zIikKICAgIHJ1bigiZWNobyBkZWJjb25mIHNoYXJlZC9hY2NlcHRlZC1vcmFjbGUtbGljZW5zZS12MS0xIHNlZW4gdHJ1ZSB8IHN1ZG8gZGViY29uZi1zZXQtc2VsZWN0aW9ucyIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgb3JhY2xlLWphdmE4LWluc3RhbGxlciIpCgoKZGVmIGluc3RhbGxfdmlydHVhbGVudndyYXBwZXIoKToKICAgIHJ1bigicGlwIGluc3RhbGwgdmlydHVhbGVudndyYXBwZXIiKQogICAgcnVuKCJlY2hvICdleHBvcnQgV09SS09OX0hPTUU9JHtIT01FfS8udmlydHVhbGVudnMnID4+ICR7SE9NRX0vLnByb2ZpbGUiKQogICAgcnVuKCJlY2hvICdzb3VyY2UgL3Vzci9sb2NhbC9iaW4vdmlydHVhbGVudndyYXBwZXIuc2gnID4+ICR7SE9NRX0vLnByb2ZpbGUiKQoKCmRlZiBpbnN0YWxsX2FwYWNoZV9zcGFyaygpOgogICAgcnVuKCJjdXJsIGh0dHBzOi8vZDNrYmNxYTQ5bWliMTMuY2xvdWRmcm9udC5uZXQvc3BhcmstMi4xLjEtYmluLWhhZG9vcDIuNi50Z3ogLW8gL3RtcC9zcGFyay0yLjEuMS1iaW4taGFkb29wMi42LnRneiIpCiAgICBzdWRvKCJ0YXIgLXhmIC90bXAvc3BhcmstMi4xLjEtYmluLWhhZG9vcDIuNi50Z3ogLUMgL29wdC8iKQogICAgc3VkbygibG4gLXMgL29wdC9zcGFyay0yLjEuMS1iaW4taGFkb29wMi42IC9vcHQvc3BhcmsiKQogICAgcnVuKCJlY2hvICdleHBvcnQgU1BBUktfSE9NRT0vb3B0L3NwYXJrJyA+PiAke0hPTUV9Ly5wcm9maWxlIikKCgpkZWYgaW5zdGFsbF9yZXF1aXJlZF9wYWNrYWdlcygpOgogICAgc3VkbygiYXB0LWdldCB1cGRhdGUgLXkiKQogICAgc3VkbygiYXB0LWdldCBpbnN0YWxsIC15IGdpdCIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgd2dldCIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgcHl0aG9uMi43LWRldiIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgcHl0aG9uLXBpcCIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgaXB5dGhvbiIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgbGliZmZpLWRldiIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgbGlic3NsLWRldiIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgbGlieG1sMi1kZXYiKQogICAgc3VkbygiYXB0LWdldCBpbnN0YWxsIC15IGxpYnhzbHQxLWRldiIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgbGlicG5nMTItZGV2IikKICAgIHN1ZG8oImFwdC1nZXQgaW5zdGFsbCAteSBsaWJmcmVldHlwZTYtZGV2IikKICAgIHN1ZG8oImFwdC1nZXQgaW5zdGFsbCAteSBweXRob24tdGsiKQogICAgc3VkbygiYXB0LWdldCBpbnN0YWxsIC15IGxpYnNhc2wyLWRldiIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgcHl0aG9uLXBpcCIpCiAgICBzdWRvKCJhcHQtZ2V0IGluc3RhbGwgLXkgZ3JhcGh2aXoiKQogICAgc3VkbygicGlwIGluc3RhbGwgLS11cGdyYWRlIHBpcCIpCgoKZGVmIGluc3RhbGxfbWFydmluX2VuZ2luZV9leGVjdXRvcigpOgogICAgc3VkbygibWtkaXIgLXAge3ByZWZpeH0iLmZvcm1hdChwcmVmaXg9ZW52Lm1hcmdpbl9lbmdpbmVfZXhlY3V0b3JfcHJlZml4KSkKICAgIHdpdGggY2QoIntwcmVmaXh9Ii5mb3JtYXQocHJlZml4PWVudi5tYXJnaW5fZW5naW5lX2V4ZWN1dG9yX3ByZWZpeCkpOgogICAgICAgIHN1ZG8oIndnZXQgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL21hcnZpbi1lbmdpbmUtZXhlY3V0b3Ive2phcn0iLmZvcm1hdChqYXI9ZW52Lm1hcmdpbl9lbmdpbmVfZXhlY3V0b3JfamFyKSkKCgpkZWYgY3JlYXRlX21hcnZpbl9lbmdpbmVzX3ByZWZpeCgpOgogICAgc3VkbygibWtkaXIgLXAgL29wdC9tYXJ2aW4vZW5naW5lcyIpCiAgICBzdWRvKCJjaG93biB7dXNlcn06e3VzZXJ9IC9vcHQvbWFydmluL2VuZ2luZXMiLmZvcm1hdCh1c2VyPWVudi51c2VyKSkKICAgIHN1ZG8oIm1rZGlyIC1wIC92YXIvbG9nL21hcnZpbi9lbmdpbmVzIikKICAgIHN1ZG8oImNob3duIHt1c2VyfTp7dXNlcn0gL3Zhci9sb2cvbWFydmluL2VuZ2luZXMiLmZvcm1hdCh1c2VyPWVudi51c2VyKSkKICAgIHN1ZG8oIm1rZGlyIC1wIC92YXIvcnVuL21hcnZpbi9lbmdpbmVzIikKICAgIHN1ZG8oImNob3duIHt1c2VyfTp7dXNlcn0gL3Zhci9ydW4vbWFydmluL2VuZ2luZXMiLmZvcm1hdCh1c2VyPWVudi51c2VyKSkKCgpkZWYgY29uZmlndXJlX21hcnZpbl9lbnZpcm9ubWVudCgpOgogICAgcnVuKCJlY2hvICdleHBvcnQgTUFSVklOX0hPTUU9JHtIT01FfS9tYXJ2aW4nID4+ICR7SE9NRX0vLnByb2ZpbGUiKQogICAgcnVuKCJlY2hvICdleHBvcnQgTUFSVklOX0RBVEFfUEFUSD0ke01BUlZJTl9IT01FfS9kYXRhJyA+PiAke0hPTUV9Ly5wcm9maWxlIikKICAgIHJ1bigibWtkaXIgLXAgJHtNQVJWSU5fSE9NRX0iKQogICAgcnVuKCJta2RpciAtcCAke01BUlZJTl9EQVRBX1BBVEh9IikKCgpkZWYgcHJvdmlzaW9uKCk6CiAgICBleGVjdXRlKGluc3RhbGxfcmVxdWlyZWRfcGFja2FnZXMpCiAgICBleGVjdXRlKGluc3RhbGxfdmlydHVhbGVudndyYXBwZXIpCiAgICBleGVjdXRlKGluc3RhbGxfb3JhY2xlX2pkaykKICAgIGV4ZWN1dGUoaW5zdGFsbF9hcGFjaGVfc3BhcmspCiAgICBleGVjdXRlKGluc3RhbGxfbWFydmluX2VuZ2luZV9leGVjdXRvcikKICAgIGV4ZWN1dGUoY3JlYXRlX21hcnZpbl9lbmdpbmVzX3ByZWZpeCkKICAgIGV4ZWN1dGUoY29uZmlndXJlX21hcnZpbl9lbnZpcm9ubWVudCkKCgpkZWYgcGFja2FnZSh2ZXJzaW9uKToKICAgIHBhY2thZ2UgPSBlbnYucGFja2FnZQogICAgbG9jYWwoIm1rZGlyIC1wIC5wYWNrYWdlcyIpCiAgICBsb2NhbCgidGFyIGN6dmYgLnBhY2thZ2VzL3twYWNrYWdlfS17dmVyc2lvbn0udGFyLmd6IC0tZXhjbHVkZT0nLnBhY2thZ2VzJyAuIi5mb3JtYXQoCiAgICAgICAgICBwYWNrYWdlPXBhY2thZ2UsIHZlcnNpb249dmVyc2lvbikpCgoKZGVmIGRlcGxveSh2ZXJzaW9uLCBza2lwX2NsZWFuPUZhbHNlKToKICAgIGV4ZWN1dGUoZW5naW5lX3N0b3ApCiAgICBwYWNrYWdlID0gZW52LnBhY2thZ2UKICAgIHB1dChsb2NhbF9wYXRoPSIucGFja2FnZXMve3BhY2thZ2V9LXt2ZXJzaW9ufS50YXIuZ3oiLmZvcm1hdCgKICAgICAgICBwYWNrYWdlPXBhY2thZ2UsIHZlcnNpb249dmVyc2lvbiksIHJlbW90ZV9wYXRoPSIvdG1wLyIpCiAgICBydW4oIm1rZGlyIC1wIC9vcHQvbWFydmluL2VuZ2luZXMve3BhY2thZ2V9L3t2ZXJzaW9ufSIuZm9ybWF0KAogICAgICAgIHBhY2thZ2U9cGFja2FnZSwgdmVyc2lvbj12ZXJzaW9uKSkKICAgIHdpdGggY2QoIi9vcHQvbWFydmluL2VuZ2luZXMve3BhY2thZ2V9L3t2ZXJzaW9ufSIuZm9ybWF0KAogICAgICAgICAgICBwYWNrYWdlPXBhY2thZ2UsIHZlcnNpb249dmVyc2lvbikpOgogICAgICAgIHJ1bigidGFyIHh6dmYgL3RtcC97cGFja2FnZX0te3ZlcnNpb259LnRhci5neiIuZm9ybWF0KAogICAgICAgICAgICBwYWNrYWdlPXBhY2thZ2UsIHZlcnNpb249dmVyc2lvbikpCiAgICB3aXRoIGNkKCIvb3B0L21hcnZpbi9lbmdpbmVzL3twYWNrYWdlfSIuZm9ybWF0KHBhY2thZ2U9cGFja2FnZSkpOgogICAgICAgIHN5bWxpbmtfZXhpc3RzID0gcnVuKCJzdGF0IGN1cnJlbnQiLCBxdWlldD1UcnVlKS5zdWNjZWVkZWQKICAgICAgICBpZiAoc3ltbGlua19leGlzdHMpOgogICAgICAgICAgICBydW4oInJtIGN1cnJlbnQiKQogICAgICAgIHJ1bigibG4gLXMge3ZlcnNpb259IGN1cnJlbnQiLmZvcm1hdCh2ZXJzaW9uPXZlcnNpb24pKQogICAgd2l0aCBjZCgiL29wdC9tYXJ2aW4vZW5naW5lcy97cGFja2FnZX0vY3VycmVudCIuZm9ybWF0KHBhY2thZ2U9cGFja2FnZSkpOgogICAgICAgIHJ1bigibWt2aXJ0dWFsZW52IHtwYWNrYWdlfV9lbnYiLmZvcm1hdChwYWNrYWdlPXBhY2thZ2UpKQogICAgICAgIHJ1bigic2V0dmlydHVhbGVudnByb2plY3QiKQogICAgICAgIGlmIHNraXBfY2xlYW46CiAgICAgICAgICAgIHJ1bigid29ya29uIHtwYWNrYWdlfV9lbnYgJiYgbWFrZSBtYXJ2aW4iLmZvcm1hdCgKICAgICAgICAgICAgICAgIHBhY2thZ2U9cGFja2FnZSkpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcnVuKCJ3b3Jrb24ge3BhY2thZ2V9X2VudiAmJiBtYWtlIGNsZWFuICYmIG1ha2UgbWFydmluIi5mb3JtYXQoCiAgICAgICAgICAgICAgICBwYWNrYWdlPXBhY2thZ2UpKQogICAgZXhlY3V0ZShlbmdpbmVfc3RhcnQpCgoKZGVmIGVuZ2luZV9zdGFydChodHRwX2hvc3QsIGh0dHBfcG9ydCk6CiAgICBwYWNrYWdlID0gZW52LnBhY2thZ2UKCiAgICBjb21tYW5kID0gKAogICAgICAgICJ3b3Jrb24ge3BhY2thZ2V9X2VudiAmJiIKICAgICAgICAiIChtYXJ2aW4gZW5naW5lLWh0dHBzZXJ2ZXIiCiAgICAgICAgIiAtaCB7aHR0cF9ob3N0fSIKICAgICAgICAiIC1wIHtodHRwX3BvcnR9IgogICAgICAgICIgLWUge2V4ZWN1dG9yfSIKICAgICAgICAiIDE+IC92YXIvbG9nL21hcnZpbi9lbmdpbmVzL3twYWNrYWdlfS5vdXQiCiAgICAgICAgIiAyPiAvdmFyL2xvZy9tYXJ2aW4vZW5naW5lcy97cGFja2FnZX0uZXJyIgogICAgICAgICIgJiBlY2hvICQhID4gL3Zhci9ydW4vbWFydmluL2VuZ2luZXMve3BhY2thZ2V9LnBpZCkiCiAgICApLmZvcm1hdCgKICAgICAgICBwYWNrYWdlPXBhY2thZ2UsCiAgICAgICAgaHR0cF9ob3N0PWh0dHBfaG9zdCwKICAgICAgICBodHRwX3BvcnQ9aHR0cF9wb3J0LAogICAgICAgIGV4ZWN1dG9yPWVudi5tYXJ2aW5fZW5naW5lX2V4ZWN1dG9yX3BhdGgKICAgICkKCiAgICB3aXRoIGNkKCIvb3B0L21hcnZpbi9lbmdpbmVzL3twYWNrYWdlfS9jdXJyZW50Ii5mb3JtYXQocGFja2FnZT1wYWNrYWdlKSk6CiAgICAgICAgcnVuKGNvbW1hbmQsIHB0eT1GYWxzZSkKCgpkZWYgZW5naW5lX3N0b3AoKToKICAgIHBhY2thZ2UgPSBlbnYucGFja2FnZQoKICAgIHBpZF9maWxlX2V4aXN0cyA9IHJ1bigiY2F0IC92YXIvcnVuL21hcnZpbi9lbmdpbmVzL3twYWNrYWdlfS5waWQiLmZvcm1hdCgKICAgICAgICBwYWNrYWdlPXBhY2thZ2UpLCBxdWlldD1UcnVlKQogICAgaWYgcGlkX2ZpbGVfZXhpc3RzLnN1Y2NlZWRlZDoKICAgICAgICB3aXRoIGNkKCIvb3B0L21hcnZpbi9lbmdpbmVzL3twYWNrYWdlfS9jdXJyZW50Ii5mb3JtYXQocGFja2FnZT1wYWNrYWdlKSk6CiAgICAgICAgICAgIGNoaWxkcmVuX3BpZHMgPSBydW4oInBzIC0tcHBpZCAkKGNhdCAvdmFyL3J1bi9tYXJ2aW4vZW5naW5lcy97cGFja2FnZX0ucGlkKSAtbyBwaWQgLS1uby1oZWFkZXJzIHx4YXJncyBlY2hvIi5mb3JtYXQoCiAgICAgICAgICAgICAgICBwYWNrYWdlPXBhY2thZ2UpKQogICAgICAgICAgICBydW4oImtpbGwgJChjYXQgL3Zhci9ydW4vbWFydmluL2VuZ2luZXMve3BhY2thZ2V9LnBpZCkge2NoaWxkcmVuX3BpZHN9Ii5mb3JtYXQoCiAgICAgICAgICAgICAgICBwYWNrYWdlPXBhY2thZ2UsIGNoaWxkcmVuX3BpZHM9Y2hpbGRyZW5fcGlkcykpCiAgICAgICAgICAgIHJ1bigicm0gL3Zhci9ydW4vbWFydmluL2VuZ2luZXMve3BhY2thZ2V9LnBpZCIuZm9ybWF0KHBhY2thZ2U9cGFja2FnZSkpCgoKZGVmIGVuZ2luZV9zdGF0dXMoKToKICAgIHBhY2thZ2UgPSBlbnYucGFja2FnZQogICAgcGlkX2ZpbGVfZXhpc3RzID0gcnVuKCJjYXQgL3Zhci9ydW4vbWFydmluL2VuZ2luZXMve3BhY2thZ2V9LnBpZCIuZm9ybWF0KAogICAgICAgIHBhY2thZ2U9cGFja2FnZSksIHF1aWV0PVRydWUpCiAgICBpZiBwaWRfZmlsZV9leGlzdHMuc3VjY2VlZGVkOgogICAgICAgIGlzX3J1bm5pbmcgPSBydW4oInBzICQoY2F0IC92YXIvcnVuL21hcnZpbi9lbmdpbmVzL3twYWNrYWdlfS5waWQpIi5mb3JtYXQocGFja2FnZT1wYWNrYWdlKSwgcXVpZXQ9VHJ1ZSkKICAgICAgICBpZiBpc19ydW5uaW5nLnN1Y2NlZWRlZDoKICAgICAgICAgICAgcHJpbnQgIllvdXIgZW5naW5lIGlzIHJ1bm5pbmcgOikiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgIllvdXIgZW5naW5lIGlzIG5vdCBydW5uaW5nIDooIgogICAgZWxzZToKICAgICAgICBwcmludCAiWW91ciBlbmdpbmUgaXMgbm90IHJ1bm5pbmcgOigiCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9lbmdpbmUubWVzc2FnZXMAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDAwNTIgMTM0NjMzMzM0NjIgMDM0MjY3ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFt7CgkibXNnMSI6ICJIZWxsbyBmcm9tIG1hcnZpbiBlbmdpbmUhIgp9XQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvbm90ZWJvb2tzL3NhbXBsZS5pcHluYgAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDAxNDQ3IDEzNDYzMzMzNDYyIDAzNTYzMQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7CiAiY2VsbHMiOiBbCiAgewogICAiY2VsbF90eXBlIjogIm1hcmtkb3duIiwKICAgIm1ldGFkYXRhIjoge30sCiAgICJzb3VyY2UiOiBbCiAgICAiIyBEb2N1bWVudGF0aW9uIgogICBdCiAgfSwKICB7CiAgICJjZWxsX3R5cGUiOiAibWFya2Rvd24iLAogICAibWV0YWRhdGEiOiB7fSwKICAgInNvdXJjZSI6IFsKICAgICIjIFNhbXBsZSIKICAgXQogIH0sCiAgewogICAiY2VsbF90eXBlIjogImNvZGUiLAogICAiZXhlY3V0aW9uX2NvdW50IjogbnVsbCwKICAgIm1ldGFkYXRhIjogewogICAgImNvbGxhcHNlZCI6IHRydWUKICAgfSwKICAgIm91dHB1dHMiOiBbXSwKICAgInNvdXJjZSI6IFsKICAgICJpbXBvcnQge3twcm9qZWN0LnBhY2thZ2V9fSIKICAgXQogIH0KIF0sCiAibWV0YWRhdGEiOiB7CiAgImtlcm5lbHNwZWMiOiB7CiAgICJkaXNwbGF5X25hbWUiOiAiUHl0aG9uIDIiLAogICAibGFuZ3VhZ2UiOiAicHl0aG9uIiwKICAgIm5hbWUiOiAicHl0aG9uMiIKICB9LAogICJsYW5ndWFnZV9pbmZvIjogewogICAiY29kZW1pcnJvcl9tb2RlIjogewogICAgIm5hbWUiOiAiaXB5dGhvbiIsCiAgICAidmVyc2lvbiI6IDIKICAgfSwKICAgImZpbGVfZXh0ZW5zaW9uIjogIi5weSIsCiAgICJtaW1ldHlwZSI6ICJ0ZXh0L3gtcHl0aG9uIiwKICAgIm5hbWUiOiAicHl0aG9uIiwKICAgIm5iY29udmVydF9leHBvcnRlciI6ICJweXRob24iLAogICAicHlnbWVudHNfbGV4ZXIiOiAiaXB5dGhvbjIiLAogICAidmVyc2lvbiI6ICIyLjcuNSIKICB9CiB9LAogIm5iZm9ybWF0IjogNCwKICJuYmZvcm1hdF9taW5vciI6IDAKfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvdGVzdHMvZGF0YV9oYW5kbGVyLwAAAAAAAAAAADAwMDc1NSAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDAwMDAwIDEzNDYzMzMzNDYyIDAzNTA0NAAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS90ZXN0cy9jb25mdGVzdC5weQAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDAyMzcgMTM0NjMzMzM0NjIgMDM0NjM3ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKaW1wb3J0IG9zCmltcG9ydCBweXRlc3QKCm9zLmVudmlyb25bJ1RFU1RJTkcnXSA9ICdUcnVlJwoKCkBweXRlc3QuZml4dHVyZQpkZWYgbW9ja2VkX3BhcmFtcygpOgogICAgcmV0dXJuIHsncGFyYW1zJzogMX0KCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvdGVzdHMvdHJhaW5pbmcvAAAAAAAAAAAAAAAAADAwMDc1NSAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDAwMDAwIDEzNDYzMzMzNDYyIDAzNDI1MQAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS90ZXN0cy9wcmVkaWN0aW9uLwAAAAAAAAAAAAAAMDAwNzU1IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDAwMDAgMTM0NjMzMzM0NjIgMDM0NTc2ACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Rlc3RzL3ByZWRpY3Rpb24vdGVzdF9mZWVkYmFjay5weQAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwMDU0NCAxMzQ2MzMzMzQ2MiAwMzc2NTcAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAHB5dGhvbi10b29sYm94AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04Cgp0cnk6CiAgICBpbXBvcnQgbW9jawoKZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jawoKZnJvbSB7e3Byb2plY3QucGFja2FnZX19LnByZWRpY3Rpb24gaW1wb3J0IEZlZWRiYWNrCgoKY2xhc3MgVGVzdEZlZWRiYWNrOgogICAgZGVmIHRlc3RfZXhlY3V0ZShzZWxmLCBtb2NrZWRfcGFyYW1zKToKICAgICAgICBmYiA9IEZlZWRiYWNrKCkKICAgICAgICBmYi5leGVjdXRlKGlucHV0X21lc3NhZ2U9ImZha2UgbWVzc2FnZSIsIHBhcmFtcz1tb2NrZWRfcGFyYW1zKQogICAgICAgIGFzc2VydCBub3QgZmIuX3BhcmFtcwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Rlc3RzL3ByZWRpY3Rpb24vdGVzdF9wcmVkaWN0aW9uX3ByZXBhcmF0b3IucHkAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDA2MTAgMTM0NjMzMzM0NjIgMDQyNTI0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIABweXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKdHJ5OgogICAgaW1wb3J0IG1vY2sKCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGltcG9ydCB1bml0dGVzdC5tb2NrIGFzIG1vY2sKCmZyb20ge3twcm9qZWN0LnBhY2thZ2V9fS5wcmVkaWN0aW9uIGltcG9ydCBQcmVkaWN0aW9uUHJlcGFyYXRvcgoKCmNsYXNzIFRlc3RQcmVkaWN0aW9uUHJlcGFyYXRvcjoKICAgIGRlZiB0ZXN0X2V4ZWN1dGUoc2VsZiwgbW9ja2VkX3BhcmFtcyk6CiAgICAgICAgYWMgPSBQcmVkaWN0aW9uUHJlcGFyYXRvcigpCiAgICAgICAgYWMuZXhlY3V0ZShpbnB1dF9tZXNzYWdlPSJmYWtlIG1lc3NhZ2UiLCBwYXJhbXM9bW9ja2VkX3BhcmFtcykKICAgICAgICBhc3NlcnQgbm90IGFjLl9wYXJhbXMKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvdGVzdHMvcHJlZGljdGlvbi90ZXN0X3ByZWRpY3Rvci5weQAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDAwNTQ3IDEzNDYzMzMzNDYyIDA0MDEzMQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAcHl0aG9uLXRvb2xib3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS91c3IvYmluL2VudiBweXRob24KIyBjb2Rpbmc9dXRmLTgKCnRyeToKICAgIGltcG9ydCBtb2NrCgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBpbXBvcnQgdW5pdHRlc3QubW9jayBhcyBtb2NrCgpmcm9tIHt7cHJvamVjdC5wYWNrYWdlfX0ucHJlZGljdGlvbiBpbXBvcnQgUHJlZGljdG9yCgoKY2xhc3MgVGVzdFByZWRpY3RvcjoKICAgIGRlZiB0ZXN0X2V4ZWN1dGUoc2VsZiwgbW9ja2VkX3BhcmFtcyk6CiAgICAgICAgYWMgPSBQcmVkaWN0b3IoKQogICAgICAgIGFjLmV4ZWN1dGUoaW5wdXRfbWVzc2FnZT0iZmFrZSBtZXNzYWdlIiwgcGFyYW1zPW1vY2tlZF9wYXJhbXMpCiAgICAgICAgYXNzZXJ0IG5vdCBhYy5fcGFyYW1zCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Rlc3RzL3RyYWluaW5nL3Rlc3RfbWV0cmljc19ldmFsdWF0b3IucHkAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwMDUzNCAxMzQ2MzMzMzQ2MiAwNDEzMzUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAHB5dGhvbi10b29sYm94AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04Cgp0cnk6CiAgICBpbXBvcnQgbW9jawoKZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jawoKZnJvbSB7e3Byb2plY3QucGFja2FnZX19LnRyYWluaW5nIGltcG9ydCBNZXRyaWNzRXZhbHVhdG9yCgoKY2xhc3MgVGVzdE1ldHJpY3NFdmFsdWF0b3I6CiAgICBkZWYgdGVzdF9leGVjdXRlKHNlbGYsIG1vY2tlZF9wYXJhbXMpOgogICAgICAgIGFjID0gTWV0cmljc0V2YWx1YXRvcigpCiAgICAgICAgYWMuZXhlY3V0ZShwYXJhbXM9bW9ja2VkX3BhcmFtcykKICAgICAgICBhc3NlcnQgbm90IGFjLl9wYXJhbXMKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS90ZXN0cy90cmFpbmluZy90ZXN0X3RyYWluZXIucHkAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDA1MDIgMTM0NjMzMzM0NjIgMDM3MjQ0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIABweXRob24tdG9vbGJveAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKdHJ5OgogICAgaW1wb3J0IG1vY2sKCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGltcG9ydCB1bml0dGVzdC5tb2NrIGFzIG1vY2sKCmZyb20ge3twcm9qZWN0LnBhY2thZ2V9fS50cmFpbmluZyBpbXBvcnQgVHJhaW5lcgoKCmNsYXNzIFRlc3RUcmFpbmVyOgogICAgZGVmIHRlc3RfZXhlY3V0ZShzZWxmLCBtb2NrZWRfcGFyYW1zKToKICAgICAgICBhYyA9IFRyYWluZXIoKQogICAgICAgIGFjLmV4ZWN1dGUocGFyYW1zPW1vY2tlZF9wYXJhbXMpCiAgICAgICAgYXNzZXJ0IG5vdCBhYy5fcGFyYW1zCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS90ZXN0cy9kYXRhX2hhbmRsZXIvdGVzdF9hY3F1aXNpdG9yX2FuZF9jbGVhbmVyLnB5AAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDAwNTU1IDEzNDYzMzMzNDYyIDA0MzEwMQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAcHl0aG9uLXRvb2xib3gvbWFydmluX3B5dGhvbl90b29sYm94AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS91c3IvYmluL2VudiBweXRob24KIyBjb2Rpbmc9dXRmLTgKCnRyeToKICAgIGltcG9ydCBtb2NrCgpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBpbXBvcnQgdW5pdHRlc3QubW9jayBhcyBtb2NrCgpmcm9tIHt7cHJvamVjdC5wYWNrYWdlfX0uZGF0YV9oYW5kbGVyIGltcG9ydCBBY3F1aXNpdG9yQW5kQ2xlYW5lcgoKCmNsYXNzIFRlc3RBY3F1aXNpdG9yQW5kQ2xlYW5lcjoKICAgIGRlZiB0ZXN0X2V4ZWN1dGUoc2VsZiwgbW9ja2VkX3BhcmFtcyk6CiAgICAgICAgYWMgPSBBY3F1aXNpdG9yQW5kQ2xlYW5lcigpCiAgICAgICAgYWMuZXhlY3V0ZShwYXJhbXM9bW9ja2VkX3BhcmFtcykKICAgICAgICBhc3NlcnQgbm90IGFjLl9wYXJhbXMKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvdGVzdHMvZGF0YV9oYW5kbGVyL3Rlc3RfdHJhaW5pbmdfcHJlcGFyYXRvci5weQAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwMDU0NiAxMzQ2MzMzMzQ2MiAwNDI0NTUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04Cgp0cnk6CiAgICBpbXBvcnQgbW9jawoKZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jawoKZnJvbSB7e3Byb2plY3QucGFja2FnZX19LmRhdGFfaGFuZGxlciBpbXBvcnQgVHJhaW5pbmdQcmVwYXJhdG9yCgoKY2xhc3MgVGVzdFRyYWluaW5nUHJlcGFyYXRvcjoKICAgIGRlZiB0ZXN0X2V4ZWN1dGUoc2VsZiwgbW9ja2VkX3BhcmFtcyk6CiAgICAgICAgYWMgPSBUcmFpbmluZ1ByZXBhcmF0b3IoKQogICAgICAgIGFjLmV4ZWN1dGUocGFyYW1zPW1vY2tlZF9wYXJhbXMpCiAgICAgICAgYXNzZXJ0IG5vdCBhYy5fcGFyYW1zCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9wcm9qZWN0X3BhY2thZ2UvZGF0YV9oYW5kbGVyLwAAAAAAAAAAAAAAAAAAMDAwNzU1IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDAwMDAgMTM0NjMzMzM0NjIgMDM2NzQ0ACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIABweXRob24tdG9vbGJveAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L21hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Byb2plY3RfcGFja2FnZS9fbG9nZ2luZy5weQAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwNDQ2NiAxMzQ2MzMzMzQ2MiAwMzY1NjYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgoiIiJDdXN0b20gbG9nZ2luZyBtb2R1bGUuCgpUaGlzIG1vZHVsZSBpcyByZXNwb25zaWJsZSB0byBtYW5hZ2UgbG9nIG1lc3NhZ2VzIGFuZCBsb2cgZmlsZS4KIiIiCgppbXBvcnQgc3lzCmltcG9ydCBvcwppbXBvcnQgb3MucGF0aAppbXBvcnQgbG9nZ2luZwoKREVGQVVMVF9MT0dfTEVWRUwgPSBsb2dnaW5nLldBUk5JTkcKREVGQVVMVF9MT0dfRElSID0gJy90bXAnCgoKY2xhc3MgTG9nZ2VyKGxvZ2dpbmcuZ2V0TG9nZ2VyQ2xhc3MoKSk6CiAgICAiIiJDdXN0b20gbG9nZ2VyIGNsYXNzLgoKICAgIFVzZSB0aGlzIGNsYXNzIHRvIGN1c3RvbWl6ZSB0aGUgbG9nZ2VyIGJlaGF2aW9yIG9yIHRvIGludGVyY2VwdCB0aGUKICAgIG1lc3NhZ2VzLgogICAgIiIiCiAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICMgQWRkIGhlcmUgY29kZSB0byBpbnRlcmNlcHQgdGhlIHByb2plY3QgZXJyb3IgbWVzc2FnZXMKICAgICAgICBzdXBlcihMb2dnZXIsIHNlbGYpLmVycm9yKG1zZywgKmFyZ3MsICoqa3dhcmdzKQoKICAgIGRlZiBjcml0aWNhbChzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIyBBZGQgaGVyZSBjb2RlIHRvIGludGVyY2VwdCB0aGUgcHJvamVjdCBjcml0aWNhbCBtZXNzYWdlcwogICAgICAgIHN1cGVyKExvZ2dlciwgc2VsZikuY3JpdGljYWwobXNnLCAqYXJncywgKiprd2FyZ3MpCgoKbG9nZ2luZy5zZXRMb2dnZXJDbGFzcyhMb2dnZXIpCgoKZGVmIGdldF9sb2dnZXIobmFtZSwgbmFtZXNwYWNlPSd7e3Byb2plY3QucGFja2FnZX19JywKICAgICAgICAgICAgICAgbG9nX2xldmVsPURFRkFVTFRfTE9HX0xFVkVMLCBsb2dfZGlyPURFRkFVTFRfTE9HX0RJUik6CiAgICAiIiJCdWlsZCBhIGxvZ2dlciB0aGF0IG91dHB1dHMgdG8gYSBmaWxlIGFuZCB0byB0aGUgY29uc29sZSwiIiIKCiAgICBsb2dfbGV2ZWwgPSAob3MuZ2V0ZW52KCd7fV9MT0dfTEVWRUwnLmZvcm1hdChuYW1lc3BhY2UudXBwZXIoKSkpIG9yCiAgICAgICAgICAgICAgICAgb3MuZ2V0ZW52KCdMT0dfTEVWRUwnLCBsb2dfbGV2ZWwpKQogICAgbG9nX2RpciA9IChvcy5nZXRlbnYoJ3t9X0xPR19ESVInLmZvcm1hdChuYW1lc3BhY2UudXBwZXIoKSkpIG9yCiAgICAgICAgICAgICAgIG9zLmdldGVudignTE9HX0RJUicsIGxvZ19kaXIpKQoKICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCd7fS57fScuZm9ybWF0KG5hbWVzcGFjZSwgbmFtZSkpCiAgICBsb2dnZXIuc2V0TGV2ZWwobG9nX2xldmVsKQoKICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKAogICAgICAgICclKGFzY3RpbWUpcyAtICUobmFtZSlzIC0gJShsZXZlbG5hbWUpcyAtICUobWVzc2FnZSlzJykKCiAgICAjIENyZWF0ZSBhIGNvbnNvbGUgc3RyZWFtIGhhbmRsZXIKICAgIGNvbnNvbGVfaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCiAgICBjb25zb2xlX2hhbmRsZXIuc2V0TGV2ZWwobG9nX2xldmVsKQogICAgY29uc29sZV9oYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCiAgICBsb2dnZXIuYWRkSGFuZGxlcihjb25zb2xlX2hhbmRsZXIpCgogICAgdHJ5OgogICAgICAgIGlmIGxvZ19kaXI6CiAgICAgICAgICAgIGxvZ19wYXRoID0gb3MucGF0aC5hYnNwYXRoKGxvZ19kaXIpCiAgICAgICAgICAgIGxvZ19maWxlbmFtZSA9ICd7bmFtZX0ue3BpZH0ubG9nJy5mb3JtYXQoCiAgICAgICAgICAgICAgICBuYW1lPW5hbWVzcGFjZSwgcGlkPW9zLmdldHBpZCgpKQoKICAgICAgICAgICAgZmlsZV9wYXRoID0gc3RyKG9zLnBhdGguam9pbihsb2dfcGF0aCwgbG9nX2ZpbGVuYW1lKSkKCiAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2dfcGF0aCk6CiAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhsb2dfcGF0aCwgbW9kZT03NzQpCgogICAgICAgICAgICAjIENyZWF0ZSBhIGZpbGUgaGFuZGxlcgogICAgICAgICAgICBmaWxlX2hhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGZpbGVfcGF0aCkKICAgICAgICAgICAgZmlsZV9oYW5kbGVyLnNldExldmVsKGxvZ19sZXZlbCkKICAgICAgICAgICAgZmlsZV9oYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCiAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGZpbGVfaGFuZGxlcikKICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgbG9nZ2VyLmVycm9yKCdDb3VsZCBub3QgY3JlYXRlIGxvZyBmaWxlIHtmaWxlfToge2Vycm9yfScuZm9ybWF0KAogICAgICAgICAgICBmaWxlPWZpbGVfcGF0aCwgZXJyb3I9ZS5zdHJlcnJvcikpCgogICAgcmV0dXJuIGxvZ2dlcgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIABweXRob24tdG9vbGJveAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIiIiUHJlZGljdG9yIGVuZ2luZSBhY3Rpb24uCgpVc2UgdGhpcyBtb2R1bGUgdG8gYWRkIHRoZSBwcm9qZWN0IG1haW4gY29kZS4KIiIiCgpmcm9tIC4uX2NvbXBhdGliaWxpdHkgaW1wb3J0IHNpeApmcm9tIC4uX2xvZ2dpbmcgaW1wb3J0IGdldF9sb2dnZXIKCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94LmVuZ2luZV9iYXNlIGltcG9ydCBFbmdpbmVCYXNlUHJlZGljdGlvbgoKX19hbGxfXyA9IFsnUHJlZGljdG9yJ10KCgpsb2dnZXIgPSBnZXRfbG9nZ2VyKCdwcmVkaWN0b3InKQoKCmNsYXNzIFByZWRpY3RvcihFbmdpbmVCYXNlUHJlZGljdGlvbik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICAgICBzdXBlcihQcmVkaWN0b3IsIHNlbGYpLl9faW5pdF9fKCoqa3dhcmdzKQoKICAgIGRlZiBleGVjdXRlKHNlbGYsIGlucHV0X21lc3NhZ2UsIHBhcmFtcywgKiprd2FyZ3MpOgogICAgICAgICIiIgogICAgICAgIFJldHVybiB0aGUgcHJlZGljdGVkIHZhbHVlIGluIGEganNvbiBwYXJzYWJsZSBvYmplY3QgZm9ybWF0LgogICAgICAgIFVzZSB0aGUgc2VsZi5tb2RlbCBhbmQgc2VsZi5tZXRyaWNzIG9iamVjdHMgaWYgbmVjZXNzYXJ5LgogICAgICAgICIiIgogICAgICAgIHJldHVybiB7InByZWRpY3RlZF92YWx1ZSI6ICJtb2NrZWRfcmV0dXJuIn0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9wcm9qZWN0X3BhY2thZ2UvcHJlZGljdGlvbi9mZWVkYmFjay5weQAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDI0MDUgMTM0NjMzMzM0NjIgMDQwNTc1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIABweXRob24tdG9vbGJveAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIyBDb3B5cmlnaHQgWzIwMTddIFtCMlcgRGlnaXRhbF0KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIiIiRmVlZGJhY2sgZW5naW5lIGFjdGlvbi4KClVzZSB0aGlzIG1vZHVsZSB0byBhZGQgdGhlIHByb2plY3QgbWFpbiBjb2RlLgoiIiIKCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgc2l4CmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guZW5naW5lX2Jhc2UgaW1wb3J0IEVuZ2luZUJhc2VQcmVkaWN0aW9uCgpfX2FsbF9fID0gWydGZWVkYmFjayddCgoKbG9nZ2VyID0gZ2V0X2xvZ2dlcignZmVlZGJhY2snKQoKCmNsYXNzIEZlZWRiYWNrKEVuZ2luZUJhc2VQcmVkaWN0aW9uKToKCiAgICBkZWYgX19pbml0X18oc2VsZiwgKipr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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIABweXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIiIiUHJlZGljdGlvblByZXBhcmF0b3IgZW5naW5lIGFjdGlvbi4KClVzZSB0aGlzIG1vZHVsZSB0byBhZGQgdGhlIHByb2plY3QgbWFpbiBjb2RlLgoiIiIKCmZyb20gLi5fY29tcGF0aWJpbGl0eSBpbXBvcnQgc2l4CmZyb20gLi5fbG9nZ2luZyBpbXBvcnQgZ2V0X2xvZ2dlcgoKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guZW5naW5lX2Jhc2UgaW1wb3J0IEVuZ2luZUJhc2VQcmVkaWN0aW9uCgpfX2FsbF9fID0gWydQcmVkaWN0aW9uUHJlcGFyYXRvciddCgoKbG9nZ2VyID0gZ2V0X2xvZ2dlcigncHJlZGljdGlvbl9wcmVwYXJhdG9yJykKCgpjbGFzcyBQcmVkaWN0aW9uUHJlcGFyYXRvcihFbmdpbmVCYXNlUHJlZGljdGlvbik6CgogICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICAgICBzdXBlcihQcmVkaWN0aW9uUHJlcGFyYXRvciwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCgogICAgZGVmIGV4ZWN1dGUoc2VsZiwgaW5wdXRfbWVzc2FnZSwgcGFyYW1zLCAqKmt3YXJncyk6CiAgICAgICAgIiIiCiAgICAgICAgUmV0dXJuIGEgcHJlcGFyZWQgaW5wdXRfbWVzc2FnZSBjb21wYXRpYmxlIHRvIHRoZSBwcmVkaWN0IGFsZ29yaXRobSB1c2VkIGJ5IHRoZSBtb2RlbC4KICAgICAgICBVc2UgdGhlIHNlbGYubW9kZWwgYW5kIHNlbGYubWV0cmljcyBvYmplY3RzIGlmIG5lY2Vzc2FyeS4KICAgICAgICAiIiIKICAgICAgICByZXR1cm4gaW5wdXRfbWVzc2FnZQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Byb2plY3RfcGFja2FnZS90cmFpbmluZy9tZXRyaWNzX2V2YWx1YXRvci5weQAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDE0MTYgMTM0NjMzMzM0NjIgMDQyMjU1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIABweXRob24tdG9vbGJveC9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIiIiTWV0cmljc0V2YWx1YXRvciBlbmdpbmUgYWN0aW9uLgoKVXNlIHRoaXMgbW9kdWxlIHRvIGFkZCB0aGUgcHJvamVjdCBtYWluIGNvZGUuCiIiIgoKZnJvbSAuLl9jb21wYXRpYmlsaXR5IGltcG9ydCBzaXgKZnJvbSAuLl9sb2dnaW5nIGltcG9ydCBnZXRfbG9nZ2VyCgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5lbmdpbmVfYmFzZSBpbXBvcnQgRW5naW5lQmFzZVRyYWluaW5nCgpfX2FsbF9fID0gWydNZXRyaWNzRXZhbHVhdG9yJ10KCgpsb2dnZXIgPSBnZXRfbG9nZ2VyKCdtZXRyaWNzX2V2YWx1YXRvcicpCgoKY2xhc3MgTWV0cmljc0V2YWx1YXRvcihFbmdpbmVCYXNlVHJhaW5pbmcpOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgc3VwZXIoTWV0cmljc0V2YWx1YXRvciwgc2VsZikuX19pbml0X18oKiprd2FyZ3MpCgogICAgZGVmIGV4ZWN1dGUoc2VsZiwgcGFyYW1zLCAqKmt3YXJncyk6CiAgICAgICAgIiIiCiAgICAgICAgU2V0dXAgdGhlIG1ldHJpY3Mgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhbGdvcml0aG1zIHVzZWQgdG8gdGVzdCB0aGUgbW9kZWwuCiAgICAgICAgVXNlIHRoZSBzZWxmLmRhdGFzZXQgYW5kIHNlbGYubW9kZWwgcHJlcGFyZWQgaW4gdGhlIGxhc3QgYWN0aW9ucy4KCiAgICAgICAgRWcuCgogICAgICAgICAgICBzZWxmLm1hcnZpbl9tZXRyaWNzID0gey4uLn0KICAgICAgICAiIiIKICAgICAgICBzZWxmLm1hcnZpbl9tZXRyaWNzID0ge30KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWV0YWRhdGEtVmVyc2lvbjogMS4xCk5hbWU6IG1hcnZpbi1weXRob24tdG9vbGJveApWZXJzaW9uOiAwLjAuNApTdW1tYXJ5OiBNYXJ2aW4gUHl0aG9uIFRvb2xib3gKSG9tZS1wYWdlOiBodHRwczovL2dpdGh1Yi5jb20vbWFydmluLWFpL21hcnZpbi1weXRob24tdG9vbGJveApBdXRob3I6IERhbmllbCBUYWthYmF5YXNoaQpBdXRob3ItZW1haWw6IGRhbmllbC50YWthYmF5YXNoaUBnbWFpbC5jb20KTGljZW5zZTogVU5LTk9XTgpEZXNjcmlwdGlvbjogWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvbWFydmluLWFpL21hcnZpbi1weXRob24tdG9vbGJveC5zdmcpXShodHRwczovL3RyYXZpcy1jaS5vcmcvbWFydmluLWFpL21hcnZpbi1weXRob24tdG9vbGJveCkgWyFbY29kZWNvdl0oaHR0cHM6Ly9jb2RlY292LmlvL2doL21hcnZpbi1haS9tYXJ2aW4tcHl0aG9uLXRvb2xib3gvYnJhbmNoL21hc3Rlci9ncmFwaC9iYWRnZS5zdmcpXShodHRwczovL2NvZGVjb3YuaW8vZ2gvbWFydmluLWFpL21hcnZpbi1weXRob24tdG9vbGJveCkKICAgICAgICAKICAgICAgICBbIVtKb2luIHRoZSBjaGF0IGF0IGh0dHBzOi8vZ2l0dGVyLmltL2dpdHRlckhRL2dpdHRlcl0oaHR0cHM6Ly9iYWRnZXMuZ2l0dGVyLmltL0pvaW4lMjBDaGF0LnN2ZyldKGh0dHBzOi8vZ2l0dGVyLmltL21hcnZpbi1haSkKICAgICAgICAKICAgICAgICAjIE1hcnZpbiBUb29sYm94IHYwLjAuNAogICAgICAgIAogICAgICAgICFbXShodHRwczovL2ltYWdlcy1hbWVyaWNhbmFzLmIydy5pby9pbWcvX3N0YWdpbmcvbWFydmluL21hcnZpbi5wbmcpCiAgICAgICAgCiAgICAgICAgIyBRdWljayBTdGFydAogICAgICAgIAogICAgICAgICMjIFJldmlldwogICAgICAgIAogICAgICAgICoqTWFydmluKiogaXMgYW4gb3Blbi1zb3VyY2UgQXJ0aWZpY2lhbCBJbnRlbGxpZ2VuY2UgcGxhdGZvcm0gdGhhdCBmb2N1c2VzIG9uIGhlbHBpbmcgZGF0YSBzY2llbnRpc3RzIGRlbGl2ZXIgbWVhbmluZ2Z1bCBzb2x1dGlvbnMgdG8gY29tcGxleCBwcm9ibGVtcy4gU3VwcG9ydGVkIGJ5IGEgc3RhbmRhcmRpemVkIGxhcmdlLXNjYWxlLCBsYW5ndWFnZS1hZ25vc3RpYyBhcmNoaXRlY3R1cmUsIE1hcnZpbiBzaW1wbGlmaWVzIHRoZSBwcm9jZXNzIG9mIGV4cGxvcmF0aW9uIGFuZCBtb2RlbGluZy4KICAgICAgICAKICAgICAgICAjIyBHZXR0aW5nIFN0YXJ0ZWQKICAgICAgICAqIFtJbnN0YWxsaW5nIE1hcnZpbiAoVWJ1bnR1KV0oaHR0cHM6Ly9tYXJ2aW4uYXBhY2hlLm9yZy9tYXJ2aW4tcGxhdGZvcm0tYm9vay9jaDJfdG9vbGJveF9pbnN0YWxsYXRpb24vdWJ1bnR1LykKICAgICAgICAqIFtJbnN0YWxsaW5nIE1hcnZpbiAoTWFjT1MpXShodHRwczovL21hcnZpbi5hcGFjaGUub3JnL21hcnZpbi1wbGF0Zm9ybS1ib29rL2NoMl90b29sYm94X2luc3RhbGxhdGlvbi9tYWMvKQogICAgICAgICogW0luc3RhbGxpbmcgTWFydmluIChPdGhlciBPUykgVmFncmFudF0oaHR0cHM6Ly9tYXJ2aW4uYXBhY2hlLm9yZy9tYXJ2aW4tcGxhdGZvcm0tYm9vay9jaDJfdG9vbGJveF9pbnN0YWxsYXRpb24vdmFncmFudC8pCiAgICAgICAgKiBbQ3JlYXRpbmcgYSBuZXcgZW5naW5lXSgjY3JlYXRpbmctYS1uZXctZW5naW5lKQogICAgICAgICogW1dvcmtpbmcgaW4gYW4gZXhpc3RpbmcgZW5naW5lXSgjd29ya2luZy1pbi1hbi1leGlzdGluZy1lbmdpbmUpCiAgICAgICAgKiBbQ29tbWFuZCBsaW5lIGludGVyZmFjZV0oI2NvbW1hbmQtbGluZS1pbnRlcmZhY2UpCiAgICAgICAgKiBbUnVubmluZyBhbiBleGFtcGxlIGVuZ2luZV0oI3J1bm5pbmctYS1leGFtcGxlLWVuZ2luZSkKICAgICAgICAKICAgICAgICAKICAgICAgICAjIyMgQ3JlYXRpbmcgYSBuZXcgZW5naW5lCiAgICAgICAgMS4gVG8gY3JlYXRlIGEgbmV3IGVuZ2luZQogICAgICAgIGBgYAogICAgICAgIHdvcmtvbiBweXRob24tdG9vbGJveC1lbnYKICAgICAgICBtYXJ2aW4gZW5naW5lLWdlbmVyYXRlCiAgICAgICAgYGBgCiAgICAgICAgUmVzcG9uZCB0byB0aGUgcHJvbXB0IGFuZCB3YWl0IGZvciB0aGUgZW5naW5lIGVudmlyb25tZW50IHByZXBhcmF0aW9uIHRvIGNvbXBsZXRlLiBEb24ndCBmb3JnZXQgdG8gc3RhcnQgZGV2IGJveCBiZWZvcmUgaWYgeW91IGFyZSB1c2luZyB2YWdyYW50LgogICAgICAgIAogICAgICAgIDIuIFRlc3QgdGhlIG5ldyBlbmdpbmUKICAgICAgICBgYGAKICAgICAgICB3b3Jrb24gPG5ld19lbmdpbmVfbmFtZT4tZW52CiAgICAgICAgbWFydmluIHRlc3QKICAgICAgICBgYGAKICAgICAgICAKICAgICAgICAzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgogICAgICAgIGBgYAogICAgICAgIG1hcnZpbiAtLWhlbHAKICAgICAgICBgYGAKICAgICAgICAKICAgICAgICAjIyMgV29ya2luZyBpbiBhbiBleGlzdGluZyBlbmdpbmUKICAgICAgICAKICAgICAgICAxLiBTZXQgVmlydHVhbEVudiBhbmQgZ2V0IHRvIHRoZSBlbmdpbmUncyBwYXRoCiAgICAgICAgYGBgCiAgICAgICAgd29ya29uIDxlbmdpbmVfbmFtZT4tZW52CiAgICAgICAgYGBgCiAgICAgICAgCiAgICAgICAgMi4gVGVzdCB5b3VyIGVuZ2luZQogICAgICAgIGBgYAogICAgICAgIG1hcnZpbiB0ZXN0CiAgICAgICAgYGBgCiAgICAgICAgCiAgICAgICAgMy4gQnJpbmcgdXAgdGhlIG5vdGVib29rIGFuZCBhY2Nlc3MgaXQgZnJvbSB5b3VyIGJyb3dzZXIKICAgICAgICBgYGAKICAgICAgICBtYXJ2aW4gbm90ZWJvb2sKICAgICAgICBgYGAKICAgICAgICAKICAgICAgICAjIyMgQ29tbWFuZCBsaW5lIGludGVyZmFjZQogICAgICAgIFVzYWdlOiBtYXJ2aW4gW09QVElPTlNdIENPTU1BTkQgW0FSR1NdCiAgICAgICAgCiAgICAgICAgT3B0aW9uczoKICAgICAgICBgYGAKICAgICAgICAgIC0tZGVidWcgICAgICAgI0VuYWJsZSBkZWJ1ZyBtb2RlLgogICAgICAgICAgLS12ZXJzaW9uICAgICAjU2hvdyB0aGUgdmVyc2lvbiBhbmQgZXhpdC4KICAgICAgICAgIC0taGVscCAgICAgICAgI1Nob3cgdGhpcyBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGFuZCBleGl0LgogICAgICAgIGBgYAogICAgICAgIAogICAgICAgIENvbW1hbmRzOgogICAgICAgIGBgYAogICAgICAgICAgZW5naW5lLWdlbmVyYXRlICAgICAjR2VuZXJhdGUgYSBuZXcgbWFydmluIGVuZ2luZSBwcm9qZWN0LgogICAgICAgICAgZW5naW5lLWdlbmVyYXRlZW52ICAjR2VuZXJhdGUgYSBuZXcgbWFydmluIGVuZ2luZSBlbnZpcm9ubWVudC4KICAgICAgICAgIGVuZ2luZS1ncnBjc2VydmVyICAgI01hcnZpbiBnUlBDIGVuZ2luZSBhY3Rpb24gc2VydmVyIHN0YXJ0cy4KICAgICAgICAgIGVuZ2luZS1odHRwc2VydmVyICAgI01hcnZpbiBodHRwIGFwaSBzZXJ2ZXIgc3RhcnRzLgogICAgICAgICAgaGl2ZS1kYXRhaW1wb3J0ICAgICAjSW1wb3J0IGRhdGEgc2FtcGxlcyBmcm9tIGEgaGl2ZSBkYXRhYnNlIHRvIHRoZSBoaXZlIHJ1bm5pbmcgaW4gdGhpcyB0b29sYm94LgogICAgICAgICAgaGl2ZS1nZW5lcmF0ZWNvbmYgICAjR2VuZXJhdGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUuCiAgICAgICAgICBoaXZlLXJlc2V0cmVtb3RlICAgICNEcm9wIGFsbCByZW1vdGUgdGFibGVzIGZyb20gaW5mb3JtZWQgZW5naW5lIG9uIGhvc3QuCiAgICAgICAgICBub3RlYm9vayAgICAgICAgICAgICNTdGFydCB0aGUgSnVweXRlciBub3RlYm9vayBzZXJ2ZXIuCiAgICAgICAgICBwa2ctYnVtcHZlcnNpb24gICAgICNCdW1wIHRoZSBwYWNrYWdlIHZlcnNpb24uCiAgICAgICAgICBwa2ctY3JlYXRldGFnICAgICAgICNDcmVhdGUgZ2l0IHRhZyB1c2luZyB0aGUgcGFja2FnZSB2ZXJzaW9uLgogICAgICAgICAgcGtnLXNob3djaGFuZ2VzICAgICAjU2hvdyB0aGUgcGFja2FnZSBjaGFuZ2Vsb2cuCiAgICAgICAgICBwa2ctc2hvd2luZm8gICAgICAgICNTaG93IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrYWdlLgogICAgICAgICAgcGtnLXNob3d2ZXJzaW9uICAgICAjU2hvdyB0aGUgcGFja2FnZSB2ZXJzaW9uLgogICAgICAgICAgcGtnLXVwZGF0ZWRlcHMgICAgICAjVXBkYXRlIHJlcXVpcmVtZW50cy50eHQuCiAgICAgICAgICB0ZXN0ICAgICAgICAgICAgICAgICNSdW4gdGVzdHMuCiAgICAgICAgICB0ZXN0LWNoZWNrcGVwOCAgICAgICNDaGVjayBweXRob24gY29kZSBzdHlsZS4KICAgICAgICAgIHRlc3QtdGRkICAgICAgICAgICAgI1dhdGNoIGZvciBjaGFuZ2VzIHRvIHJ1biB0ZXN0cyBhdXRvbWF0aWNhbGx5LgogICAgICAgICAgdGVzdC10b3ggICAgICAgICAgICAjUnVuIHRlc3RzIHVzaW5nIGEgbmV3IHZpcnR1YWxlbnYuCiAgICAgICAgYGBgCiAgICAgICAgCiAgICAgICAgIyMjIFJ1bm5pbmcgYSBleGFtcGxlIGVuZ2luZSAKICAgICAgICAKICAgICAgICAxLiBDbG9uZSB0aGUgZXhhbXBsZSBlbmdpbmUgZnJvbSB0aGUgcmVwb3NpdG9yeQogICAgICAgIGBgYAogICAgICAgIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vbWFydmluLWFpL2VuZ2luZXMuZ2l0CiAgICAgICAgYGBgCiAgICAgICAgCiAgICAgICAgMi4gR2VuZXJhdGUgYSBuZXcgTWFydmluIGVuZ2luZSBlbnZpcm9ubWVudCBmb3IgdGhlIElyaXMgc3BlY2llcyBlbmdpbmUKICAgICAgICBgYGAKICAgICAgICB3b3Jrb24gcHl0aG9uLXRvb2xib3gtZW52CiAgICAgICAgbWFydmluIGVuZ2luZS1nZW5lcmF0ZWVudiAuLi9lbmdpbmVzL2lyaXMtc3BlY2llcy1lbmdpbmUvCiAgICAgICAgYGBgCiAgICAgICAgCiAgICAgICAgMy4gUnVuIHRoZSBJcmlzIHNwZWNpZXMgZW5naW5lCiAgICAgICAgYGBgCiAgICAgICAgd29ya29uIGlyaXMtc3BlY2llcy1lbmdpbmUtZW52CiAgICAgICAgbWFydmluIGVuZ2luZS1kcnlydW4gCiAgICAgICAgYGBgCiAgICAgICAgCiAgICAgICAgPiBNYXJ2aW4gaXMgYSBwcm9qZWN0IHN0YXJ0ZWQgYXQgQjJXIERpZ2l0YWwgb2ZmaWNlcyBhbmQgcmVsZWFzZWQgb3BlbiBzb3VyY2Ugb24gU2VwdGVtYmVyIDIwMTcuCiAgICAgICAgClBsYXRmb3JtOiBVTktOT1dOCkNsYXNzaWZpZXI6IERldmVsb3BtZW50IFN0YXR1cyA6OiA1IC0gUHJvZHVjdGlvbi9TdGFibGUKQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIKQ2xhc3NpZmllcjogUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNwpDbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMwpDbGFzc2lmaWVyOiBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy42CgAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENIQU5HRVMubWQKSU5TVEFMTApNQU5JRkVTVC5pbgpSRUFETUUubWQKbWFydmluLmluaQpzZXR1cC5jZmcKYmluL21hcnZpbgptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvVkVSU0lPTgptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvX19pbml0X18ucHkKbWFydmluX3B5dGhvbl90b29sYm94L19jb21wYXRpYmlsaXR5LnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9fbG9nZ2luZy5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvY29uZmlnLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9kZWNvcmF0b3JzLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9sb2FkZXIucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZS5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3guZWdnLWluZm8vUEtHLUlORk8KbWFydmluX3B5dGhvbl90b29sYm94LmVnZy1pbmZvL1NPVVJDRVMudHh0Cm1hcnZpbl9weXRob25fdG9vbGJveC5lZ2ctaW5mby9kZXBlbmRlbmN5X2xpbmtzLnR4dAptYXJ2aW5fcHl0aG9uX3Rvb2xib3guZWdnLWluZm8vbm90LXppcC1zYWZlCm1hcnZpbl9weXRob25fdG9vbGJveC5lZ2ctaW5mby9yZXF1aXJlcy50eHQKbWFydmluX3B5dGhvbl90b29sYm94LmVnZy1pbmZvL3RvcF9sZXZlbC50eHQKbWFydmluX3B5dGhvbl90b29sYm94L2NvbW1vbi9fX2luaXRfXy5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvY29tbW9uL2NvbmZpZy5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvY29tbW9uL2RhdGEucHkKbWFydmluX3B5dGhvbl90b29sYm94L2NvbW1vbi9kYXRhX3NvdXJjZV9wcm92aWRlci5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvY29tbW9uL2V4Y2VwdGlvbnMucHkKbWFydmluX3B5dGhvbl90b29sYm94L2NvbW1vbi9odHRwX2NsaWVudC5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvY29tbW9uL3Byb2ZpbGluZy5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvY29tbW9uL3V0aWxzLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9lbmdpbmVfYmFzZS9fX2luaXRfXy5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2UvZW5naW5lX2Jhc2VfYWN0aW9uLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9lbmdpbmVfYmFzZS9lbmdpbmVfYmFzZV9kYXRhX2hhbmRsZXIucHkKbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL2VuZ2luZV9iYXNlX3ByZWRpY3Rpb24ucHkKbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL2VuZ2luZV9iYXNlX3RyYWluaW5nLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9lbmdpbmVfYmFzZS9zZXJpYWxpemVycy9fX2luaXRfXy5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2Uvc2VyaWFsaXplcnMva2VyYXNfc2VyaWFsaXplci5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZW5naW5lX2Jhc2Uvc3R1YnMvX19pbml0X18ucHkKbWFydmluX3B5dGhvbl90b29sYm94L2VuZ2luZV9iYXNlL3N0dWJzL2FjdGlvbnNfcGIyLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9lbmdpbmVfYmFzZS9zdHVicy9hY3Rpb25zX3BiMl9ncnBjLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9leHRyYXMvbWFydmluX2Jhc2hfY29tcGxldGlvbgptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZXh0cmFzL25vdGVib29rX2V4dGVuc2lvbnMvanVweXRlcl9ub3RlYm9va19jb25maWcucHkKbWFydmluX3B5dGhvbl90b29sYm94L2V4dHJhcy9ub3RlYm9va19leHRlbnNpb25zL21haW4uanMKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvX19pbml0X18ucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvZW5naW5lLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L2hpdmUucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvbm90ZWJvb2sucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvcGtnLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3Rlc3QucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvLmJ1bXB2ZXJzaW9uLmNmZwptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS8uY292ZXJhZ2VyYwptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS8uZ2l0aWdub3JlCm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL0NIQU5HRVMubWQKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvRG9ja2VyZmlsZQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9JTlNUQUxMCm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL0xJQ0VOU0UKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvTUFOSUZFU1QuaW4KbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvTWFrZWZpbGUKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvUkVBRE1FLm1kCm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL2RvY3MueWFtbAptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9lbmdpbmUubWVzc2FnZXMKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvZW5naW5lLm1ldGFkYXRhCm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL2VuZ2luZS5wYXJhbXMKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvZmFiZmlsZS5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9mZWVkYmFjay5tZXNzYWdlcwptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9tYXJ2aW4uaW5pCm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3B5dGVzdC5pbmkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvc2V0dXAuY2ZnCm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3NldHVwLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3RveC5pbmkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvbm90ZWJvb2tzL3NhbXBsZS5pcHluYgptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9wcm9qZWN0X3BhY2thZ2UvVkVSU0lPTgptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9wcm9qZWN0X3BhY2thZ2UvX19pbml0X18ucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvcHJvamVjdF9wYWNrYWdlL19jb21wYXRpYmlsaXR5LnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Byb2plY3RfcGFja2FnZS9fbG9nZ2luZy5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9wcm9qZWN0X3BhY2thZ2UvZGF0YV9oYW5kbGVyL19faW5pdF9fLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Byb2plY3RfcGFja2FnZS9kYXRhX2hhbmRsZXIvYWNxdWlzaXRvcl9hbmRfY2xlYW5lci5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9wcm9qZWN0X3BhY2thZ2UvZGF0YV9oYW5kbGVyL3RyYWluaW5nX3ByZXBhcmF0b3IucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvcHJvamVjdF9wYWNrYWdlL3ByZWRpY3Rpb24vX19pbml0X18ucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvcHJvamVjdF9wYWNrYWdlL3ByZWRpY3Rpb24vZmVlZGJhY2sucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvcHJvamVjdF9wYWNrYWdlL3ByZWRpY3Rpb24vcHJlZGljdGlvbl9wcmVwYXJhdG9yLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Byb2plY3RfcGFja2FnZS9wcmVkaWN0aW9uL3ByZWRpY3Rvci5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS9wcm9qZWN0X3BhY2thZ2UvdHJhaW5pbmcvX19pbml0X18ucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvcHJvamVjdF9wYWNrYWdlL3RyYWluaW5nL21ldHJpY3NfZXZhbHVhdG9yLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Byb2plY3RfcGFja2FnZS90cmFpbmluZy90cmFpbmVyLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Rlc3RzL2NvbmZ0ZXN0LnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Rlc3RzL2RhdGFfaGFuZGxlci90ZXN0X2FjcXVpc2l0b3JfYW5kX2NsZWFuZXIucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvdGVzdHMvZGF0YV9oYW5kbGVyL3Rlc3RfdHJhaW5pbmdfcHJlcGFyYXRvci5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS90ZXN0cy9wcmVkaWN0aW9uL3Rlc3RfZmVlZGJhY2sucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvdGVzdHMvcHJlZGljdGlvbi90ZXN0X3ByZWRpY3Rpb25fcHJlcGFyYXRvci5weQptYXJ2aW5fcHl0aG9uX3Rvb2xib3gvbWFuYWdlbWVudC90ZW1wbGF0ZXMvcHl0aG9uLWVuZ2luZS90ZXN0cy9wcmVkaWN0aW9uL3Rlc3RfcHJlZGljdG9yLnB5Cm1hcnZpbl9weXRob25fdG9vbGJveC9tYW5hZ2VtZW50L3RlbXBsYXRlcy9weXRob24tZW5naW5lL3Rlc3RzL3RyYWluaW5nL3Rlc3RfbWV0cmljc19ldmFsdWF0b3IucHkKbWFydmluX3B5dGhvbl90b29sYm94L21hbmFnZW1lbnQvdGVtcGxhdGVzL3B5dGhvbi1lbmdpbmUvdGVzdHMvdHJhaW5pbmcvdGVzdF90cmFpbmVyLnB5Cm5vdGVib29rcy9jb3VudC1kYi10YWJsZXMtcm93cy5pcHluYgpub3RlYm9va3Mvc3BhcmtfZGF0YV9zb3VyY2VfdGVzdC5pcHluYgp0ZXN0cy9jb25mdGVzdC5weQp0ZXN0cy90ZXN0X2xvYWRlci5weQp0ZXN0cy9jb21tb24vdGVzdF9jb25maWcucHkKdGVzdHMvY29tbW9uL3Rlc3RfZGF0YS5weQp0ZXN0cy9jb21tb24vdGVzdF9kYXRhX3NvdXJjZV9wcm92aWRlci5weQp0ZXN0cy9jb21tb24vdGVzdF9odHRwX2NsaWVudC5weQp0ZXN0cy9jb21tb24vdGVzdF9wcm9maWxpbmcucHkKdGVzdHMvY29tbW9uL3Rlc3RfdXRpbHMucHkKdGVzdHMvZW5naW5lX2Jhc2UvdGVzdF9lbmdpbmVfYmFzZV9hY3Rpb24ucHkKdGVzdHMvZW5naW5lX2Jhc2UvdGVzdF9lbmdpbmVfYmFzZV9kYXRhX2hhbmRsZXIucHkKdGVzdHMvZW5naW5lX2Jhc2UvdGVzdF9lbmdpbmVfYmFzZV9wcmVkaWN0aW9uLnB5CnRlc3RzL2VuZ2luZV9iYXNlL3Rlc3RfZW5naW5lX2Jhc2VfdHJhaW5pbmcucHkKdGVzdHMvZW5naW5lX2Jhc2Uvc2VyaWFsaXplcnMvdGVzdF9rZXJhc19zZXJpYWxpemVyLnB5CnRlc3RzL2ZpeHR1cmVzL2NvbmZpZy5zYW1wbGUKdGVzdHMvbWFuYWdlbWVudC90ZXN0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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIyBDb3B5cmlnaHQgWzIwMTddIFtCMlcgRGlnaXRhbF0KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKaW1wb3J0IHB5dGVzdAoKCkBweXRlc3QuZml4dHVyZQpkZWYgY29uZmlnX2ZpeHR1cmUoKToKICAgIHJldHVybiB7CiAgICAgICAgJ2tleSc6ICd2YWx1ZScsCiAgICAgICAgJ3NlY3Rpb24nOiB7CiAgICAgICAgICAgICdzZWN0aW9uX2tleSc6ICdzZWN0aW9uX3ZhbHVlJwogICAgICAgIH0KICAgIH0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC90ZXN0cy90ZXN0X2xvYWRlci5weQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDI0MTIgMTM0NjMzMzM0NjIgMDIxNzUzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIyBDb3B5cmlnaHQgWzIwMTddIFtCMlcgRGlnaXRhbF0KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKdHJ5OgogICAgaW1wb3J0IG1vY2sKZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jawoKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubG9hZGVyIGltcG9ydCBsb2FkX2NvbW1hbmRzX2Zyb21fZmlsZQoKCkBtb2NrLnBhdGNoKCJtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubG9hZGVyLmlzaW5zdGFuY2UiKQpAbW9jay5wYXRjaCgibWFydmluX3B5dGhvbl90b29sYm94LmxvYWRlci5nZXRtZW1iZXJzIikKQG1vY2sucGF0Y2goIm1hcnZpbl9weXRob25fdG9vbGJveC5sb2FkZXIuaW1wLmxvYWRfc291cmNlIikKZGVmIHRlc3RfbG9hZF9jb21tYW5kc19mcm9tX2ZpbGUobG9hZF9zb3VyY2VfbW9ja2VkLCBnZXRtZW1iZXJzX21vY2tlZCwgaXNpbnN0YW5jZV9tb2NrZWQpOgogICAgcGF0aCA9ICcvdG1wJwogICAgbG9hZF9zb3VyY2VfbW9ja2VkLnJldHVybl92YWx1ZSA9ICdzb3VyY2UnCgogICAgY29tbWFuZHMg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S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgdXVpZAppbXBvcnQgZGF0ZXRpbWUKaW1wb3J0IGpzb24KCmltcG9ydCBweXRlc3QKCnRyeToKICAgIGltcG9ydCBtb2NrCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGltcG9ydCB1bml0dGVzdC5tb2NrIGFzIG1vY2sKCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi51dGlscyBpbXBvcnQgKGNsYXNzX3Byb3BlcnR5LCBtZW1vaXplZF9jbGFzc19wcm9wZXJ0eSwgZ2V0X2RhdGV0aW1lLCBkZXByZWNhdGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fanNvbiwgZnJvbV9qc29uLCBpc192YWxpZF9qc29uLCB2YWxpZGF0ZV9qc29uLCBnZW5lcmF0ZV9rZXksIHRvX3NsdWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxfZW5jb2RlLCBnZXRhdHRyX3F1YWxpZmllZCwgY2h1bmtzLCBjaGVja19wYXRoKQpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uZXhjZXB0aW9ucyBpbXBvcnQgSW52YWxpZEpzb25FeGNlcHRpb24KCmluc3RhbmNlX2NvdW50ID0gMAoKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgVGVzdCBtZW1vaXplZF9jbGFzc19wcm9wZXJ0eQoKY2xhc3MgRHVtbXk6CiAgICBAbWVtb2l6ZWRfY2xhc3NfcHJvcGVydHkKICAgIGRlZiBteV9jbHNfYXR0cmlidXRlKGNscyk6CiAgICAgICAgZ2xvYmFsIGluc3RhbmNlX2NvdW50CiAgICAgICAgaW5zdGFuY2VfY291bnQgKz0gMQogICAgICAgIHJldHVybiA0MgoKICAgIEBjbGFzc19wcm9wZXJ0eQogICAgZGVmIG15X2Nsc19wcm9wZXJ0eShjbHMpOgogICAgICAgIHJldHVybiAnb2knCgogICAgZGVmIGFueV9tZXRob2Qoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYubXlfY2xzX2F0dHJpYnV0ZQoKCmRlZiB0ZXN0X2luaXRpYWxfaW5zdGFuY2VfY291bnQoKToKICAgIGdsb2JhbCBpbnN0YW5jZV9jb3VudAogICAgYXNzZXJ0IDAgPT0gaW5zdGFuY2VfY291bnQKCgpkZWYgdGVzdF9wcm9wZXJ0eSgpOgogICAgYXNzZXJ0IDQyID09IER1bW15Lm15X2Nsc19hdHRyaWJ1dGUKCgpkZWYgdGVzdF9hY2Nlc3NfZnJvbV9pbnN0YW5jZV9tZXRob2QoKToKICAgIGFzc2VydCA0MiA9PSBEdW1teSgpLmFueV9tZXRob2QoKQoKCmRlZiB0ZXN0X2NyZWF0ZV9vbmx5X29uZV9pbnN0YW5jZSgpOgogICAgZ2xvYmFsIGluc3RhbmNlX2NvdW50CgogICAgRHVtbXkubXlfY2xzX2F0dHJpYnV0ZQogICAgYXNzZXJ0IDEgPT0gaW5zdGFuY2VfY291bnQKCiAgICBEdW1teS5teV9jbHNfYXR0cmlidXRlCiAgICBhc3NlcnQgMSA9PSBpbnN0YW5jZV9jb3VudAoKCmRlZiB0ZXN0X2NsYXNzX3Byb3BlcnR5KCk6CiAgICBhc3NlcnQgRHVtbXkubXlfY2xzX3Byb3BlcnR5ID09ICdvaScKCgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIHRlc3QgdG9fanNvbiAmIGZyb21fanNvbgoKZGVmIHRlc3RfdG9fanNvbigpOgogICAgZCA9IHsnaSc6IDQyLCAncyc6ICdzdHJpbmcnLCAnZHQnOiBkYXRldGltZS5kYXRldGltZS5ub3coKSwgJ2lkJzogdXVpZC51dWlkNCgpfQogICAgYXNzZXJ0IGlzaW5zdGFuY2UodG9fanNvbihkKSwgc3RyKQoKCmRlZiB0ZXN0X3RvX2pzb25fd2l0aF9vYmpfd2l0aF9pZCgpOgogICAgY2xhc3MgT2JqKG9iamVjdCk6CiAgICAgICAgaWQgPSAnNDInCgogICAgZCA9IHsnaSc6IE9iaigpfQogICAgYXNzZXJ0IGlzaW5zdGFuY2UodG9fanNvbihkKSwgc3RyKQoKCmRlZiB0ZXN0X3RvX2pzb25fd2l0aF9vYmpfd2l0aG91dF9pZCgpOgogICAgY2xhc3MgT2JqKG9iamVjdCk6CiAgICAgICAgcGFzcwoKICAgIGQgPSB7J2knOiBPYmooKX0KICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgIHRvX2pzb24oZCkKCgpkZWYgdGVzdF90b19qc29uX3dpdGhfbnVtcHkoKToKICAgIGNsYXNzIEZha2VOdW1weUZsb2F0KG9iamVjdCk6CiAgICAgICAgZGVmIGl0ZW0oc2VsZik6CiAgICAgICAgICAgIHJldHVybiAwLjY2NgoKICAgIGQgPSB7J2Zsb2F0JzogRmFrZU51bXB5RmxvYXQoKX0KICAgIGFzc2VydCB0b19qc29uKGQpID09ICd7ImZsb2F0IjogMC42NjZ9JwoKCmRlZiB0ZXN0X2Zyb21fanNvbigpOgogICAgZCA9IHsnaSc6IDQyLCAncyc6ICdzdHJpbmcnLCAnZHQnOiBkYXRldGltZS5kYXRldGltZS5ub3coKSwgJ2lkJzogdXVpZC51dWlkNCgpfQogICAgYXNzZXJ0IGlzaW5zdGFuY2UoZnJvbV9qc29uKHRvX2pzb24oZCkpLCBkaWN0KQoKCmRlZiB0ZXN0X3ZhbGlkYXRlX2pzb24oKToKICAgIHZhbGlkID0gewogICAgICAgICdwcm9wJzogWydhJywgJ2InICwgJ2MnXQogICAgfQogICAgaW52YWxpZCA9IHsKICAgICAgICAncHJvcCc6ICdhJwogICAgfQogICAgc2NoZW1hID0gewogICAgICAgICd0eXBlJzogJ29iamVjdCcsCiAgICAgICAgJ3Byb3BlcnRpZXMnOiB7CiAgICAgICAgICAgICdwcm9wJzogewogICAgICAgICAgICAgICAgJ3R5cGUnOiAnYXJyYXknLAogICAgICAgICAgICAgICAgJ2l0ZW1zJzogeyAndHlwZSc6ICdzdHJpbmcnIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHZhbGlkYXRlX2pzb24odmFsaWQsIHNjaGVtYT1zY2hlbWEpCgogICAgd2l0aCBweXRlc3QucmFpc2VzKEludmFsaWRKc29uRXhjZXB0aW9uKToKICAgICAgICB2YWxpZGF0ZV9qc29uKGludmFsaWQsIHNjaGVtYT1zY2hlbWEpCgoKZGVmIHRlc3RfaXNfdmFsaWRfanNvbigpOgogICAgdmFsaWQgPSB7CiAgICAgICAgJ3Byb3AnOiBbJ2EnLCAnYicgLCAnYyddCiAgICB9CiAgICBpbnZhbGlkID0gewogICAgICAgICdwcm9wJzogJ2EnCiAgICB9CiAgICBzY2hlbWEgPSB7CiAgICAgICAgJ3R5cGUnOiAnb2JqZWN0JywKICAgICAgICAncHJvcGVydGllcyc6IHsKICAgICAgICAgICAgJ3Byb3AnOiB7CiAgICAgICAgICAgICAgICAndHlwZSc6ICdhcnJheScsCiAgICAgICAgICAgICAgICAnaXRlbXMnOiB7ICd0eXBlJzogJ3N0cmluZycgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgYXNzZXJ0IGlzX3ZhbGlkX2pzb24odmFsaWQsIHNjaGVtYT1zY2hlbWEpIGlzIFRydWUKICAgIGFzc2VydCBpc192YWxpZF9qc29uKGludmFsaWQsIHNjaGVtYT1zY2hlbWEpIGlzIEZhbHNlCgogICAgYXNzZXJ0IGlzX3ZhbGlkX2pzb24oanNvbi5kdW1wcyh2YWxpZCksIHNjaGVtYT1qc29uLmR1bXBzKHNjaGVtYSkpIGlzIFRydWUKICAgIGFzc2VydCBpc192YWxpZF9qc29uKGpzb24uZHVtcHMoaW52YWxpZCksIHNjaGVtYT1qc29uLmR1bXBzKHNjaGVtYSkpIGlzIEZhbHNlCgoKZGVmIHRlc3RfZ2VuZXJhdGVfa2V5KCk6CiAgICB2YWx1ZSA9ICd3d3cuaW1hZ2UuY29tLmJyJwogICAgdmFsaWRfc2hhMjU2ID0gJzU4NjQzZWJiYTFhYmJiZDkyYzU4Njk1N2E5OGM5ZjNlOGExMDRiNjgxZWIzN2I5OWRmNTBiMmUxMDQ0YmJmMjAnCiAgICBhc3NlcnQgZ2VuZXJhdGVfa2V5KHZhbHVlKSA9PSB2YWxpZF9zaGEyNTYKCgpkZWYgdGVzdF9nZW5lcmF0ZV9rZXlfd2l0aF91bmljb2RlKCk6CiAgICB2YWx1ZSA9IHUnaHR0cDovL3N0YXRpYy53bW9iamVjdHMuY29tLmJyL2ltZ3Jlcy9hcnF1aXZvcy9pZHMvMjUwOTIwMS0zNDQtMzQ0L3RvcnJhZGVpcmEtY3Vpc2luYXJ0LXRhbi00LVx1MjAxMy1icmFuY2EuanBnJwogICAgYXNzZXJ0IGdlbmVyYXRlX2tleSh2YWx1ZSkKCgpkZWYgdGVzdF90b19zbHVnKCk6CiAgICBhc3NlcnQgdG9fc2x1ZygnYW55IHRleHQnKSA9PSAiYW55LXRleHQiCgoKZGVmIHRlc3RfY2h1bmsoKToKICAgIGFzc2VydCBsZW4obGlzdChjaHVua3MoWzEsIDIsIDMsIDRdLCAyKSkpID09IDIKCgpkZWYgdGVzdF9nZXRhdHRyX3F1YWxpZmllZCgpOgogICAgY2xhc3MgQihvYmplY3QpOgogICAgICAgIGMgPSB7J2QnOiAnZSd9CgogICAgY2xhc3MgQShvYmplY3QpOgogICAgICAgIGIgPSBCKCkKCiAgICBhID0gQSgpCgogICAgYXNzZXJ0IGdldGF0dHJfcXVhbGlmaWVkKGEsICdiJykgPT0gYS5iCiAgICBhc3NlcnQgZ2V0YXR0cl9xdWFsaWZpZWQoYSwgJ2IuYycpID09IGEuYi5jCiAgICBhc3NlcnQgZ2V0YXR0cl9xdWFsaWZpZWQoYSwgJ2IuY1siZCJdJykgPT0gYS5iLmNbJ2QnXQogICAgYXNzZXJ0IGdldGF0dHJfcXVhbGlmaWVkKGEsICJiLmNbJ2QnXSIpID09IGEuYi5jWydkJ10KICAgIGFzc2VydCBnZXRhdHRyX3F1YWxpZmllZChhLCAiYi5jW2RdIikgPT0gYS5iLmNbJ2QnXQogICAgYXNzZXJ0IGdldGF0dHJfcXVhbGlmaWVkKGEsICJiLmNbZl0iLCAnZGVmYXVsdCcpID09ICdkZWZhdWx0JwogICAgYXNzZXJ0IGdldGF0dHJfcXVhbGlmaWVkKGEsICJ4LmNbZl0iLCAnZGVmYXVsdCcpID09ICdkZWZhdWx0JwoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgZ2V0YXR0cl9xdWFsaWZpZWQoYSwgJ3guY1tmXScpCgogICAgd2l0aCBweXRlc3QucmFpc2VzKEtleUVycm9yKToKICAgICAgICBnZXRhdHRyX3F1YWxpZmllZChhLCAnYi5jWyJ6Il0nKQoKICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgIGdldGF0dHJfcXVhbGlmaWVkKGEsICdiJywgJ2RlZmF1bHQnLCAnYmxhJykKCgpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi51dGlscy5vcy5wYXRoLmV4aXN0cycpCmRlZiB0ZXN0X3BhdGhfbm90X2V4aXN0cyhwYXRoX2V4aXN0c19tb2NrKToKICAgIHBhdGhfZXhpc3RzX21vY2sucmV0dXJuX3ZhbHVlID0gRmFsc2UKICAgIGFzc2VydCBub3QgY2hlY2tfcGF0aCgndGVtcCcpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24udXRpbHMub3MubWFrZWRpcnMnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi51dGlscy5vcy5wYXRoLmV4aXN0cycpCmRlZiB0ZXN0X3BhdGhfY3JlYXRpb24ocGF0aF9leGlzdHNfbW9jaywgbWFrZWRpcnNfbW9jayk6CiAgICBwYXRoX2V4aXN0c19tb2NrLnNpZGVfZWZmZWN0ID0gW0ZhbHNlLCBUcnVlXQogICAgbWFrZWRpcnNfbW9jay5yZXR1cm5fdmFsdWUgPSBOb25lCiAgICBhc3NlcnQgY2hlY2tfcGF0aCgndGVtcCcsIGNyZWF0ZT1UcnVlKQoKCmRlZiB0ZXN0X2dldF9kYXRldGltZSgpOgogICAgZGF0ZSA9IGdldF9kYXRldGltZSgpCiAgICBkYXRlID0gZGF0ZS5zcGxpdCgpCgogICAgYXNzZXJ0IGxlbihkYXRlWzBdKSA9PSAxMAogICAgYXNzZXJ0IGxlbihkYXRlWzFdKSA9PSA4CiAgICBhc3NlcnQgZGF0ZVsyXSA9PSAnVVRDJwoKCmRlZiB0ZXN0X2RlcHJlY2F0ZWQoKToKICAgIEBkZXByZWNhdGVkCiAgICBkZWYgZGVwcmVjYXRlZF9mdW5jKCk6CiAgICAgICAgcGFzcwoKICAgIHdpdGggcHl0ZXN0Lndhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CiAgICAgICAgZGVwcmVjYXRlZF9mdW5jKCkKCgpkZWYgdGVzdF91cmxfZW5jb2RlKCk6CiAgICBvcmlnaW5hbCA9IHUnaHR0cDovL2hvc3QuY29tL3BhdGhfd2l0aF9zcGVjaWFsX2NoYXJfw6HDqcOtw7PDuj9hbmQ9cXVlcnkmc3RyaW5nPXRydWUnCiAgICB0cmFuc2Zvcm1lZCA9ICdodHRwOi8vaG9zdC5jb20vcGF0aF93aXRoX3NwZWNpYWxfY2hhcl8lQzMlQTElQzMlQTklQzMlQUQlQzMlQjMlQzMlQkE/YW5kPXF1ZXJ5JnN0cmluZz10cnVlJwogICAgYXNzZXJ0IHVybF9lbmNvZGUob3JpZ2luYWwpID09IHRyYW5zZm9ybWVkCgoKZGVmIHRlc3RfdXJsX2VuY29kZV9zdHJpbmcoKToKICAgIG9yaWdpbmFsID0gYidodHRwOi8vaG9zdC5jb20vcGF0aF93aXRoX3NwZWNpYWxfY2hhcl9ceGMzXHhhMVx4YzNceGE5XHhjM1x4YWRceGMzXHhiM1x4YzNceGJhP2FuZD1xdWVyeSZzdHJpbmc9dHJ1ZScKICAgIHRyYW5zZm9ybWVkID0gJ2h0dHA6Ly9ob3N0LmNvbS9wYXRoX3dpdGhfc3BlY2lhbF9jaGFyXyVDMyVBMSVDMyVBOSVDMyVBRCVDMyVCMyVDMyVCQT9hbmQ9cXVlcnkmc3RyaW5nPXRydWUnCiAgICBhc3NlcnQgdXJsX2VuY29kZShvcmlnaW5hbCkgPT0gdHJhbnNmb3JtZWQKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L3Rlc3RzL2NvbW1vbi90ZXN0X3Byb2ZpbGluZy5weQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAxNjUwMiAxMzQ2MzMzMzQ2MiAwMjM3NzMAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAppbXBvcnQgdGVtcGZpbGUKaW1wb3J0IHV1aWQKaW1wb3J0IHB5dGVzdAoKdHJ5OgogICAgaW1wb3J0IG1vY2sKZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jawoKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLnByb2ZpbGluZyBpbXBvcnQgcHJvZmlsaW5nCgoKY2xhc3MgVGVzdFByb2ZpbGluZzoKCiAgICBkZWYgdGVzdF9kZWNvcmF0b3JfZmlsZV9jcmVhdGlvbihzZWxmKToKICAgICAgICBvdXRwdXRfcGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgIHVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCgogICAgICAgIEBwcm9maWxpbmcob3V0cHV0X3BhdGg9b3V0cHV0X3BhdGgsIHVpZD11aWQsIGluZm89eyd0ZXN0JzogNDJ9KQogICAgICAgIGRlZiBmb28oKToKICAgICAgICAgICAgcmV0dXJuCgogICAgICAgIGZvbygpCgogICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcucHN0YXRzJykpCiAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwgdWlkICsgJy5kb3QnKSkKICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBuZycpKQogICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcuanNvbicpKQoKICAgICAgICBzaHV0aWwucm10cmVlKG91dHB1dF9wYXRoKQoKICAgIGRlZiB0ZXN0X2RlY29yYXRvcl9kaXNhYmxlZChzZWxmKToKICAgICAgICBvdXRwdXRfcGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgIHVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCgogICAgICAgIEBwcm9maWxpbmcoZW5hYmxlPUZhbHNlLCBvdXRwdXRfcGF0aD1vdXRwdXRfcGF0aCwgdWlkPXVpZCwgaW5mbz17J3Rlc3QnOiA0Mn0pCiAgICAgICAgZGVmIGZvbygpOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgZm9vKCkKCiAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcucHN0YXRzJykpCiAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcuZG90JykpCiAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcucG5nJykpCiAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcuanNvbicpKQoKICAgICAgICBzaHV0aWwucm10cmVlKG91dHB1dF9wYXRoKQoKICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9maWxlX2NyZWF0aW9uKHNlbGYpOgogICAgICAgIG91dHB1dF9wYXRoID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgdWlkID0gc3RyKHV1aWQudXVpZDQoKSkKCiAgICAgICAgd2l0aCBwcm9maWxpbmcob3V0cHV0X3BhdGg9b3V0cHV0X3BhdGgsIHVpZD11aWQsIGluZm89eyd0ZXN0JzogNDJ9KSBhcyBwcm9mOgogICAgICAgICAgICBkZWYgZm9vKCk6CiAgICAgICAgICAgICAgICByZXR1cm4KCiAgICAgICAgICAgIGZvbygpCgogICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcucHN0YXRzJykpCiAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwgdWlkICsgJy5kb3QnKSkKICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBuZycpKQogICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcuanNvbicpKQoKICAgICAgICBzaHV0aWwucm10cmVlKG91dHB1dF9wYXRoKQoKICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9kaXNhYmxlZChzZWxmKToKICAgICAgICBvdXRwdXRfcGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgIHVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCgogICAgICAgIHdpdGggcHJvZmlsaW5nKGVuYWJsZT1GYWxzZSwgb3V0cHV0X3BhdGg9b3V0cHV0X3BhdGgsIHVpZD11aWQsIGluZm89eyd0ZXN0JzogNDJ9KSBhcyBwcm9mOgogICAgICAgICAgICBkZWYgZm9vKCk6CiAgICAgICAgICAgICAgICByZXR1cm4KCiAgICAgICAgICAgIGZvbygpCgogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBzdGF0cycpKQogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLmRvdCcpKQogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBuZycpKQogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLmpzb24nKSkKCiAgICAgICAgc2h1dGlsLnJtdHJlZShvdXRwdXRfcGF0aCkKCiAgICBkZWYgdGVzdF9jYWxsYWJsZV9wYXJhbShzZWxmKToKICAgICAgICBvdXRwdXRfcGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgIHVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCgogICAgICAgIEBwcm9maWxpbmcoZW5hYmxlPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IFRydWUsIG91dHB1dF9wYXRoPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IG91dHB1dF9wYXRoLCB1aWQ9bGFtYmRhICphcmdzLCAqKmt3YXJnczogdWlkLCBpbmZvPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IHsndGVzdCc6IDQyfSkKICAgICAgICBkZWYgZm9vKCk6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBmb28oKQoKICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBzdGF0cycpKQogICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcuZG90JykpCiAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwgdWlkICsgJy5wbmcnKSkKICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLmpzb24nKSkKCiAgICAgICAgc2h1dGlsLnJtdHJlZShvdXRwdXRfcGF0aCkKCiAgICBkZWYgdGVzdF9leGNlcHRpb25fcmVjb3ZlcihzZWxmKToKICAgICAgICBvdXRwdXRfcGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgIHVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCgogICAgICAgIEBwcm9maWxpbmcoZW5hYmxlPVRydWUsIG91dHB1dF9wYXRoPW91dHB1dF9wYXRoLCB1aWQ9bGFtYmRhICphcmdzLCAqKmt3YXJnczogdWlkKQogICAgICAgIGRlZiBmb28oKToKICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKCiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKFJ1bnRpbWVFcnJvcik6CiAgICAgICAgICAgIGZvbygpCgogICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcucHN0YXRzJykpCiAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwgdWlkICsgJy5kb3QnKSkKICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBuZycpKQoKICAgICAgICBzaHV0aWwucm10cmVlKG91dHB1dF9wYXRoKQoKICAgIGRlZiB0ZXN0X2Rpc2FibGVkX2V4Y2VwdGlvbl9yZWNvdmVyKHNlbGYpOgogICAgICAgIG91dHB1dF9wYXRoID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgdWlkID0gc3RyKHV1aWQudXVpZDQoKSkKCiAgICAgICAgQHByb2ZpbGluZyhlbmFibGU9RmFsc2UsIG91dHB1dF9wYXRoPW91dHB1dF9wYXRoLCB1aWQ9bGFtYmRhICphcmdzLCAqKmt3YXJnczogdWlkKQogICAgICAgIGRlZiBmb28oKToKICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKCiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKFJ1bnRpbWVFcnJvcik6CiAgICAgICAgICAgIGZvbygpCgogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBzdGF0cycpKQogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLmRvdCcpKQogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBuZycpKQoKICAgICAgICBzaHV0aWwucm10cmVlKG91dHB1dF9wYXRoKQoKICAgIGRlZiB0ZXN0X2ludmFsaWRfaW5mbyhzZWxmKToKICAgICAgICBvdXRwdXRfcGF0aCA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgIHVpZCA9IHN0cih1dWlkLnV1aWQ0KCkpCgogICAgICAgIEBwcm9maWxpbmcoZW5hYmxlPVRydWUsIG91dHB1dF9wYXRoPW91dHB1dF9wYXRoLAogICAgICAgICAgICAgICAgICAgdWlkPWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IHVpZCwgaW5mbz11dWlkLnV1aWQ0KCkpCiAgICAgICAgZGVmIGZvbygpOgogICAgICAgICAgICByZXR1cm4KCiAgICAgICAgZm9vKCkKCiAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwgdWlkICsgJy5wc3RhdHMnKSkKICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLmRvdCcpKQogICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ob3V0cHV0X3BhdGgsIHVpZCArICcucG5nJykpCgogICAgICAgIHNodXRpbC5ybXRyZWUob3V0cHV0X3BhdGgpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24ucHJvZmlsaW5nLnN1YnByb2Nlc3MnKQogICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGNlcHRpb24oc2VsZiwgc3VicHJvY2Vzc19tb2NrKToKICAgICAgICBzdWJwcm9jZXNzX21vY2suY2FsbC5zaWRlX2VmZmVjdCA9IEV4Y2VwdGlvbigpCgogICAgICAgIG91dHB1dF9wYXRoID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgdWlkID0gc3RyKHV1aWQudXVpZDQoKSkKCiAgICAgICAgQHByb2ZpbGluZyhlbmFibGU9VHJ1ZSwgb3V0cHV0X3BhdGg9b3V0cHV0X3BhdGgsCiAgICAgICAgICAgICAgICAgICB1aWQ9bGFtYmRhICphcmdzLCAqKmt3YXJnczogdWlkLCBpbmZvPXV1aWQudXVpZDQoKSkKICAgICAgICBkZWYgZm9vKCk6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBmb28oKQoKICAgICAgICBhc3NlcnQgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBzdGF0cycpKQogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLmRvdCcpKQogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBuZycpKQoKICAgICAgICBzaHV0aWwucm10cmVlKG91dHB1dF9wYXRoKQoKICAgIGRlZiB0ZXN0X2p1cHl0ZXJfcmVwcl9odG1sKHNlbGYpOgogICAgICAgIG91dHB1dF9wYXRoID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgdWlkID0gc3RyKHV1aWQudXVpZDQoKSkKCiAgICAgICAgd2l0aCBwcm9maWxpbmcob3V0cHV0X3BhdGg9b3V0cHV0X3BhdGgsIHVpZD1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiB1aWQsIGluZm89eyd0ZXN0JzogNDJ9KSBhcyBwcm9mOgogICAgICAgICAgICBkZWYgZm9vKCk6CiAgICAgICAgICAgICAgICByZXR1cm4KCiAgICAgICAgICAgIGZvbygpCiAgICAgICAgcHJvZl9yZXByX2h0bWwgPSBwcm9mLl9yZXByX2h0bWxfKCkKICAgICAgICBhc3NlcnQgJzxwcmU+JyBpbiBwcm9mX3JlcHJfaHRtbAogICAgICAgIGFzc2VydCAnPGltZycgaW4gcHJvZl9yZXByX2h0bWwKICAgICAgICBhc3NlcnQgb3MucGF0aC5qb2luKG91dHB1dF9wYXRoLCB1aWQgKyAnLnBuZycpIGluIHByb2ZfcmVwcl9odG1sCgogICAgICAgIHNodXRpbC5ybXRyZWUob3V0cHV0X3BhdGgpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24ucHJvZmlsaW5nLnN1YnByb2Nlc3MnKQogICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGNlcHRpb25fanVweXRlcl9yZXByX2h0bWwoc2VsZiwgc3VicHJvY2Vzc19tb2NrKToKICAgICAgICBzdWJwcm9jZXNzX21vY2suY2FsbC5zaWRlX2VmZmVjdCA9IEV4Y2VwdGlvbigpCgogICAgICAgIG91dHB1dF9wYXRoID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgdWlkID0gc3RyKHV1aWQudXVpZDQoKSkKCiAgICAgICAgd2l0aCBwcm9maWxpbmcob3V0cHV0X3BhdGg9b3V0cHV0X3BhdGgsIHVpZD11aWQsIGluZm89eyd0ZXN0JzogNDJ9KSBhcyBwcm9mOgogICAgICAgICAgICBkZWYgZm9vKCk6CiAgICAgICAgICAgICAgICByZXR1cm4KCiAgICAgICAgICAgIGZvbygpCiAgICAgICAgcHJvZl9yZXByX2h0bWwgPSBwcm9mLl9yZXByX2h0bWxfKCkKICAgICAgICBhc3NlcnQgJzxwcmU+JyBpbiBwcm9mX3JlcHJfaHRtbAogICAgICAgIGFzc2VydCAnPGltZycgbm90IGluIHByb2ZfcmVwcl9odG1sCiAgICAgICAgYXNzZXJ0IG9zLnBhdGguam9pbihvdXRwdXRfcGF0aCwgdWlkICsgJy5wbmcnKSBub3QgaW4gcHJvZl9yZXByX2h0bWwKCiAgICAgICAgc2h1dGlsLnJtdHJlZShvdXRwdXRfcGF0aCkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvdGVzdHMvY29tbW9uL3Rlc3RfaHR0cF9jbGllbnQucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDE3NTQ0IDEzNDYzMzMzNDYyIDAyNDMyNgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS91c3IvYmluL2VudiBweXRob24KIyBjb2Rpbmc9dXRmLTgKIyBDb3B5cmlnaHQgWzIwMTddIFtCMlcgRGlnaXRhbF0KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKaW1wb3J0IGpzb24KaW1wb3J0IHB5dGVzdAppbXBvcnQgaHR0cHJldHR5CmZyb20gaHR0cHJldHR5IGltcG9ydCBodHRwcmV0dHkgYXMgaHR0cHJldHR5X29iamVjdAoKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmh0dHBfY2xpZW50IGltcG9ydCBBcGlDbGllbnQsIExpc3RSZXN1bHRTZXQKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmV4Y2VwdGlvbnMgaW1wb3J0IEhUVFBFeGNlcHRpb24KCgpjbGFzcyBUZXN0SHR0cENsaWVudDoKCiAgICBAaHR0cHJldHR5LmFjdGl2YXRlCiAgICBkZWYgdGVzdF9saXN0X3Jlc3VsdF9zZXQoc2VsZik6CiAgICAgICAgZGF0YSA9IFt7J2lkJzogc3RyKG4pfSBmb3IgbiBpbiByYW5nZSgxMDApXQogICAgICAgIHBlcl9wYWdlID0gMgogICAgICAgIHRvdGFsX3BhZ2VzID0gbGVuKGRhdGEpIC8gcGVyX3BhZ2UKCiAgICAgICAgZGVmIGZha2VfaXRlbXMoc3RhcnQ9MCk6CiAgICAgICAgICAgIGh0dHByZXR0eS5yZWdpc3Rlcl91cmkoCiAgICAgICAgICAgICAgICBodHRwcmV0dHkuR0VULCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlcnZpY2UxLyIsCiAgICAgICAgICAgICAgICBib2R5PWpzb24uZHVtcHMoewogICAgICAgICAgICAgICAgICAgICdvYmplY3RzJzogZGF0YVtzdGFydDpzdGFydCArIHBlcl9wYWdlXSwKICAgICAgICAgICAgICAgICAgICAndG90YWwnOiBsZW4oZGF0YSksCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgICAgICBzdGF0dXM9MjAwLAogICAgICAgICAgICApCgogICAgICAgIGZha2VfaXRlbXMoMCkKICAgICAgICByZXN1bHRfc2V0ID0gTGlzdFJlc3VsdFNldChwYXRoPScvc2VydmljZTEvJywgbGltaXQ9cGVyX3BhZ2UpCgogICAgICAgIGFzc2VydCBsZW4ocmVzdWx0X3NldCkgPT0gbGVuKGRhdGEpCgogICAgICAgICMgZm9yY2UgaXRlciBhbGwKICAgICAgICBhbGxfaXRlbXMgPSBsaXN0KHJlc3VsdF9zZXQpCiAgICAgICAgYXNzZXJ0IGxlbihhbGxfaXRlbXMpID09IGxlbihkYXRhKQoKICAgICAgICBhc3NlcnQgbGVuKGh0dHByZXR0eV9vYmplY3QubGF0ZXN0X3JlcXVlc3RzKSA9PSB0b3RhbF9wYWdlcwoKICAgIEBodHRwcmV0dHkuYWN0aXZhdGUKICAgIGRlZiB0ZXN0X2dldF9vayhzZWxmKToKCiAgICAgICAgaHR0cHJldHR5LnJlZ2lzdGVyX3VyaShodHRwcmV0dHkuR0VULCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlcnZpY2UxLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5PSdbeyJpZCI6ICIxIn1dJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9MjAwKQoKICAgICAgICByZXNwb25zZSA9IEFwaUNsaWVudCgpLmdldCgnL3NlcnZpY2UxLycpCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLm9rCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLmRhdGEgaXMgbm90IE5vbmUKCiAgICBAaHR0cHJldHR5LmFjdGl2YXRlCiAgICBkZWYgdGVzdF9nZXRfbm90X29rKHNlbGYpOgoKICAgICAgICBodHRwcmV0dHkucmVnaXN0ZXJfdXJpKGh0dHByZXR0eS5HRVQsICJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VydmljZTEvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9J1t7ImVycm9yIjogImRldSBtZXJkYSJ9XScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPTUwMCkKCiAgICAgICAgcmVzcG9uc2UgPSBBcGlDbGllbnQoKS5nZXQoJy9zZXJ2aWNlMS8nKQogICAgICAgIGFzc2VydCBub3QgcmVzcG9uc2Uub2sKCiAgICBAaHR0cHJldHR5LmFjdGl2YXRlCiAgICBkZWYgdGVzdF9nZXRfbm90X29rX25vdF9qc29uKHNlbGYpOgoKICAgICAgICBodHRwcmV0dHkucmVnaXN0ZXJfdXJpKGh0dHByZXR0eS5HRVQsICJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VydmljZTEvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9J2Vycm9yOiAiZGV1IG1lcmRhIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9InRleHQvaHRtbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9NTAwKQoKICAgICAgICByZXNwb25zZSA9IEFwaUNsaWVudCgpLmdldCgnL3NlcnZpY2UxLycpCiAgICAgICAgYXNzZXJ0IG5vdCByZXNwb25zZS5vawoKICAgIEBodHRwcmV0dHkuYWN0aXZhdGUKICAgIGRlZiB0ZXN0X2dldF9hbGxfb2soc2VsZik6CgogICAgICAgIGh0dHByZXR0eS5yZWdpc3Rlcl91cmkoaHR0cHJldHR5LkdFVCwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZXJ2aWNlMS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keT0neyJvYmplY3RzIjogW3siaWQiOiAiMyJ9XSwgInRvdGFsIjogM30nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz0yMDApCgogICAgICAgIGh0dHByZXR0eS5yZWdpc3Rlcl91cmkoaHR0cHJldHR5LkdFVCwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZXJ2aWNlMS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keT0neyJvYmplY3RzIjogW3siaWQiOiAiMSJ9LCB7ImlkIjogIjIifV0sICJ0b3RhbCI6IDN9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9MjAwKQoKICAgICAgICByZXNwb25zZSA9IEFwaUNsaWVudCgpLmdldF9hbGwoJy9zZXJ2aWNlMS8nLCBsaW1pdD0yKQogICAgICAgIHJlc3BvbnNlX2xpc3QgPSBsaXN0KHJlc3BvbnNlKQogICAgICAgIGFzc2VydCBsZW4ocmVzcG9uc2UpID09IDMKICAgICAgICBhc3NlcnQgbGVuKHJlc3BvbnNlX2xpc3QpID09IDMKICAgICAgICBhc3NlcnQgcmVzcG9uc2VfbGlzdFswXVsnaWQnXSA9PSAnMScKICAgICAgICBhc3NlcnQgcmVzcG9uc2VfbGlzdFsxXVsnaWQnXSA9PSAnMicKICAgICAgICBhc3NlcnQgcmVzcG9uc2VfbGlzdFsyXVsnaWQnXSA9PSAnMycKCiAgICBAaHR0cHJldHR5LmFjdGl2YXRlCiAgICBkZWYgdGVzdF9nZXRfYWxsX25vdF9vayhzZWxmKToKCiAgICAgICAgaHR0cHJldHR5LnJlZ2lzdGVyX3VyaShodHRwcmV0dHkuR0VULCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlcnZpY2UxLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5PSd7ImVycm9yIjogImRldSBtZXJkYSJ9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9NTAwKQoKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgIHJlc3BvbnNlID0gQXBpQ2xpZW50KCkuZ2V0X2FsbCgnL3NlcnZpY2UxLycsIGxpbWl0PTIpCgogICAgQGh0dHByZXR0eS5hY3RpdmF0ZQogICAgZGVmIHRlc3RfZ2V0X2FsbF9ub3Rfb2tfc2Vjb25kX3BhZ2Uoc2VsZik6CgogICAgICAgIGh0dHByZXR0eS5yZWdpc3Rlcl91cmkoaHR0cHJldHR5LkdFVCwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZXJ2aWNlMS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keT0neyJlcnJvciI6ICJkZXUgbWVyZGEifScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPTUwMCkKCiAgICAgICAgaHR0cHJldHR5LnJlZ2lzdGVyX3VyaShodHRwcmV0dHkuR0VULCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlcnZpY2UxLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5PSd7Im9iamVjdHMiOiBbeyJpZCI6ICIxIn0sIHsiaWQiOiAiMiJ9XSwgInRvdGFsIjogM30nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz0yMDApCgogICAgICAgIHJlc3BvbnNlID0gQXBpQ2xpZW50KCkuZ2V0X2FsbCgnL3NlcnZpY2UxLycsIGxpbWl0PTIpCiAgICAgICAgYXNzZXJ0IGxlbihyZXNwb25zZSkgPT0gMwoKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgIHJlc3BvbnNlX2xpc3QgPSBsaXN0KHJlc3BvbnNlKQoKICAgIEBodHRwcmV0dHkuYWN0aXZhdGUKICAgIGRlZiB0ZXN0X3Bvc3Rfbm90X29rKHNlbGYpOgoKICAgICAgICBodHRwcmV0dHkucmVnaXN0ZXJfdXJpKGh0dHByZXR0eS5QT1NULCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlcnZpY2UxLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5PSdbeyJlcnJvciI6ICJuYW1lIHJlcXVpcmVkIn1dJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0ndGV4dC9qc29uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz01MDApCgogICAgICAgIHJlc3BvbnNlID0gQXBpQ2xpZW50KCkucG9zdCgnL3NlcnZpY2UxLycsIHsibmFtZSI6ICJhbWVyaWNhbmFzIiwgInVybCI6ICJ3d3cuYW1lcmljYW5hcy5jb20uYnIifSkKICAgICAgICBhc3NlcnQgbm90IHJlc3BvbnNlLm9rCgogICAgQGh0dHByZXR0eS5hY3RpdmF0ZQogICAgZGVmIHRlc3RfcG9zdF9vayhzZWxmKToKCiAgICAgICAgaHR0cHJldHR5LnJlZ2lzdGVyX3VyaShodHRwcmV0dHkuUE9TVCwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZXJ2aWNlMS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keT0neyJzdWNjZXNzIjogdHJ1ZX0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSd0ZXh0L2pzb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPTIwMSkKCiAgICAgICAgcmVzcG9uc2UgPSBBcGlDbGllbnQoKS5wb3N0KCcvc2VydmljZTEvJywgeyJuYW1lIjogImFtZXJpY2FuYXMiLCAidXJsIjogInd3dy5hbWVyaWNhbmFzLmNvbS5iciJ9KQogICAgICAgIGFzc2VydCByZXNwb25zZS5vawoKICAgIEBodHRwcmV0dHkuYWN0aXZhdGUKICAgIGRlZiB0ZXN0X3B1dF9ub3Rfb2soc2VsZik6CgogICAgICAgIGh0dHByZXR0eS5yZWdpc3Rlcl91cmkoaHR0cHJldHR5LlBVVCwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZXJ2aWNlMS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keT0nW3siZXJyb3IiOiAibmFtZSByZXF1aXJlZCJ9XScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU9ImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPTUwMCkKCiAgICAgICAgcmVzcG9uc2UgPSBBcGlDbGllbnQoKS5wdXQoJy9zZXJ2aWNlMS8nLCB7ImlkIjogIjEiLCAidXJsIjogInd3dy5hbWVyaWNhbmFzLmNvbS5iciJ9KQogICAgICAgIGFzc2VydCBub3QgcmVzcG9uc2Uub2sKCiAgICBAaHR0cHJldHR5LmFjdGl2YXRlCiAgICBkZWYgdGVzdF9wdXRfb2soc2VsZik6CgogICAgICAgIGh0dHByZXR0eS5yZWdpc3Rlcl91cmkoaHR0cHJldHR5LlBVVCwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZXJ2aWNlMS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keT0neyJzdWNjZXNzIjogdHJ1ZX0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSd0ZXh0L2pzb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPTIwMCkKCiAgICAgICAgcmVzcG9uc2UgPSBBcGlDbGllbnQoKS5wdXQoJy9zZXJ2aWNlMS8nLCB7ImlkIjogIjEiLCAibmFtZSI6ICJhbWVyaWNhbmFzIiwgInVybCI6ICJ3d3cuYW1lcmljYW5hcy5jb20uYnIifSkKICAgICAgICBhc3NlcnQgcmVzcG9uc2Uub2sKCiAgICBAaHR0cHJldHR5LmFjdGl2YXRlCiAgICBkZWYgdGVzdF9kZWxldGVfbm90X29rKHNlbGYpOgoKICAgICAgICBodHRwcmV0dHkucmVnaXN0ZXJfdXJpKGh0dHByZXR0eS5ERUxFVEUsICJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VydmljZTEvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9J1t7ImVycm9yIjogIm5hbWUgcmVxdWlyZWQifV0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlPSJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz01MDApCgogICAgICAgIHJlc3BvbnNlID0gQXBpQ2xpZW50KCkuZGVsZXRlKCcvc2VydmljZTEvJykKICAgICAgICBhc3NlcnQgbm90IHJlc3BvbnNlLm9rCgogICAgQGh0dHByZXR0eS5hY3RpdmF0ZQogICAgZGVmIHRlc3RfZGVsZXRlX29rKHNlbGYpOgoKICAgICAgICBodHRwcmV0dHkucmVnaXN0ZXJfdXJpKGh0dHByZXR0eS5ERUxFVEUsICJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VydmljZTEvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk9J3sic3VjY2VzcyI6IHRydWV9JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0ndGV4dC9qc29uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz0yMDApCgogICAgICAgIHJlc3BvbnNlID0gQXBpQ2xpZW50KCkuZGVsZXRlKCcvc2VydmljZTEvJykKICAgICAgICBhc3NlcnQgcmVzcG9uc2Uub2sKCiAgICBAaHR0cHJldHR5LmFjdGl2YXRlCiAgICBkZWYgdGVzdF9mdWxsX3VybF9wYXRoKHNlbGYpOgoKICAgICAgICBodHRwcmV0dHkucmVnaXN0ZXJfdXJpKGh0dHByZXR0eS5HRVQsICJodHRwOi8vbG9jYWxob3N0Ojk5OTkvc2VydmljZV9mdWxsLyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5PSdbeyJpZCI6ICIxIn1dJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZT0iYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9MjAwKQoKICAgICAgICByZXNwb25zZSA9IEFwaUNsaWVudCgpLmdldCgnaHR0cDovL2xvY2FsaG9zdDo5OTk5L3NlcnZpY2VfZnVsbC8nKQogICAgICAgIGFzc2VydCByZXNwb25zZS5vawogICAgICAgIGFzc2VydCByZXNwb25zZS5kYXRhIGlzIG5vdCBOb25lCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L3Rlc3RzL2NvbW1vbi90ZXN0X2NvbmZpZy5weQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAxMjAxNCAxMzQ2MzMzMzQ2MiAwMjMyNDEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgcHl0ZXN0CmltcG9ydCBvcwoKdHJ5OgogICAgaW1wb3J0IG1vY2sKZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jawoKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmNvbmZpZyBpbXBvcnQgQ29uZmlnLCBsb2FkX2NvbmZfZnJvbV9maWxlCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBJbnZhbGlkQ29uZmlnRXhjZXB0aW9uCgoKY2xhc3MgVGVzdENvbmZpZzoKICAgIGRlZiB0ZWFyZG93bl9tZXRob2Qoc2VsZiwgdGVzdF9tZXRob2QpOgogICAgICAgIENvbmZpZy5yZXNldCgpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uY29uZmlnLkNvbmZpZ09iaicpCiAgICBkZWYgdGVzdF9sb2FkX2NvbmZfZnJvbV9maWxlKHNlbGYsIENvbmZpZ1BhcnNlck1vY2tlZCk6CiAgICAgICAgZmlsZXBhdGggPSAnL3BhdGgvdG8vY29uZmlnL2ZpbGUuaW5pJwoKICAgICAgICBsb2FkX2NvbmZfZnJvbV9maWxlKGZpbGVwYXRoKQoKICAgICAgICBDb25maWdQYXJzZXJNb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZmlsZXBhdGgpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uY29uZmlnLkNvbmZpZ09iaicpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5jb25maWcub3MuZ2V0ZW52JykKICAgIGRlZiB0ZXN0X2xvYWRfY29uZl9mcm9tX2VudihzZWxmLCBnZXRlbnZfbW9ja2VkLCBDb25maWdQYXJzZXJNb2NrZWQpOgogICAgICAgIGZpbGVwYXRoID0gJy9wYXRoL3RvL2NvbmZpZy9maWxlLmluaScKCiAgICAgICAgZ2V0ZW52X21vY2tlZC5yZXR1cm5fdmFsdWUgPSBmaWxlcGF0aAogICAgICAgIGxvYWRfY29uZl9mcm9tX2ZpbGUoKQoKICAgICAgICBDb25maWdQYXJzZXJNb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZmlsZXBhdGgpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uY29uZmlnLkNvbmZpZ09iaicpCiAgICBkZWYgdGVzdF9sb2FkX2NvbmZfZnJvbV9kZWZhdWx0X3BhdGgoc2VsZiwgQ29uZmlnUGFyc2VyTW9ja2VkKToKICAgICAgICBsb2FkX2NvbmZfZnJvbV9maWxlKCkKCiAgICAgICAgQ29uZmlnUGFyc2VyTW9ja2VkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKG9zLmVudmlyb25bJ0RFRkFVTFRfQ09ORklHX1BBVEgnXSkKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5jb25maWcubG9nZ2VyJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmNvbmZpZy5Db25maWdPYmouX19nZXRpdGVtX18nKQogICAgZGVmIHRlc3RfbG9hZF9jb25mX2Zyb21fZGVmYXVsdF9wYXRoX3dpdGhfaW52YWxpZF9zZWN0aW9uKHNlbGYsIENvbmZpZ1BhcnNlckdldEl0ZW1Nb2NrZWQsIGxvZ2dlcl9tb2NrZWQpOgogICAgICAgIGZyb20gY29uZmlncGFyc2VyIGltcG9ydCBOb1NlY3Rpb25FcnJvcgoKICAgICAgICBmaWxlcGF0aCA9ICcvcGF0aC90by9jb25maWcvZmlsZS5pbmknCgogICAgICAgIENvbmZpZ1BhcnNlckdldEl0ZW1Nb2NrZWQuc2lkZV9lZmZlY3QgPSBOb1NlY3Rpb25FcnJvcignJykKICAgICAgICBhc3NlcnQgbGVuKGxvYWRfY29uZl9mcm9tX2ZpbGUoZmlsZXBhdGgsIHNlY3Rpb249J2ludmFsaWRzZWN0aW9uJykpID09IDAKICAgICAgICBsb2dnZXJfbW9ja2VkLndhcm4uYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCiAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIFwiaW52YWxpZHNlY3Rpb25cIiBzZWN0aW9uIGluIFwiL3BhdGgvdG8vY29uZmlnL2ZpbGUuaW5pXCIiCiAgICAgICAgKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmNvbmZpZy5sb2FkX2NvbmZfZnJvbV9maWxlJykKICAgIGRlZiB0ZXN0X2dldChzZWxmLCBsb2FkX2NvbmZfZnJvbV9maWxlX21vY2tlZCwgY29uZmlnX2ZpeHR1cmUpOgogICAgICAgIGxvYWRfY29uZl9mcm9tX2ZpbGVfbW9ja2VkLnJldHVybl92YWx1ZSA9IGNvbmZpZ19maXh0dXJlCiAgICAgICAgYXNzZXJ0IENvbmZpZy5nZXQoJ2tleScpID09IGNvbmZpZ19maXh0dXJlWydrZXknXQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmNvbmZpZy5sb2FkX2NvbmZfZnJvbV9maWxlJykKICAgIGRlZiB0ZXN0X2dldF9pbnZhbGlkX2tleShzZWxmLCBsb2FkX2NvbmZfZnJvbV9maWxlX21vY2tlZCwgY29uZmlnX2ZpeHR1cmUpOgogICAgICAgIGxvYWRfY29uZl9mcm9tX2ZpbGVfbW9ja2VkLnJldHVybl92YWx1ZSA9IGNvbmZpZ19maXh0dXJlCiAgICAgICAgYXNzZXJ0ICdpbnZhbGlka2V5JyBub3QgaW4gY29uZmlnX2ZpeHR1cmUKICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoSW52YWxpZENvbmZpZ0V4Y2VwdGlvbik6CiAgICAgICAgICAgIENvbmZpZy5nZXQoJ2ludmFsaWRrZXknKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmNvbmZpZy5sb2FkX2NvbmZfZnJvbV9maWxlJykKICAgIGRlZiB0ZXN0X2dldF9pbnZhbGlkX2tleV93aXRoX2RlZmF1bHQoc2VsZiwgbG9hZF9jb25mX2Zyb21fZmlsZV9tb2NrZWQsIGNvbmZpZ19maXh0dXJlKToKICAgICAgICBsb2FkX2NvbmZfZnJvbV9maWxlX21vY2tlZC5yZXR1cm5fdmFsdWUgPSBjb25maWdfZml4dHVyZQogICAgICAgIGFzc2VydCAnaW52YWxpZGtleScgbm90IGluIGNvbmZpZ19maXh0dXJlCiAgICAgICAgYXNzZXJ0IENvbmZpZy5nZXQoJ2ludmFsaWRrZXknLCBkZWZhdWx0PSdkZWZhdWx0X3ZhbHVlJykgPT0gJ2RlZmF1bHRfdmFsdWUnCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uY29uZmlnLmxvYWRfY29uZl9mcm9tX2ZpbGUnKQogICAgZGVmIHRlc3RfZ2V0X3dpdGhfaW52YWxpZF9zZWN0aW9uKHNlbGYsIGxvYWRfY29uZl9mcm9tX2ZpbGVfbW9ja2VkLCBjb25maWdfZml4dHVyZSk6CiAgICAgICAgbG9hZF9jb25mX2Zyb21fZmlsZV9tb2NrZWQucmV0dXJuX3ZhbHVlID0ge30KICAgICAgICB3aXRoIHB5dGVzdC5yYWlzZXMoSW52YWxpZENvbmZpZ0V4Y2VwdGlvbik6CiAgICAgICAgICAgIENvbmZpZy5nZXQoJ2tleScsIHNlY3Rpb249J2ludmFsaWRzZWN0aW9uJykKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5jb25maWcubG9hZF9jb25mX2Zyb21fZmlsZScpCiAgICBkZWYgdGVzdF9rZXlzX2FscmVhZF9sb2FkZWQoc2VsZiwgbG9hZF9jb25mX2Zyb21fZmlsZV9tb2NrZWQsIGNvbmZpZ19maXh0dXJlKToKICAgICAgICBsb2FkX2NvbmZfZnJvbV9maWxlX21vY2tlZC5yZXR1cm5fdmFsdWUgPSBjb25maWdfZml4dHVyZQogICAgICAgIENvbmZpZy5fbG9hZCgpCiAgICAgICAgYXNzZXJ0IENvbmZpZy5rZXlzKCkgPT0gY29uZmlnX2ZpeHR1cmUua2V5cygpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uY29uZmlnLmxvYWRfY29uZl9mcm9tX2ZpbGUnKQogICAgZGVmIHRlc3Rfa2V5cyhzZWxmLCBsb2FkX2NvbmZfZnJvbV9maWxlX21vY2tlZCwgY29uZmlnX2ZpeHR1cmUpOgogICAgICAgIGxvYWRfY29uZl9mcm9tX2ZpbGVfbW9ja2VkLnJldHVybl92YWx1ZSA9IGNvbmZpZ19maXh0dXJlCiAgICAgICAgYXNzZXJ0IENvbmZpZy5rZXlzKCkgPT0gY29uZmlnX2ZpeHR1cmUua2V5cygpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uY29uZmlnLmxvYWRfY29uZl9mcm9tX2ZpbGUnKQogICAgZGVmIHRlc3Rfa2V5c193aXRoX2ludmFsaWRfc2VjdGlvbihzZWxmLCBsb2FkX2NvbmZfZnJvbV9maWxlX21vY2tlZCk6CiAgICAgICAgbG9hZF9jb25mX2Zyb21fZmlsZV9tb2NrZWQucmV0dXJuX3ZhbHVlID0ge30KICAgICAgICBhc3NlcnQgbm90IENvbmZpZy5rZXlzKHNlY3Rpb249J2ludmFsaWRzZWN0aW9uJykKCiAgICBAbW9jay5wYXRjaCgnb3MuZ2V0ZW52JykKICAgIGRlZiB0ZXN0X3Jl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IHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgZmluZHNwYXJrCmZpbmRzcGFyay5pbml0KCkKCiMgaXMgaW1wb3J0YW50IHRvIGltcG9ydCB0aGVzZSBjbGFzc2VzIGFmdGVyIGZpbmRzcGFyay5pbml0IGNhbGwKZnJvbSBweXNwYXJrLnRlc3RzIGltcG9ydCBSZXVzZWRQeVNwYXJrVGVzdENhc2UKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmRhdGFfc291cmNlX3Byb3ZpZGVyIGltcG9ydCBnZXRfc3Bhcmtfc2Vzc2lvbgoKdHJ5OgogICAgaW1wb3J0IG1vY2sKZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jawoKCmNsYXNzIFRlc3REYXRhU291cmNlUHJvdmlkZXI6CiAgICBAbW9jay5wYXRjaCgicHlzcGFyay5zcWwuU3BhcmtTZXNzaW9uIikKICAgIGRlZiB0ZXN0X2dldF9zcGFya19zZXNzaW9uKHNlbGYsIG1vY2tlZF9zZXNzaW9uKToKICAgICAgICBzcGFyayA9IGdldF9zcGFya19zZXNzaW9uKCkKICAgICAgICBhc3NlcnQgc3BhcmsKICAgICAgICBtb2NrZWRfc2Vzc2lvbi5hc3NlcnRfaGFzX2NhbGxzKFsKICAgICAgICAgICAgbW9jay5jYWxsLmJ1aWxkZXIuYXBwTmFtZSgnbWFydmluLWVuZ2luZScpLAogICAgICAgICAgICBtb2NrLmNhbGwuYnVpbGRlci5hcHBOYW1lKCkuZ2V0T3JDcmVhdGUoKV0KICAgICAgICApCgogICAgICAgIHNwYXJrID0gZ2V0X3NwYXJrX3Nlc3Npb24oYXBwX25hbWU9J1Rlc3RFbmdpbmUnKQogICAgICAgIGFzc2VydCBzcGFyawogICAgICAgIG1vY2tlZF9zZXNzaW9uLmFzc2VydF9oYXNfY2FsbHMoWwogICAgICAgICAgICBtb2NrLmNhbGwuYnVpbGRlci5hcHBOYW1lKCdUZXN0RW5naW5lJyksCiAgICAgICAgICAgIG1vY2suY2FsbC5idWlsZGVyLmFwcE5hbWUoKS5nZXRPckNyZWF0ZSgpXQogICAgICAgICkKCiAgICAgICAgc3BhcmsgPSBnZXRfc3Bhcmtfc2Vzc2lvbihjb25maWdzPVsoInNwYXJrLnh4eCIsICJ0cnVlIildKQogICAgICAgIGFzc2VydCBzcGFyawogICAgICAgIG1vY2tlZF9zZXNzaW9uLmFzc2VydF9oYXNfY2FsbHMoWwogICAgICAgICAgICBtb2NrLmNhbGwuYnVpbGRlci5hcHBOYW1lKCdUZXN0RW5naW5lJyksCiAgICAgICAgICAgIG1vY2suY2FsbC5idWlsZGVyLmFwcE5hbWUoKS5nZXRPckNyZWF0ZSgpXQogICAgICAgICkKCiAgICBAbW9jay5wYXRjaCgicHlzcGFyay5zcWwuU3BhcmtTZXNzaW9uIikKICAgIGRlZiB0ZXN0X2dldF9zcGFya19zZXNzaW9uX3dpdGhfaGl2ZShzZWxmLCBtb2NrZWRfc2Vzc2lvbik6CiAgICAgICAgc3BhcmsgPSBnZXRfc3Bhcmtfc2Vzc2lvbihlbmFibGVfaGl2ZT1UcnVlKQogICAgICAgIGFzc2VydCBzcGFyawoKICAgICAgICBtb2NrZWRfc2Vzc2lvbi5hc3NlcnRfaGFzX2NhbGxzKFsKICAgICAgICAgICAgbW9jay5jYWxsLmJ1aWxkZXIuYXBwTmFtZSgnbWFydmluLWVuZ2luZScpLAogICAgICAgICAgICBtb2NrLmNhbGwuYnVpbGRlci5hcHBOYW1lKCkuZW5hYmxlSGl2ZVN1cHBvcnQoKSwKICAgICAgICAgICAgbW9jay5jYWxsLmJ1aWxkZXIuYXBwTmFtZSgpLmVuYWJsZUhpdmVTdXBwb3J0KCkuZ2V0T3JDcmVhdGUoKV0KICAgICAgICApCgoKY2xhc3MgVGVzdFNwYXJrRGF0YVNvdXJjZShSZXVzZWRQeVNwYXJrVGVzdENhc2UpOgogICAgZGVmIHRlc3Rfc3BhcmtfaW5pdGlhbGl6YXRpb24oc2VsZik6CiAgICAgICAgcmRkID0gc2VsZi5zYy5wYXJhbGxlbGl6ZShbJ0hpIHRoZXJlJywgJ0hpJ10pCiAgICAgICAgY291bnRlZCA9IHJkZC5mbGF0TWFwKGxhbWJkYSB3b3JkOiB3b3JkLnNwbGl0KCcgJykpLm1hcChsYW1iZGEgd29yZDogKHdvcmQsIDEpKS5yZWR1Y2VCeUtleShsYW1iZGEgYWNjLCBuOiBhY2MgKyBuKQogICAgICAgIGFzc2VydCBjb3VudGVkLmNvbGxlY3RBc01hcCgpID09IHsnSGknOiAyLCAndGhlcmUnOiAxfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L3Rlc3RzL2NvbW1vbi90ZXN0X2RhdGEucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAxMjIyMiAxMzQ2MzMzMzQ2MiAwMjI3MDYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgb3MKaW1wb3J0IHB5dGVzdAp0cnk6CiAgICBpbXBvcnQgbW9jawpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBpbXBvcnQgdW5pdHRlc3QubW9jayBhcyBtb2NrCgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uZGF0YSBpbXBvcnQgTWFydmluRGF0YQpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uZXhjZXB0aW9ucyBpbXBvcnQgSW52YWxpZENvbmZpZ0V4Y2VwdGlvbgpmcm9tIGlvIGltcG9ydCBJT0Jhc2UKCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIGRhdGFfcGF0aCgpOgogICAgcmV0dXJuIG9zLnBhdGguZXhwYW5kdXNlcigiL3RtcC9kYXRhIikKCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIGRhdGFfcGF0aF9rZXkoKToKICAgIHJldHVybiBNYXJ2aW5EYXRhLl9rZXkKCgpkZWYgdGVzdF9yZWFkX2Zyb21fZW52KGRhdGFfcGF0aF9rZXksIGRhdGFfcGF0aCk6CiAgICBvcy5lbnZpcm9uW2RhdGFfcGF0aF9rZXldID0gZGF0YV9wYXRoCiAgICBhc3NlcnQgTWFydmluRGF0YS5kYXRhX3BhdGggPT0gb3MuZW52aXJvbltkYXRhX3BhdGhfa2V5XQoKCmRlZiB0ZXN0X3BhdGhfbm90X3NldChkYXRhX3BhdGhfa2V5KToKICAgIGRlbCBvcy5lbnZpcm9uW2RhdGFfcGF0aF9rZXldCiAgICBwYXRoXyA9IE5vbmUKICAgIHRyeToKICAgICAgICBwYXRoXyA9IE1hcnZpbkRhdGEuZGF0YV9wYXRoCiAgICBleGNlcHQgSW52YWxpZENvbmZpZ0V4Y2VwdGlvbjoKICAgICAgICBhc3NlcnQgbm90IHBhdGhfCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uZGF0YS5jaGVja19wYXRoJykKZGVmIHRlc3RfdW5hYmxlX3RvX2NyZWF0ZV9wYXRoKGNoZWNrX3BhdGgsIGRhdGFfcGF0aF9rZXksIGRhdGFfcGF0aCk6CiAgICBvcy5lbnZpcm9uW2RhdGFfcGF0aF9rZXldID0gZGF0YV9wYXRoCiAgICBjaGVja19wYXRoLnJldHVybl92YWx1ZSA9IEZhbHNlCgogICAgcGF0aF8gPSBOb25lCiAgICB0cnk6CiAgICAgICAgcGF0aF8gPSBNYXJ2aW5EYXRhLmRhdGFfcGF0aAogICAgZXhjZXB0IEludmFsaWRDb25maWdFeGNlcHRpb246CiAgICAgICAgYXNzZXJ0IG5vdCBwYXRoXwoKCmRlZiB0ZXN0X2xvYWRfZGF0YV9mcm9tX2ZpbGVzeXN0ZW0oZGF0YV9wYXRoX2tleSwgZGF0YV9wYXRoKToKICAgIGRhdGEgPSAncmV0dXJuIHZhbHVlJwoKICAgICMgSWYgdGhlIGRhdGEgd2FzIG5vdCBmb3VuZCB0cnkgdG8gbG9hZCBmcm9tIGZpbGVzeXN0ZW0KICAgIHdpdGggbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5kYXRhLm9wZW4nLCBjcmVhdGU9VHJ1ZSkgYXMgbW9ja19vcGVuOgogICAgICAgIG1vY2tfb3Blbi5yZXR1cm5fdmFsdWUgPSBtb2NrLk1hZ2ljTW9jayhzcGVjPUlPQmFzZSkKICAgICAgICBtb2NrZWRfZnAgPSBtb2NrX29wZW4ucmV0dXJuX3ZhbHVlLl9fZW50ZXJfXy5yZXR1cm5fdmFsdWUKICAgICAgICBtb2NrZWRfZnAucmVhZC5yZXR1cm5fdmFsdWUgPSBkYXRhCiAgICAgICAgY29udGVudCA9IE1hcnZpbkRhdGEubG9hZF9kYXRhKG9zLnBhdGguam9pbignbmFtZWRfZmVhdHVyZXMnLCAnYnJhbmRzLmpzb24nKSkKCiAgICBtb2NrZWRfZnAucmVhZC5hc3NlcnRfY2FsbGVkX29uY2UoKQogICAgYXNzZXJ0IGNvbnRlbnQgPT0gZGF0YQoKCmRlZiB0ZXN0X2xvYWRfZGF0YV9mcm9tX2ZpbGVzeXN0ZW1fZXhjZXB0aW9uKGRhdGFfcGF0aF9rZXksIGRhdGFfcGF0aCk6CiAgICB3aXRoIG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uZGF0YS5vcGVuJykgYXMgbW9ja19vcGVuOgogICAgICAgIG1vY2tfb3Blbi5zaWRlX2VmZmVjdCA9IElPRXJyb3IKCiAgICAgICAgIyBsb2FkX2RhdGEgc2hvdWxkIHByb3BhZ2F0ZSBJT0Vycm9yCiAgICAgICAgd2l0aCBweXRlc3QucmFpc2VzKElPRXJyb3IpOgogICAgICAgICAgICBNYXJ2aW5EYXRhLmxvYWRfZGF0YShvcy5wYXRoLmpvaW4oJ25hbWVkX2ZlYXR1cmVzJywgJ2JyYW5kcy5qc29uJykpCgoKZGVmIHRlc3RfZGF0YV9rZXlfdXNpbmdfYWJzcGF0aChkYXRhX3BhdGhfa2V5LCBkYXRhX3BhdGgpOgogICAgYXNzZXJ0IE1hcnZpbkRhdGEuX2NvbnZlcnRfcGF0aF90b19rZXkob3MucGF0aC5qb2luKGRhdGFfcGF0aCwgJ2JyYW5kcy5qc29uJykpID09ICdicmFuZHMuanNvbicKCgpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5kYXRhLnByb2dyZXNzYmFyJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uZGF0YS5yZXF1ZXN0cycpCmRlZiB0ZXN0X2Rvd25sb2FkX2ZpbGUobW9ja2VkX3JlcXVlc3RzLCBtb2NrZWRfcHJvZ3Jlc3NiYXIpOgogICAgZmlsZV91cmwgPSAnZ29vZ2xlLmNvbS9maWxlLmpzb24nCiAgICBmaWxlX3BhdGggPSBNYXJ2aW5EYXRhLmRvd25sb2FkX2ZpbGUoZmlsZV91cmwpCiAgICBhc3NlcnQgZmlsZV9wYXRoID09ICcvdG1wL2RhdGEvZmlsZS5qc29uJwoKICAgIGZpbGVfcGF0aCA9IE1hcnZpbkRhdGEuZG93bmxvYWRfZmlsZShmaWxlX3VybCwgbG9jYWxfZmlsZV9uYW1lPSdteWZpbGUnKQogICAgYXNzZXJ0IGZpbGVfcGF0aCA9PSAnL3RtcC9kYXRhL215ZmlsZScKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmRhdGEucHJvZ3Jlc3NiYXInKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5kYXRhLnJlcXVlc3RzJykKZGVmIHRlc3RfZG93bmxvYWRfZmlsZV9kZWxldGVfZmlsZV9pZl9leGNlcHRpb24obW9ja2VkX3JlcXVlc3RzLCBtb2NrZWRfcHJvZ3Jlc3NiYXIpOgogICAgbW9ja2VkX3JlcXVlc3RzLmdldC5zaWRlX2VmZmVjdCA9IEV4Y2VwdGlvbigpCiAgICB3aXRoIG9wZW4oJy90bXAvZGF0YS9lcnJvci5qc29uJywgJ3cnKSBhcyBmOgogICAgICAgIGYud3JpdGUoJ3Rlc3QnKQogICAgCiAgICBmaWxlX3VybCA9ICdnb29nbGUuY29tL2Vycm9yLmpzb24nCiAgICB3aXRoIHB5dGVzdC5yYWlzZXMoRXhjZXB0aW9uKSBhcyBleGNpbmZvOgogICAgICAgIGZpbGVfcGF0aCA9IE1hcnZpbkRhdGEuZG93bmxvYWRfZmlsZShmaWxlX3VybCwgZm9yY2U9VHJ1ZSkKCiAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoJy90bXAvZGF0YS9lcnJvci5qc29uJykgaXMgRmFsc2UKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmRhdGEucHJvZ3Jlc3NiYXIuUHJvZ3Jlc3NCYXInKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5kYXRhLnJlcXVlc3RzJykKZGVmIHRlc3RfZG93bmxvYWRfZmlsZV93cml0ZV9maWxlX2lmX2NvbnRlbnQobW9ja2VkX3JlcXVlc3RzLCBtb2NrZWRfcHJvZ3Jlc3NiYXIpOgogICAgZnJvbSByZXF1ZXN0cyBpbXBvcnQgUmVzcG9uc2UKICAgIGZpbGVfdXJsID0gJ2dvb2dsZS5jb20vZmlsZS5qc29uJwoKICAgIHJlc3BvbnNlID0gbW9jay5Nb2NrKHNwZWM9UmVzcG9uc2UpCiAgICByZXNwb25zZS5pdGVyX2NvbnRlbnQucmV0dXJuX3ZhbHVlID0gJ3gnCiAgICBtb2NrZWRfcmVxdWVzdHMuZ2V0LnJldHVybl92YWx1ZSA9IHJlc3BvbnNlCiAgICAgICAgCiAgICBtb2NrZWRfb3BlbiA9IG1vY2subW9ja19vcGVuKCkKICAgIHdpdGggbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5kYXRhLm9wZW4nLCBtb2NrZWRfb3BlbiwgY3JlYXRlPVRydWUpOgogICAgICAgIE1hcnZpbkRhdGEuZG93bmxvYWRfZmlsZShmaWxlX3VybCwgZm9yY2U9VHJ1ZSkKCiAgICBtb2NrZWRfb3Blbi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnL3RtcC9kYXRhL2ZpbGUuanNvbicsICd3YicpCiAgICBoYW5kbGUgPSBtb2NrZWRfb3BlbigpCiAgICBoYW5kbGUud3JpdGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ3gnKQoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5jb21tb24uZGF0YS5wcm9ncmVzc2Jhci5Qcm9ncmVzc0JhcicpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guY29tbW9uLmRhdGEucmVxdWVzdHMnKQpkZWYgdGVzdF9kb3dubG9hZF9maWxlX2RvbnRfd3JpdGVfZmlsZV9pZl9ub19jb250ZW50KG1vY2tlZF9yZXF1ZXN0cywgbW9ja2VkX3Byb2dyZXNzYmFyKToKICAgIGZyb20gcmVxdWVzdHMgaW1wb3J0IFJlc3BvbnNlCiAgICBmaWxlX3VybCA9ICdnb29nbGUuY29tL2ZpbGUuanNvbicKCiAgICByZXNwb25zZSA9IG1vY2suTW9jayhzcGVjPVJlc3BvbnNlKQogICAgcmVzcG9uc2UuaXRlcl9jb250ZW50LnJldHVybl92YWx1ZSA9ICcnCiAgICBtb2NrZWRfcmVxdWVzdHMuZ2V0LnJldHVybl92YWx1ZSA9IHJlc3BvbnNlCiAgICAgICAgCiAgICBtb2NrZWRfb3BlbiA9IG1vY2subW9ja19vcGVuKCkKICAgIHdpdGggbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmNvbW1vbi5kYXRhLm9wZW4nLCBtb2NrZWRfb3BlbiwgY3JlYXRlPVRydWUpOgogICAgICAgIE1hcnZpbkRhdGEuZG93bmxvYWRfZmlsZShmaWxlX3VybCwgZm9yY2U9VHJ1ZSkKCiAgICBtb2NrZWRfb3Blbi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnL3RtcC9kYXRhL2ZpbGUuanNvbicsICd3YicpCiAgICBoYW5kbGUgPSBtb2NrZWRfb3BlbigpCiAgICBhc3NlcnQgaGFuZGxlLndyaXRlLmNhbGxfY291bnQgPT0gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L3Rlc3RzL2VuZ2luZV9iYXNlL3Rlc3RfZW5naW5lX2Jhc2VfdHJhaW5pbmcucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwMjYwNSAxMzQ2MzMzMzQ2MiAwMjcxMDIAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgcHl0ZXN0Cgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5lbmdpbmVfYmFzZSBpbXBvcnQgRW5naW5lQmFzZVRyYWluaW5nCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBlbmdpbmVfYWN0aW9uKCk6CiAgICBjbGFzcyBFbmdpbmVBY3Rpb24oRW5naW5lQmFzZVRyYWluaW5nKToKICAgICAgICBkZWYgZXhlY3V0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgICAgIHJldHVybiAxCgogICAgcmV0dXJuIEVuZ2luZUFjdGlvbihkZWZhdWx0X3Jvb3RfcGF0aD0iL3RtcC8ubWFydmluIikKCgpjbGFzcyBUZXN0RW5naW5lQmFzZVRyYWluaW5nOgoKICAgIGRlZiB0ZXN0X2RhdGFzZXQoc2VsZiwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgZW5naW5lX2FjdGlvbi5tYXJ2aW5fZGF0YXNldCA9IFsxXQogICAgICAgIGFzc2VydCBlbmdpbmVfYWN0aW9uLm1hcnZpbl9kYXRhc2V0ID09IGVuZ2luZV9hY3Rpb24uX2RhdGFzZXQgPT0gWzFdCgogICAgZGVmIHRlc3RfbW9kZWwoc2VsZiwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgZW5naW5lX2FjdGlvbi5tYXJ2aW5fbW9kZWwgPSBbMl0KICAgICAgICBhc3NlcnQgZW5naW5lX2FjdGlvbi5tYXJ2aW5fbW9kZWwgPT0gZW5naW5lX2FjdGlvbi5fbW9kZWwgPT0gWzJdCgogICAgZGVmIHRlc3RfbWV0cmljcyhzZWxmLCBlbmdpbmVfYWN0aW9uKToKICAgICAgICBlbmdpbmVfYWN0aW9uLm1hcnZpbl9tZXRyaWNzID0gWzNdCiAgICAgICAgYXNzZXJ0IGVuZ2luZV9hY3Rpb24ubWFydmluX21ldHJpY3MgPT0gZW5naW5lX2FjdGlvbi5fbWV0cmljcyA9PSBbM10KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvdGVzdHMvZW5naW5lX2Jhc2UvdGVzdF9lbmdpbmVfYmFzZV9hY3Rpb24ucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDMyMTIyIDEzNDYzMzMzNDYyIDAyNjU0MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS91c3IvYmluL2VudiBweXRob24KIyBjb2Rpbmc9dXRmLTgKCiMgQ29weXJpZ2h0IFsyMDE3XSBbQjJXIERpZ2l0YWxdCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCmZyb20gYnVpbHRpbnMgaW1wb3J0IHN0cgppbXBvcnQgam9ibGliIGFzIHNlcmlhbGl6ZXIKaW1wb3J0IHB5dGVzdAppbXBvcnQgb3MKaW1wb3J0IHNodXRpbAppbXBvcnQgY29weQpmcm9tIG1vY2sgaW1wb3J0IEFOWQp0cnk6CiAgICBpbXBvcnQgbW9jawpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBpbXBvcnQgdW5pdHRlc3QubW9jayBhcyBtb2NrCgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5lbmdpbmVfYmFzZSBpbXBvcnQgRW5naW5lQmFzZUJhdGNoQWN0aW9uCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94LmVuZ2luZV9iYXNlIGltcG9ydCBFbmdpbmVCYXNlQWN0aW9uLCBFbmdpbmVCYXNlT25saW5lQWN0aW9uCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94LmVuZ2luZV9iYXNlLnN0dWJzLmFjdGlvbnNfcGIyIGltcG9ydCBIZWFsdGhDaGVja1Jlc3BvbnNlLCBIZWFsdGhDaGVja1JlcXVlc3QKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guZW5naW5lX2Jhc2Uuc3R1YnMuYWN0aW9uc19wYjIgaW1wb3J0IE9ubGluZUFjdGlvblJlcXVlc3QsIFJlbG9hZFJlcXVlc3QsIEJhdGNoQWN0aW9uUmVxdWVzdAoKCkBweXRlc3QuZml4dHVyZQpkZWYgZW5naW5lX2FjdGlvbigpOgogICAgY2xhc3MgRW5naW5lQWN0aW9uKEVuZ2luZUJhc2VBY3Rpb24pOgogICAgICAgIGRlZiBleGVjdXRlKHNlbGYsIHBhcmFtcywgKiprd2FyZ3MpOgogICAgICAgICAgICByZXR1cm4gMQoKICAgIHJldHVybiBFbmdpbmVBY3Rpb24oZGVmYXVsdF9yb290X3BhdGg9Ii90bXAvLm1hcnZpbiIpCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBiYXRjaF9lbmdpbmVfYWN0aW9uKCk6CiAgICBjbGFzcyBCYXRjaEVuZ2luZUFjdGlvbihFbmdpbmVCYXNlQmF0Y2hBY3Rpb24pOgogICAgICAgIGRlZiBleGVjdXRlKHNlbGYsIHBhcmFtcywgKiprd2FyZ3MpOgogICAgICAgICAgICByZXR1cm4gMQoKICAgIHJldHVybiBCYXRjaEVuZ2luZUFjdGlvbihkZWZhdWx0X3Jvb3RfcGF0aD0iL3RtcC8ubWFydmluIikKCgpjbGFzcyBUZXN0RW5naW5lQmFzZUFjdGlvbjoKICAgIGRlZiBzZXR1cChzZWxmKToKICAgICAgICBzaHV0aWwucm10cmVlKCIvdG1wLy5tYXJ2aW4iLCBpZ25vcmVfZXJyb3JzPVRydWUpCgogICAgZGVmIHRlc3RfcmV0cmlldmVfb2JqKHNlbGYpOgogICAgICAgIHBhdGggPSAnL3RtcC90ZXN0LW9iaicKICAgICAgICBvYmogPSBbMSwgMl0KICAgICAgICBzZXJpYWxpemVyLmR1bXAob2JqLCBvcGVuKHBhdGgsICd3YicpKQogICAgICAgIGFzc2VydCBvYmogPT0gRW5naW5lQmFzZUFjdGlvbi5yZXRyaWV2ZV9vYmoocGF0aCkKCiAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKICAgICAgICBjbGFzcyBFbmdpbmVBY3Rpb24oRW5naW5lQmFzZUFjdGlvbik6CiAgICAgICAgICAgIGRlZiBleGVjdXRlKHNlbGYsIHBhcmFtcywgKiprd2FyZ3MpOgogICAgICAgICAgICAgICAgcmV0dXJuIDEKCiAgICAgICAgZW5naW5lID0gRW5naW5lQWN0aW9uKHBhcmFtcz17IngiLCAxfSwgcGVyc2lzdGVuY2VfbW9kZT0neCcpCgogICAgICAgIGFzc2VydCBlbmdpbmUuX3BhcmFtcyA9PSB7IngiLCAxfQogICAgICAgIGFzc2VydCBlbmdpbmUuX3BlcnNpc3RlbmNlX21vZGUgPT0gJ3gnCgogICAgZGVmIHRlc3RfZ2V0X29iamVjdF9maWxlX3BhdGgoc2VsZiwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgYXNzZXJ0IGVuZ2luZV9hY3Rpb24uX2dldF9vYmplY3RfZmlsZV9wYXRoKG9iamVjdF9yZWZlcmVuY2U9InhwYXRoIikgPT0gIi90bXAvLm1hcnZpbi90ZXN0X2Jhc2VfYWN0aW9uL3hwYXRoIgoKICAgIGRlZiB0ZXN0X3NhdmVfb2JqX21lbW9yeV9wZXJzaXN0ZW5jZShzZWxmLCBlbmdpbmVfYWN0aW9uKToKICAgICAgICBvYmogPSBbNiwgNSwgNF0KICAgICAgICBvYmplY3RfcmVmZXJlbmNlID0gJ19wYXJhbXMnCiAgICAgICAgZW5naW5lX2FjdGlvbi5fc2F2ZV9vYmoob2JqZWN0X3JlZmVyZW5jZSwgb2JqKQoKICAgICAgICBhc3NlcnQgb2JqID09IGVuZ2luZV9hY3Rpb24uX3BhcmFtcwogICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMoIi90bXAvLm1hcnZpbi90ZXN0X2Jhc2VfYWN0aW9uL3BhcmFtcyIpCgogICAgZGVmIHRlc3Rfc2F2ZV9vYmpfbG9jYWxfcGVyc2lzdGVuY2Uoc2VsZiwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgb2JqID0gWzYsIDUsIDRdCiAgICAgICAgb2JqZWN0X3JlZmVyZW5jZSA9ICdfcGFyYW1zJwogICAgICAgIGVuZ2luZV9hY3Rpb24uX3BlcnNpc3RlbmNlX21vZGUgPSAnbG9jYWwnCiAgICAgICAgZW5naW5lX2FjdGlvbi5fc2F2ZV9vYmoob2JqZWN0X3JlZmVyZW5jZSwgb2JqKQoKICAgICAgICBhc3NlcnQgb2JqID09IGVuZ2luZV9hY3Rpb24uX3BhcmFtcwogICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cygiL3RtcC8ubWFydmluL3Rlc3RfYmFzZV9hY3Rpb24vcGFyYW1zIikKICAgICAgICBhc3NlcnQgbGlzdChlbmdpbmVfYWN0aW9uLl9sb2NhbF9zYXZlZF9vYmplY3RzLmtleXMoKSkgPT0gW29iamVjdF9yZWZlcmVuY2VdCgogICAgZGVmIHRlc3RfcmVsZWFzZV9zYXZlZF9vYmplY3RzKHNlbGYsIGVuZ2luZV9hY3Rpb24pOgogICAgICAgIG9iaiA9IFs2LCA1LCA0XQogICAgICAgIG9iamVjdF9yZWZlcmVuY2UgPSAnX3BhcmFtcycKICAgICAgICBlbmdpbmVfYWN0aW9uLl9wZXJzaXN0ZW5jZV9tb2RlID0gJ2xvY2FsJwogICAgICAgIGVuZ2luZV9hY3Rpb24uX3NhdmVfb2JqKG9iamVjdF9yZWZlcmVuY2UsIG9iaikKCiAgICAgICAgYXNzZXJ0IGxpc3QoZW5naW5lX2FjdGlvbi5fbG9jYWxfc2F2ZWRfb2JqZWN0cy5rZXlzKCkpID09IFtvYmplY3RfcmVmZXJlbmNlXQogICAgICAgIGVuZ2luZV9hY3Rpb24uX3JlbGVhc2VfbG9jYWxfc2F2ZWRfb2JqZWN0cygpCiAgICAgICAgYXNzZXJ0IGVuZ2luZV9hY3Rpb24uX3BhcmFtcyBpcyBOb25lCgogICAgZGVmIHRlc3Rfc2F2ZV90d29fdGltZXMoc2VsZiwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgb2JqID0gWzYsIDUsIDRdCiAgICAgICAgb2JqZWN0X3JlZmVyZW5jZSA9ICdfcGFyYW1zJwogICAgICAgIGVuZ2luZV9hY3Rpb24uX3BlcnNpc3RlbmNlX21vZGUgPSAnbG9jYWwnCgogICAgICAgIGVuZ2luZV9hY3Rpb24uX3NhdmVfb2JqKG9iamVjdF9yZWZlcmVuY2UsIG9iaikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGVuZ2luZV9hY3Rpb24uX3NhdmVfb2JqKG9iamVjdF9yZWZlcmVuY2UsIG9iaikKICAgICAgICAgICAgYXNzZXJ0IEZhbHNlCgogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgYXNzZXJ0IHN0cihlLmFyZ3NbMF0pID09ICdNdWx0aXBsZUFzc2lnbkV4Y2VwdGlvbicKICAgICAgICAgICAgYXNzZXJ0IHN0cihlLmFyZ3NbMV0pID09ICdfcGFyYW1zJwoKICAgIGRlZiB0ZXN0X2xvYWRfb2JqX2xvY2FsX3BlcnNpc3RlbmNlKHNlbGYsIGVuZ2luZV9hY3Rpb24pOgogICAgICAgIGVuZ2luZV9hY3Rpb24yID0gY29weS5jb3B5KGVuZ2luZV9hY3Rpb24pCgogICAgICAgIG9iaiA9IFs2LCA1LCA0XQogICAgICAgIG9iamVjdF9yZWZlcmVuY2UgPSAnX3BhcmFtcycKICAgICAgICBlbmdpbmVfYWN0aW9uLl9wZXJzaXN0ZW5jZV9tb2RlID0gJ2xvY2FsJwogICAgICAgIGVuZ2luZV9hY3Rpb24uX3NhdmVfb2JqKG9iamVjdF9yZWZlcmVuY2UsIG9iaikKCiAgICAgICAgZW5naW5lX2FjdGlvbjIuX3BlcnNpc3RlbmNlX21vZGUgPSAnbG9jYWwnCiAgICAgICAgZW5naW5lX2FjdGlvbjIuX2xvYWRfb2JqKG9iamVjdF9yZWZlcmVuY2UpCgogICAgICAgIGFzc2VydCBvYmogPT0gZW5naW5lX2FjdGlvbjIuX3BhcmFtcwoKICAgICAgICBlbmdpbmVfYWN0aW9uMi5fcGVyc2lzdGVuY2VfbW9kZSA9ICdtZW1vcnknCiAgICAgICAgZW5naW5lX2FjdGlvbjIuX3BhcmFtcyA9IFsxXQogICAgICAgIGVuZ2luZV9hY3Rpb24yLl9sb2FkX29iaihvYmplY3RfcmVmZXJlbmNlKQoKICAgICAgICBhc3NlcnQgWzFdID09IGVuZ2luZV9hY3Rpb24yLl9wYXJhbXMKCiAgICBkZWYgdGVzdF9oZWFsdGhfY2hlY2tfb2soc2VsZiwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgb2JqMV9rZXkgPSAib2JqMSIKICAgICAgICBlbmdpbmVfYWN0aW9uLl9zYXZlX29iaihvYmoxX2tleSwgImNoZWNrIikKICAgICAgICByZXF1ZXN0ID0gSGVhbHRoQ2hlY2tSZXF1ZXN0KGFydGlmYWN0cz1vYmoxX2tleSkKICAgICAgICBleHBlY3RlZF9yZXNwb25zZSA9IEhlYWx0aENoZWNrUmVzcG9uc2Uoc3RhdHVzPUhlYWx0aENoZWNrUmVzcG9uc2UuT0spCiAgICAgICAgcmVzcG9uc2UgPSBlbmdpbmVfYWN0aW9uLl9oZWFsdGhfY2hlY2socmVxdWVzdD1yZXF1ZXN0LCBjb250ZXh0PU5vbmUpCgogICAgICAgIGFzc2VydCBleHBlY3RlZF9yZXNwb25zZS5zdGF0dXMgPT0gcmVzcG9uc2Uuc3RhdHVzCgogICAgZGVmIHRlc3RfaGVhbHRoX2NoZWNrX29rX211bHRpcGxlKHNlbGYsIGVuZ2luZV9hY3Rpb24pOgogICAgICAgIG9iajFfa2V5ID0gIm9iajEiCiAgICAgICAgZW5naW5lX2FjdGlvbi5fc2F2ZV9vYmoob2JqMV9rZXksICJjaGVjayIpCiAgICAgICAgb2JqMl9rZXkgPSAib2JqMiIKICAgICAgICBlbmdpbmVfYWN0aW9uLl9zYXZlX29iaihvYmoyX2tleSwgImNoZWNrIikKCiAgICAgICAgcmVxdWVzdCA9IEhlYWx0aENoZWNrUmVxdWVzdChhcnRpZmFjdHM9b2JqMV9rZXkgKyAiLCIgKyBvYmoyX2tleSkKICAgICAgICBleHBlY3RlZF9yZXNwb25zZSA9IEhlYWx0aENoZWNrUmVzcG9uc2Uoc3RhdHVzPUhlYWx0aENoZWNrUmVzcG9uc2UuT0spCiAgICAgICAgcmVzcG9uc2UgPSBlbmdpbmVfYWN0aW9uLl9oZWFsdGhfY2hlY2socmVxdWVzdD1yZXF1ZXN0LCBjb250ZXh0PU5vbmUpCgogICAgICAgIGFzc2VydCBleHBlY3RlZF9yZXNwb25zZS5zdGF0dXMgPT0gcmVzcG9uc2Uuc3RhdHVzCgogICAgZGVmIHRlc3RfaGVhbHRoX2NoZWNrX25vayhzZWxmLCBlbmdpbmVfYWN0aW9uKToKICAgICAgICBvYmoxX2tleSA9ICJvYmoxIgogICAgICAgIHJlcXVlc3QgPSBIZWFsdGhDaGVja1JlcXVlc3QoYXJ0aWZhY3RzPW9iajFfa2V5KQogICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gSGVhbHRoQ2hlY2tSZXNwb25zZShzdGF0dXM9SGVhbHRoQ2hlY2tSZXNwb25zZS5OT0spCiAgICAgICAgcmVzcG9uc2UgPSBlbmdpbmVfYWN0aW9uLl9oZWFsdGhfY2hlY2socmVxdWVzdD1yZXF1ZXN0LCBjb250ZXh0PU5vbmUpCgogICAgICAgIGFzc2VydCBleHBlY3RlZF9yZXNwb25zZS5zdGF0dXMgPT0gcmVzcG9uc2Uuc3RhdHVzCgogICAgICAgIGVuZ2luZV9hY3Rpb24uX3NhdmVfb2JqKG9iajFfa2V5LCAiY2hlY2siKQogICAgICAgIHJlcXVlc3QgPSBIZWFsdGhDaGVja1JlcXVlc3QoYXJ0aWZhY3RzPW9iajFfa2V5ICsgIiwgb2JqMiIpCiAgICAgICAgcmVzcG9uc2UgPSBlbmdpbmVfYWN0aW9uLl9oZWFsdGhfY2hlY2socmVxdWVzdD1yZXF1ZXN0LCBjb250ZXh0PU5vbmUpCgogICAgICAgIGFzc2VydCBleHBlY3RlZF9yZXNwb25zZS5zdGF0dXMgPT0gcmVzcG9uc2Uuc3RhdHVzCgogICAgZGVmIHRlc3RfaGVhbHRoX2NoZWNrX2V4Y2VwdGlvbihzZWxmKToKICAgICAgICBjbGFzcyBCYWRFbmdpbmVBY3Rpb24oRW5naW5lQmFzZUFjdGlvbik6CiAgICAgICAgICAgIGRlZiBleGVjdXRlKHNlbGYsIHBhcmFtcywgKiprd2FyZ3MpOgogICAgICAgICAgICAgICAgcmV0dXJuIDEKCiAgICAgICAgICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnb2JqMSc6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdJIGFtIEJhZCEnKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRW5naW5lQmFzZUFjdGlvbi5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCgogICAgICAgIGVuZ2luZV9hY3Rpb24gPSBCYWRFbmdpbmVBY3Rpb24oKQoKICAgICAgICBvYmoxX2tleSA9ICJvYmoxIgogICAgICAgIHJlcXVlc3QgPSBIZWFsdGhDaGVja1JlcXVlc3QoYXJ0aWZhY3RzPW9iajFfa2V5KQogICAgICAgIGV4cGVjdGVkX3Jlc3BvbnNlID0gSGVhbHRoQ2hlY2tSZXNwb25zZShzdGF0dXM9SGVhbHRoQ2hlY2tSZXNwb25zZS5OT0spCiAgICAgICAgcmVzcG9uc2UgPSBlbmdpbmVfYWN0aW9uLl9oZWFsdGhfY2hlY2socmVxdWVzdD1yZXF1ZXN0LCBjb250ZXh0PU5vbmUpCgogICAgICAgIGFzc2VydCBleHBlY3RlZF9yZXNwb25zZS5zdGF0dXMgPT0gcmVzcG9uc2Uuc3RhdHVzCgogICAgZGVmIHRlc3RfcmVtb3RlX2V4ZWN1dGVfd2l0aF9zdHJpbmdfcmVzcG9uc2Uoc2VsZik6CiAgICAgICAgY2xhc3MgU3RyaW5nUmV0dXJuZWRBY3Rpb24oRW5naW5lQmFzZU9ubGluZUFjdGlvbik6CiAgICAgICAgICAgIGRlZiBleGVjdXRlKHNlbGYsIGlucHV0X21lc3NhZ2UsIHBhcmFtcywgKiprd2FyZ3MpOgogICAgICAgICAgICAgICAgcmV0dXJuICJtZXNzYWdlIDEiCgogICAgICAgIHJlcXVlc3QgPSBPbmxpbmVBY3Rpb25SZXF1ZXN0KG1lc3NhZ2U9IntcImtcIjogMX0iLCBwYXJhbXM9IntcImtcIjogMX0iKQogICAgICAgIGVuZ2luZV9hY3Rpb24gPSBTdHJpbmdSZXR1cm5lZEFjdGlvbigpCiAgICAgICAgcmVzcG9uc2UgPSBlbmdpbmVfYWN0aW9uLl9yZW1vdGVfZXhlY3V0ZShyZXF1ZXN0PXJlcXVlc3QsIGNvbnRleHQ9Tm9uZSkKCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLm1lc3NhZ2UgPT0gIm1lc3NhZ2UgMSIKCiAgICBkZWYgdGVzdF9yZW1vdGVfZXhlY3V0ZV93aXRoX2ludF9yZXNwb25zZShzZWxmKToKICAgICAgICBjbGFzcyBTdHJpbmdSZXR1cm5lZEFjdGlvbihFbmdpbmVCYXNlT25saW5lQWN0aW9uKToKICAgICAgICAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgaW5wdXRfbWVzc2FnZSwgcGFyYW1zLCAqKmt3YXJncyk6CiAgICAgICAgICAgICAgICByZXR1cm4gMQoKICAgICAgICByZXF1ZXN0ID0gT25saW5lQWN0aW9uUmVxdWVzdChtZXNzYWdlPSJ7XCJrXCI6IDF9IiwgcGFyYW1zPSJ7XCJrXCI6IDF9IikKICAgICAgICBlbmdpbmVfYWN0aW9uID0gU3RyaW5nUmV0dXJuZWRBY3Rpb24oKQogICAgICAgIHJlc3BvbnNlID0gZW5naW5lX2FjdGlvbi5fcmVtb3RlX2V4ZWN1dGUocmVxdWVzdD1yZXF1ZXN0LCBjb250ZXh0PU5vbmUpCgogICAgICAgIGFzc2VydCByZXNwb25zZS5tZXNzYWdlID09ICIxIgoKICAgIGRlZiB0ZXN0X3JlbW90ZV9leGVjdXRlX3dpdGhfb2JqZWN0X3Jlc3BvbnNlKHNlbGYpOgogICAgICAgIGNsYXNzIFN0cmluZ1JldHVybmVkQWN0aW9uKEVuZ2luZUJhc2VPbmxpbmVBY3Rpb24pOgogICAgICAgICAgICBkZWYgZXhlY3V0ZShzZWxmLCBpbnB1dF9tZXNzYWdlLCBwYXJhbXMsICoqa3dhcmdzKToKICAgICAgICAgICAgICAgIHJldHVybiB7InIiOiAxfQoKICAgICAgICByZXF1ZXN0ID0gT25saW5lQWN0aW9uUmVxdWVzdChtZXNzYWdlPSJ7XCJrXCI6IDF9IiwgcGFyYW1zPSJ7XCJrXCI6IDF9IikKICAgICAgICBlbmdpbmVfYWN0aW9uID0gU3RyaW5nUmV0dXJuZWRBY3Rpb24oKQogICAgICAgIHJlc3BvbnNlID0gZW5naW5lX2FjdGlvbi5fcmVtb3RlX2V4ZWN1dGUocmVxdWVzdD1yZXF1ZXN0LCBjb250ZXh0PU5vbmUpCgogICAgICAgIGFzc2VydCByZXNwb25zZS5tZXNzYWdlID09ICJ7XCJyXCI6IDF9IgoKICAgIGRlZiB0ZXN0X3JlbW90ZV9leGVjdXRlX3dpdGhfbGlzdF9yZXNwb25zZShzZWxmKToKICAgICAgICBjbGFzcyBTdHJpbmdSZXR1cm5lZEFjdGlvbihFbmdpbmVCYXNlT25saW5lQWN0aW9uKToKICAgICAgICAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgaW5wdXRfbWVzc2FnZSwgcGFyYW1zLCAqKmt3YXJncyk6CiAgICAgICAgICAgICAgICByZXR1cm4gWzEsIDJdCgogICAgICAgIHJlcXVlc3QgPSBPbmxpbmVBY3Rpb25SZXF1ZXN0KG1lc3NhZ2U9IntcImtcIjogMX0iLCBwYXJhbXM9IntcImtcIjogMX0iKQogICAgICAgIGVuZ2luZV9hY3Rpb24gPSBTdHJpbmdSZXR1cm5lZEFjdGlvbigpCiAgICAgICAgcmVzcG9uc2UgPSBlbmdpbmVfYWN0aW9uLl9yZW1vdGVfZXhlY3V0ZShyZXF1ZXN0PXJlcXVlc3QsIGNvbnRleHQ9Tm9uZSkKCiAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLm1lc3NhZ2UgPT0gIlsxLCAyXSIKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmVuZ2luZV9iYXNlLmVuZ2luZV9iYXNlX2FjdGlvbi5FbmdpbmVCYXNlQWN0aW9uLl9sb2FkX29iaicpCiAgICBkZWYgdGVzdF9yZW1vdGVfcmVsb2FkX3dpdGhfYXJ0aWZhY3RzKHNlbGYsIGxvYWRfb2JqX21vY2tlZCwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgb2Jqc19rZXkgPSAib2JqMSIKICAgICAgICBlbmdpbmVfYWN0aW9uLl9zYXZlX29iaihvYmpzX2tleSwgImNoZWNrIikKICAgICAgICByZXF1ZXN0ID0gUmVsb2FkUmVxdWVzdChhcnRpZmFjdHM9b2Jqc19rZXksIHByb3RvY29sPSd4eXonKQoKICAgICAgICByZXNwb25zZSA9IGVuZ2luZV9hY3Rpb24uX3JlbW90ZV9yZWxvYWQocmVxdWVzdCwgTm9uZSkKICAgICAgICBsb2FkX29ial9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZm9yY2U9VHJ1ZSwgb2JqZWN0X3JlZmVyZW5jZT11J29iajEnKQogICAgICAgIGFzc2VydCByZXNwb25zZS5tZXNzYWdlID09ICJSZWxvYWRlZCIKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmVuZ2luZV9iYXNlLmVuZ2luZV9iYXNlX2FjdGlvbi5FbmdpbmVCYXNlQWN0aW9uLl9sb2FkX29iaicpCiAgICBkZWYgdGVzdF9yZW1vdGVfcmVsb2FkX3dpdGhvdXRfYXJ0aWZhY3RzKHNlbGYsIGxvYWRfb2JqX21vY2tlZCwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgcmVxdWVzdCA9IFJlbG9hZFJlcXVlc3QoYXJ0aWZhY3RzPU5vbmUsIHByb3RvY29sPSd4eXonKQoKICAgICAgICByZXNwb25zZSA9IGVuZ2luZV9hY3Rpb24uX3JlbW90ZV9yZWxvYWQocmVxdWVzdCwgTm9uZSkKICAgICAgICBsb2FkX29ial9tb2NrZWQuYXNzZXJ0X25vdF9jYWxsZWQoKQogICAgICAgIGFzc2VydCByZXNwb25zZS5tZXNzYWdlID09ICJOb3RoaW5nIHRvIHJlbG9hZCIKCiAgICBkZWYgdGVzdF9sb2FkX29ial9kb250X3JlbG9hZF93aXRob3V0X2ZvcmNlKHNlbGYsIGVuZ2luZV9hY3Rpb24pOgogICAgICAgIG9iaiA9IFs2LCA1LCA0XQogICAgICAgIG9iamVjdF9yZWZlcmVuY2UgPSAnX3BhcmFtcycKICAgICAgICBlbmdpbmVfYWN0aW9uLl9wZXJzaXN0ZW5jZV9tb2RlID0gJ2xvY2FsJwogICAgICAgIGVuZ2luZV9hY3Rpb24uX3NhdmVfb2JqKG9iamVjdF9yZWZlcmVuY2UsIG9iaikKCiAgICAgICAgYXNzZXJ0IG9iaiA9PSBlbmdpbmVfYWN0aW9uLl9wYXJhbXMKCiAgICAgICAgbmV3X29iaiA9IFsxLCAyLCAzXQogICAgICAgIHBhdGggPSBlbmdpbmVfYWN0aW9uLl9nZXRfb2JqZWN0X2ZpbGVfcGF0aChvYmplY3RfcmVmZXJlbmNlKQogICAgICAgIGVuZ2luZV9hY3Rpb24uX3NlcmlhbGl6ZXJfZHVtcChuZXdfb2JqLCBwYXRoKQogICAgICAgIGVuZ2luZV9hY3Rpb24uX2xvYWRfb2JqKG9iamVjdF9yZWZlcmVuY2UpCgogICAgICAgIGFzc2VydCBvYmogPT0gZW5naW5lX2FjdGlvbi5fcGFyYW1zCgogICAgICAgIGVuZ2luZV9hY3Rpb24uX2xvYWRfb2JqKG9iamVjdF9yZWZlcmVuY2UsIGZvcmNlPVRydWUpCgogICAgICAgIGFzc2VydCBuZXdfb2JqID09IGVuZ2luZV9hY3Rpb24uX3BhcmFtcwoKCmNsYXNzIFRlc3RFbmdpbmVCYXNlQmF0Y2hBY3Rpb246CiAgICBkZWYgc2V0dXAoc2VsZik6CiAgICAgICAgc2h1dGlsLnJtdHJlZSgiL3RtcC8ubWFydmluIiwgaWdub3JlX2Vycm9ycz1UcnVlKQoKICAgIGRlZiB0ZXN0X3BpcGVsaW5lX2V4ZWN1dGVfd2l0aG91dF9wcmV2aW91c19zdGVwcyhzZWxmLCBiYXRjaF9lbmdpbmVfYWN0aW9uKToKICAgICAgICBiYXRjaF9lbmdpbmVfYWN0aW9uLmV4ZWN1dGUgPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgYmF0Y2hfZW5naW5lX2FjdGlvbi5fcGlwZWxpbmVfZXhlY3V0ZShwYXJhbXM9MTIzKQogICAgICAgIAogICAgICAgIGJhdGNoX2VuZ2luZV9hY3Rpb24uZXhlY3V0ZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxMjMpCgogICAgZGVmIHRlc3RfcGlwZWxpbmVfZXhlY3V0ZV93aXRoX3ByZXZpb3VzX3N0ZXBzKHNlbGYsIGJhdGNoX2VuZ2luZV9hY3Rpb24pOgogICAgICAgIHByZXZpb3VzID0gY29weS5jb3B5KGJhdGNoX2VuZ2luZV9hY3Rpb24pCiAgICAgICAgcHJldmlvdXMuX3BpcGVsaW5lX2V4ZWN1dGUgPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgYmF0Y2hfZW5naW5lX2FjdGlvbi5fcHJldmlvdXNfc3RlcCA9IHByZXZpb3VzCiAgICAgICAgYmF0Y2hfZW5naW5lX2FjdGlvbi5leGVjdXRlID0gbW9jay5NYWdpY01vY2soKQoKICAgICAgICBiYXRjaF9lbmdpbmVfYWN0aW9uLl9waXBlbGluZV9leGVjdXRlKHBhcmFtcz0xMjMpCiAgICAgICAgCiAgICAgICAgcHJldmlvdXMuX3BpcGVsaW5lX2V4ZWN1dGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMTIzKQogICAgICAgIGJhdGNoX2VuZ2luZV9hY3Rpb24uZXhlY3V0ZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxMjMpCgogICAgZGVmIHRlc3RfcmVtb3RlX2V4ZWN1dGVfd2l0aG91dF9yZXF1ZXN0X3BhcmFtcyhzZWxmLCBiYXRjaF9lbmdpbmVfYWN0aW9uKToKICAgICAgICBiYXRjaF9lbmdpbmVfYWN0aW9uLl9wYXJhbXMgPSAxMjMKICAgICAgICBiYXRjaF9lbmdpbmVfYWN0aW9uLl9waXBlbGluZV9leGVjdXRlID0gbW9jay5NYWdpY01vY2soKQoKICAgICAgICByZXF1ZXN0ID0gQmF0Y2hBY3Rpb25SZXF1ZXN0KCkKICAgICAgICBiYXRjaF9lbmdpbmVfYWN0aW9uLl9yZW1vdGVfZXhlY3V0ZShyZXF1ZXN0LCBOb25lKQoKICAgICAgICBiYXRjaF9lbmdpbmVfYWN0aW9uLl9waXBlbGluZV9leGVjdXRlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHBhcmFtcz0xMjMpCgogICAgZGVmIHRlc3RfcmVtb3RlX2V4ZWN1dGVfd2l0aF9yZXF1ZXN0X3BhcmFtcyhzZWxmLCBiYXRjaF9lbmdpbmVfYWN0aW9uKToKICAgICAgICBiYXRjaF9lbmdpbmVfYWN0aW9uLl9wYXJhbXMgPSAxMjMKICAgICAgICBiYXRjaF9lbmdpbmVfYWN0aW9uLl9waXBlbGluZV9leGVjdXRlID0gbW9jay5NYWdpY01vY2soKQoKICAgICAgICByZXF1ZXN0ID0gQmF0Y2hBY3Rpb25SZXF1ZXN0KHBhcmFtcz0neyJ0ZXN0IjogMTIzfScpCiAgICAgICAgYmF0Y2hfZW5naW5lX2FjdGlvbi5fcmVtb3RlX2V4ZWN1dGUocmVxdWVzdCwgTm9uZSkKCiAgICAgICAgYmF0Y2hfZW5naW5lX2FjdGlvbi5fcGlwZWxpbmVfZXhlY3V0ZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChwYXJhbXM9e3UidGVzdCI6IDEyM30pCgogICAgQG1vY2sucGF0Y2goImpzb24ubG9hZCIpCiAgICBkZWYgdGVzdF9fc2VyaWFsaXplcl9sb2FkX21ldHJpY3Moc2VsZiwgbW9ja2VkX2xvYWQpOgogICAgICAgIG9iaiA9IHsia2V5IiwgMX0KICAgICAgICBtb2NrZWRfbG9hZC5yZXR1cm5fdmFsdWUgPSBvYmoKICAgICAgICBvYmplY3RfcmVmZXJlbmNlID0gIl9tZXRyaWNzIgoKICAgICAgICBjbGFzcyBfRUFjdGlvbihFbmdpbmVCYXNlQWN0aW9uKToKICAgICAgICAgICAgX21ldHJpY3MgPSBOb25lCgogICAgICAgICAgICBkZWYgZXhlY3V0ZShzZWxmLCBwYXJhbXMsICoqa3dhcmdzKToKICAgICAgICAgICAgICAgIHBhc3MKCiAgICAgICAgbW9ja2VkX29wZW4gPSBtb2NrLm1vY2tfb3BlbigpCiAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guZW5naW5lX2Jhc2UuZW5naW5lX2Jhc2VfYWN0aW9uLm9wZW4nLCBtb2NrZWRfb3BlbiwgY3JlYXRlPUZhbHNlKToKICAgICAgICAgICAgX21ldHJpY3MgPSBfRUFjdGlvbihkZWZhdWx0X3Jvb3RfcGF0aD0iL3RtcC8ubWFydmluIiwgcGVyc2lzdGVuY2VfbW9kZT0ibG9jYWwiKS5fbG9hZF9vYmoob2JqZWN0X3JlZmVyZW5jZSkKCiAgICAgICAgbW9ja2VkX2xvYWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoQU5ZKQogICAgICAgIG1vY2tlZF9vcGVuLmFzc2VydF9jYWxsZWRfb25jZSgpCiAgICAgICAgYXNzZXJ0IG9iaiA9PSBfbWV0cmljcwoKICAgIEBtb2NrLnBhdGNoKCJqc29uLmR1bXAiKQogICAgZGVmIHRlc3RfX3NlcmlhbGl6ZXJfZHVtcF9tZXRyaWNzKHNlbGYsIG1vY2tlZF9kdW1wKToKICAgICAgICBvYmogPSB7ImtleSIsIDF9CiAgICAgICAgb2JqZWN0X3JlZmVyZW5jZSA9ICJfbWV0cmljcyIKCiAgICAgICAgY2xhc3MgX0VBY3Rpb24oRW5naW5lQmFzZUFjdGlvbik6CiAgICAgICAgICAgIF9tZXRyaWNzID0gTm9uZQoKICAgICAgICAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgcGFyYW1zLCAqKmt3YXJncyk6CiAgICAgICAgICAgICAgICBwYXNzCgogICAgICAgIG1vY2tlZF9vcGVuID0gbW9jay5tb2NrX29wZW4oKQogICAgICAgIHdpdGggbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94LmVuZ2luZV9iYXNlLmVuZ2luZV9iYXNlX2FjdGlvbi5vcGVuJywgbW9ja2VkX29wZW4sIGNyZWF0ZT1GYWxzZSk6CiAgICAgICAgICAgIF9FQWN0aW9uKGRlZmF1bHRfcm9vdF9wYXRoPSIvdG1wLy5tYXJ2aW4iLCBwZXJzaXN0ZW5jZV9tb2RlPSJsb2NhbCIpLl9zYXZlX29iaihvYmplY3RfcmVmZXJlbmNlLCBvYmopCgogICAgICAgIG1vY2tlZF9kdW1wLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKG9iaiwgQU5ZLCBpbmRlbnQ9NCwgc2VwYXJhdG9ycz0odScsJywgdSc6ICcpLCBzb3J0X2tleXM9VHJ1ZSkKICAgICAgICBtb2NrZWRfb3Blbi5hc3NlcnRfY2FsbGVkX29uY2UoKQoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC90ZXN0cy9lbmdpbmVfYmFzZS90ZXN0X2VuZ2luZV9iYXNlX3ByZWRpY3Rpb24ucHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDQ2NjIgMTM0NjMzMzM0NjIgMDI3NDM0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIyBDb3B5cmlnaHQgWzIwMTddIFtCMlcgRGlnaXRhbF0KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKaW1wb3J0IHB5dGVzdAp0cnk6CiAgICBpbXBvcnQgbW9jawpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBpbXBvcnQgdW5pdHRlc3QubW9jayBhcyBtb2NrCgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5lbmdpbmVfYmFzZSBpbXBvcnQgRW5naW5lQmFzZVByZWRpY3Rpb24KCgpAcHl0ZXN0LmZpeHR1cmUKZGVmIGVuZ2luZV9hY3Rpb24oKToKICAgIGNsYXNzIEVuZ2luZUFjdGlvbihFbmdpbmVCYXNlUHJlZGljdGlvbik6CiAgICAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICAgICByZXR1cm4gMQoKICAgIHJldHVybiBFbmdpbmVBY3Rpb24oCiAgICAgICAgZGVmYXVsdF9yb290X3BhdGg9Ii90bXAvLm1hcnZpbiIsCiAgICAgICAgcGVyc2lzdGVuY2VfbW9kZT0ibG9jYWwiCiAgICApCgoKY2xhc3MgVGVzdEVuZ2luZUJhc2VQcmVkaWN0aW9uOgoKICAgIGRlZiB0ZXN0X21vZGVsKHNlbGYsIGVuZ2luZV9hY3Rpb24pOgogICAgICAgIGVuZ2luZV9hY3Rpb24ubWFydmluX21vZGVsID0gWzJdCiAgICAgICAgYXNzZXJ0IGVuZ2luZV9hY3Rpb24ubWFydmluX21vZGVsID09IGVuZ2luZV9hY3Rpb24uX21vZGVsID09IFsyXQoKICAgIGRlZiB0ZXN0X21ldHJpY3Moc2VsZiwgZW5naW5lX2FjdGlvbik6CiAgICAgICAgZW5naW5lX2FjdGlvbi5tYXJ2aW5fbWV0cmljcyA9IFszXQogICAgICAgIGFzc2VydCBlbmdpbmVfYWN0aW9uLm1hcnZpbl9tZXRyaWNzID09IGVuZ2luZV9hY3Rpb24uX21ldHJpY3MgPT0gWzNdCgoKY2xhc3MgVGVzdEVuc3VyZVJlbG9hZEFjdGlvblJlcGxhY2VPYmplY3RBdHRyOgoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guZW5naW5lX2Jhc2UuZW5naW5lX2Jhc2VfYWN0aW9uLkVuZ2luZUJhc2VBY3Rpb24uX3NlcmlhbGl6ZXJfbG9hZCcpCiAgICBkZWYgdGVzdF9maXJzdF9sb2FkX2Zyb21fYXJ0aWZhY3Rfd29ya3Moc2VsZiwgbW9ja19zZXJpYWxpemVyLCBlbmdpbmVfYWN0aW9uKToKICAgICAgICBtb2NrX3NlcmlhbGl6ZXIucmV0dXJuX3ZhbHVlID0gIk1PQ0tFRCIKCiAgICAgICAgYXNzZXJ0IGVuZ2luZV9hY3Rpb24uX21vZGVsID09IE5vbmUKCiAgICAgICAgZW5naW5lX2FjdGlvbi5fbG9hZF9vYmoob2JqZWN0X3JlZmVyZW5jZT0ibW9kZWwiKQogICAgICAgIAogICAgICAgIGFzc2VydCBlbmdpbmVfYWN0aW9uLl9tb2RlbCA9PSBlbmdpbmVfYWN0aW9uLm1hcnZpbl9tb2RlbCA9PSAiTU9DS0VEIgoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guZW5naW5lX2Jhc2UuZW5naW5lX2Jhc2VfYWN0aW9uLkVuZ2luZUJhc2VBY3Rpb24uX3NlcmlhbGl6ZXJfbG9hZCcpCiAgICBkZWYgdGVzdF9yZWxvYWRfd29ya3NfYmVmb3JlX2ZpcnN0X2xvYWQoc2VsZiwgbW9ja19zZXJpYWxpemVyLCBlbmdpbmVfYWN0aW9uKToKICAgICAgICBtb2NrX3NlcmlhbGl6ZXIucmV0dXJuX3ZhbHVlID0gIk1PQ0tFRCIKCiAgICAgICAgYXNzZXJ0IGVuZ2luZV9hY3Rpb24uX21vZGVsID09IE5vbmUKCiAgICAgICAgZW5naW5lX2FjdGlvbi5fbG9hZF9vYmoob2JqZWN0X3JlZmVyZW5jZT0ibW9kZWwiKQoKICAgICAgICBhc3NlcnQgZW5naW5lX2FjdGlvbi5fbW9kZWwgPT0gZW5naW5lX2FjdGlvbi5tYXJ2aW5fbW9kZWwgPT0gIk1PQ0tFRCIKCiAgICAgICAgbW9ja19zZXJpYWxpemVyLnJldHVybl92YWx1ZSA9ICJORVcgTU9DS0VEIgoKICAgICAgICBlbmdpbmVfYWN0aW9uLl9sb2FkX29iaihvYmplY3RfcmVmZXJlbmNlPSJtb2RlbCIsIGZvcmNlPVRydWUpCgogICAgICAgIGFzc2VydCBlbmdpbmVfYWN0aW9uLl9tb2RlbCA9PSBlbmdpbmVfYWN0aW9uLm1hcnZpbl9tb2RlbCA9PSAiTkVXIE1PQ0tFRCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC90ZXN0cy9lbmdpbmVfYmFzZS9zZXJpYWxpemVycy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNzU1IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMDAwMDAgMTM0NjMzMzM0NjIgMDIzNjcwACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L3Rlc3RzL2VuZ2luZV9iYXNlL3Rlc3RfZW5naW5lX2Jhc2VfZGF0YV9oYW5kbGVyLnB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDAwMjQyMiAxMzQ2MzMzMzQ2MiAwMjc2NzIAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgppbXBvcnQgcHl0ZXN0Cgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5lbmdpbmVfYmFzZSBpbXBvcnQgRW5naW5lQmFzZURhdGFIYW5kbGVyCgoKQHB5dGVzdC5maXh0dXJlCmRlZiBlbmdpbmVfYWN0aW9uKCk6CiAgICBjbGFzcyBFbmdpbmVBY3Rpb24oRW5naW5lQmFzZURhdGFIYW5kbGVyKToKICAgICAgICBkZWYgZXhlY3V0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgICAgIHJldHVybiAxCgogICAgcmV0dXJuIEVuZ2luZUFjdGlvbihkZWZhdWx0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CmltcG9ydCBweXRlc3QKCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94LmVuZ2luZV9iYXNlIGltcG9ydCBFbmdpbmVCYXNlVHJhaW5pbmcKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3guZW5naW5lX2Jhc2UgaW1wb3J0IEtlcmFzU2VyaWFsaXplcgoKCkBweXRlc3QuZml4dHVyZQpkZWYgZW5naW5lKCk6CiAgICBjbGFzcyBNeUVuZ2luZUFjdGlvbihLZXJhc1NlcmlhbGl6ZXIsIEVuZ2luZUJhc2VUcmFpbmluZyk6CiAgICAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICAgICBwYXNzCiAgICByZXR1cm4gTXlFbmdpbmVBY3Rpb24oZGVmYXVsdF9yb290X3BhdGg9Ii90bXAvLm1hcnZpbiIpCgoKY2xhc3MgVGVzdEtlcmFzU2VyaWFsaXplcihvYmplY3QpOgogICAgQG1vY2sucGF0Y2goJ2tlcmFzLm1vZGVscy5sb2FkX21vZGVsJykKICAgIGRlZiB0ZXN0X19zZXJpYWxpemVyX2xvYWRfa2VyYXMoc2VsZiwgbW9ja2VkX2xvYWQsIGVuZ2luZSk6CiAgICAgICAgbW9ja2VkX2xvYWQucmV0dXJuX3ZhbHVlID0geyJtZSI6ICJoZXJlIn0KICAgICAgICBtb2NrZWRfcGF0aCA9ICIvdG1wL2VuZ2luZS9tb2RlbCIKICAgICAgICBvYmogPSBlbmdpbmUuX3NlcmlhbGl6ZXJfbG9hZChvYmplY3RfZmlsZV9wYXRoPW1vY2tlZF9wYXRoKQogICAgICAgIG1vY2tlZF9sb2FkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKG1vY2tlZF9wYXRoKQogICAgICAgIGFzc2VydCBvYmogPT0geyJtZSI6ICJoZXJlIn0KCiAgICBAbW9jay5wYXRjaCgnam9ibGliLmxvYWQnKQogICAgZGVmIHRlc3RfX3NlcmlhbGl6ZXJfbG9hZF9ub3Rfa2VyYXMoc2VsZiwgbW9ja2VkX2xvYWQsIGVuZ2luZSk6CiAgICAgICAgbW9ja2VkX3BhdGggPSAiL3RtcC9lbmdpbmUvZGF0YXNldCIKICAgICAgICBtb2NrZWRfbG9hZC5yZXR1cm5fdmFsdWUgPSB7Im1lIjogImhlcmUifQogICAgICAgIG9iaiA9IGVuZ2luZS5fc2VyaWFsaXplcl9sb2FkKG9iamVjdF9maWxlX3BhdGg9bW9ja2VkX3BhdGgpCiAgICAgICAgbW9ja2VkX2xvYWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgobW9ja2VkX3BhdGgpCiAgICAgICAgYXNzZXJ0IG9iaiA9PSB7Im1lIjogImhlcmUifQoKICAgIGRlZiB0ZXN0X19zZXJpYWxpemVyX2R1bXBfa2VyYXMoc2VsZiwgZW5naW5lKToKICAgICAgICBtb2NrZWRfb2JqID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIG1vY2tlZF9wYXRoID0gIi90bXAvZW5naW5lL21vZGVsIgogICAgICAgIGVuZ2luZS5fc2VyaWFsaXplcl9kdW1wKG1vY2tlZF9vYmosIG9iamVjdF9maWxlX3BhdGg9bW9ja2VkX3BhdGgpCiAgICAgICAgbW9ja2VkX29iai5zYXZlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKG1vY2tlZF9wYXRoKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3guZW5naW5lX2Jhc2UuRW5naW5lQmFzZVRyYWluaW5nLl9zZXJpYWxpemVyX2R1bXAnKQogICAgZGVmIHRlc3RfX3NlcmlhbGl6ZXJfZHVtcF9ub3Rfa2VyYXMoc2VsZiwgbW9ja2VkX2R1bXAsIGVuZ2luZSk6CiAgICAgICAgbW9ja2VkX29iaiA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBtb2NrZWRfcGF0aCA9ICIvdG1wL2VuZ2luZS9kYXRhc2V0IgogICAgICAgIGVuZ2luZS5fc2VyaWFsaXplcl9kdW1wKG1vY2tlZF9vYmosIG9iamVjdF9maWxlX3BhdGg9bW9ja2VkX3BhdGgpCiAgICAgICAgbW9ja2VkX2R1bXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgobW9ja2VkX29iaiwgbW9ja2VkX3BhdGgpCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvdGVzdHMvbWFuYWdlbWVudC90ZXN0X2VuZ2luZS5weQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDIwMzMzIDEzNDYzMzMzNDYyIDAyNDA3MAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS91c3IvYmluL2VudiBweXRob24KIyBjb2Rpbmc9dXRmLTgKCiMgQ29weXJpZ2h0IFsyMDE3XSBbQjJXIERpZ2l0YWxdCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCnRyeToKICAgIGltcG9ydCBtb2NrCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGltcG9ydCB1bml0dGVzdC5tb2NrIGFzIG1vY2sKCmZyb20gbW9jayBpbXBvcnQgY2FsbApmcm9tIG1vY2sgaW1wb3J0IEFOWQpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmVuZ2luZSBpbXBvcnQgTWFydmluRHJ5UnVuCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lIGltcG9ydCBkcnlydW4KZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5lbmdpbmUgaW1wb3J0IGVuZ2luZV9odHRwc2VydmVyCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lIGltcG9ydCBfY3JlYXRlX3ZpcnR1YWxfZW52CmZyb20gbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lIGltcG9ydCBfbWFrZV9kYXRhX2xpbmsKaW1wb3J0IG9zCgoKY2xhc3MgbW9ja2VkX2N0eChvYmplY3QpOgogICAgb2JqID0geydwYWNrYWdlX25hbWUnOiAndGVzdF9wYWNrYWdlJywgJ2NvbmZpZyc6IHsnaW5pZGlyJzogJ3Rlc3RfZGlyJ319CgoKZGVmIG1vY2tlZF9zbGVlcCh2YWx1ZSk6CiAgICBpZiB2YWx1ZSA9PSAxMDA6CiAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQoKQoKCmNsYXNzIG1vY2tlZF9hY3F1aXNpdG9yKCk6CiAgICBkZWYgX19pbml0X18oc2VsZiwgcGVyc2lzdGVuY2VfbW9kZSwgaXNfcmVtb3RlX2NhbGxpbmcsIGRlZmF1bHRfcm9vdF9wYXRoKToKICAgICAgICBzZWxmLnBlcnNpc3RlbmNlX21vZGUgPSBwZXJzaXN0ZW5jZV9tb2RlCiAgICAgICAgc2VsZi5pc19yZW1vdGVfY2FsbGluZyA9IGlzX3JlbW90ZV9jYWxsaW5nCiAgICAgICAgc2VsZi5kZWZhdWx0X3Jvb3RfcGF0aCA9IGRlZmF1bHRfcm9vdF9wYXRoCgogICAgZGVmIGV4ZWN1dGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgIHByaW50ICgndGVzdCcpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmVuZ2luZS50aW1lLnRpbWUnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lLk1hcnZpbkRyeVJ1bicpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5lbmdpbmUuc3lzLmV4aXQnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lLm9zLnN5c3RlbScpCmRlZiB0ZXN0X2RyeXJ1bihzeXN0ZW1fbW9ja2VkLCBleGl0X21vY2tlZCwgTWFydmluRHJ5UnVuX21vY2tlZCwgdGltZV9tb2NrZWQpOgogICAgcGFyYW1zID0gJy90bXAvcGFyYW1zJwogICAgbWVzc2FnZXNfZmlsZSA9ICcvdG1wL21lc3NhZ2VzJwogICAgZmVlZGJhY2tfZmlsZSA9ICcvdG1wL2ZlZWRiYWNrJwogICAgYWN0aW9uID0gJ2FsbCcKICAgIHNwYXJrX2NvbmYgPSAnL29wdC9zcGFyay9jb25mJwogICAgdGltZV9tb2NrZWQucmV0dXJuX3ZhbHVlID0gNTU1CgogICAgZHJ5cnVuKGN0eD1tb2NrZWRfY3R4LCBhY3Rpb249YWN0aW9uLCBwYXJhbXNfZmlsZT1wYXJhbXMsIG1lc3NhZ2VzX2ZpbGU9bWVzc2FnZXNfZmlsZSwgZmVlZGJhY2tfZmlsZT1mZWVkYmFja19maWxlLCBpbml0aWFsX2RhdGFzZXQ9Tm9uZSwKICAgICAgICAgICBkYXRhc2V0PU5vbmUsIG1vZGVsPU5vbmUsIG1ldHJpY3M9Tm9uZSwgcmVzcG9uc2U9RmFsc2UsIHNwYXJrX2NvbmY9c3BhcmtfY29uZiwgcHJvZmlsaW5nPU5vbmUpCgogICAgdGltZV9tb2NrZWQuYXNzZXJ0X2NhbGxlZCgpCiAgICBleGl0X21vY2tlZC5hc3NlcnRfY2FsbGVkX3dpdGgoIlN0b3BpbmcgcHJvY2VzcyEiKQogICAgTWFydmluRHJ5UnVuX21vY2tlZC5hc3NlcnRfY2FsbGVkX3dpdGgoY3R4PW1vY2tlZF9jdHgsIG1lc3NhZ2VzPVt7fSwge31dLCBwcmludF9yZXNwb25zZT1GYWxzZSkKCiAgICBNYXJ2aW5EcnlSdW5fbW9ja2VkLnJldHVybl92YWx1ZS5leGVjdXRlLmFzc2VydF9jYWxsZWRfd2l0aChjbGF6ej0nRmVlZGJhY2snLCBkYXRhc2V0PU5vbmUsIGluaXRpYWxfZGF0YXNldD1Ob25lLCBtZXRyaWNzPU5vbmUsIG1vZGVsPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e30sIHByb2ZpbGluZ19lbmFibGVkPU5vbmUpCgogICAgYWN0aW9uID0gJ2FjcXVpc2l0b3InCgogICAgZHJ5cnVuKGN0eD1tb2NrZWRfY3R4LCBhY3Rpb249YWN0aW9uLCBwYXJhbXNfZmlsZT1wYXJhbXMsIG1lc3NhZ2VzX2ZpbGU9bWVzc2FnZXNfZmlsZSwgZmVlZGJhY2tfZmlsZT1mZWVkYmFja19maWxlLCBpbml0aWFsX2RhdGFzZXQ9Tm9uZSwKICAgICAgICAgICBkYXRhc2V0PU5vbmUsIG1vZGVsPU5vbmUsIG1ldHJpY3M9Tm9uZSwgcmVzcG9uc2U9RmFsc2UsIHNwYXJrX2NvbmY9c3BhcmtfY29uZiwgcHJvZmlsaW5nPU5vbmUpCgogICAgdGltZV9tb2NrZWQuYXNzZXJ0X2NhbGxlZCgpCiAgICBNYXJ2aW5EcnlSdW5fbW9ja2VkLmFzc2VydF9jYWxsZWRfd2l0aChjdHg9bW9ja2VkX2N0eCwgbWVzc2FnZXM9W3t9LCB7fV0sIHByaW50X3Jlc3BvbnNlPUZhbHNlKQoKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5lbmdpbmUuanNvbi5kdW1wcycpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5lbmdpbmUuZHluYW1pY19pbXBvcnQnKQpkZWYgdGVzdF9tYXJ2aW5kcnlydW4oaW1wb3J0X21vY2tlZCwgZHVtcHNfbW9ja2VkKToKICAgIG1lc3NhZ2VzID0gWycvdG1wL21lc3NhZ2VzJywgJy90bXAvZmVlZGJhY2snXQogICAgcmVzcG9uc2UgPSAncmVzcG9uc2UnCiAgICBjbGF6eiA9ICdQcmVkaWN0aW9uUHJlcGFyYXRvcicKICAgIGltcG9ydF9tb2NrZWQucmV0dXJuX3ZhbHVlID0gbW9ja2VkX2FjcXVpc2l0b3IKCiAgICB0ZXN0X2RyeXJ1biA9IE1hcnZpbkRyeVJ1bihjdHg9bW9ja2VkX2N0eCwgbWVzc2FnZXM9bWVzc2FnZXMsIHByaW50X3Jlc3BvbnNlPXJlc3BvbnNlKQogICAgdGVzdF9kcnlydW4uZXhlY3V0ZShjbGF6ej1jbGF6eiwgcGFyYW1zPU5vbmUsIGluaXRpYWxfZGF0YXNldD1Ob25lLCBkYXRhc2V0PU5vbmUsIG1vZGVsPU5vbmUsIG1ldHJpY3M9Tm9uZSwgcHJvZmlsaW5nX2VuYWJsZWQ9VHJ1ZSkKCiAgICBpbXBvcnRfbW9ja2VkLmFzc2VydF9jYWxsZWRfd2l0aCgie30ue30iLmZvcm1hdCgndGVzdF9wYWNrYWdlJywgJ1ByZWRpY3Rpb25QcmVwYXJhdG9yJykpCiAgICBkdW1wc19tb2NrZWQuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKCiAgICBjbGF6eiA9ICdGZWVkYmFjaycKICAgIHRlc3RfZHJ5cnVuLmV4ZWN1dGUoY2xheno9Y2xhenosIHBhcmFtcz1Ob25lLCBpbml0aWFsX2RhdGFzZXQ9Tm9uZSwgZGF0YXNldD1Ob25lLCBtb2RlbD1Ob25lLCBtZXRyaWNzPU5vbmUsIHByb2ZpbGluZ19lbmFibGVkPUZhbHNlKQoKICAgIGltcG9ydF9tb2NrZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCJ7fS57fSIuZm9ybWF0KCd0ZXN0X3BhY2thZ2UnLCAnRmVlZGJhY2snKSkKCiAgICBjbGF6eiA9ICdQcmVkaWN0b3InCiAgICB0ZXN0X2RyeXJ1bi5leGVjdXRlKGNsYXp6PWNsYXp6LCBwYXJhbXM9Tm9uZSwgaW5pdGlhbF9kYXRhc2V0PU5vbmUsIGRhdGFzZXQ9Tm9uZSwgbW9kZWw9Tm9uZSwgbWV0cmljcz1Ob25lLCBwcm9maWxpbmdfZW5hYmxlZD1GYWxzZSkKCiAgICBpbXBvcnRfbW9ja2VkLmFzc2VydF9jYWxsZWRfd2l0aCgie30ue30iLmZvcm1hdCgndGVzdF9wYWNrYWdlJywgJ1ByZWRpY3Rpb25QcmVwYXJhdG9yJykpCgogICAgY2xhenogPSAndGVzdCcKICAgIHRlc3RfZHJ5cnVuLmV4ZWN1dGUoY2xheno9Y2xhenosIHBhcmFtcz1Ob25lLCBpbml0aWFsX2RhdGFzZXQ9Tm9uZSwgZGF0YXNldD1Ob25lLCBtb2RlbD1Ob25lLCBtZXRyaWNzPU5vbmUsIHByb2ZpbGluZ19lbmFibGVkPVRydWUpCiAgICB0ZXN0X2RyeXJ1bi5leGVjdXRlKGNsYXp6PWNsYXp6LCBwYXJhbXM9Tm9uZSwgaW5pdGlhbF9kYXRhc2V0PU5vbmUsIGRhdGFzZXQ9Tm9uZSwgbW9kZWw9Tm9uZSwgbWV0cmljcz1Ob25lLCBwcm9maWxpbmdfZW5hYmxlZD1GYWxzZSkKCiAgICBpbXBvcnRfbW9ja2VkLmFzc2VydF9jYWxsZWRfd2l0aCgie30ue30iLmZvcm1hdCgndGVzdF9wYWNrYWdlJywgJ3Rlc3QnKSkKCiAgICByZXNwb25zZSA9IEZhbHNlCiAgICBjbGF6eiA9ICdQcmVkaWN0aW9uUHJlcGFyYXRvcicKCiAgICBNYXJ2aW5EcnlSdW4oY3R4PW1vY2tlZF9jdHgsIG1lc3NhZ2VzPW1lc3NhZ2VzLCBwcmludF9yZXNwb25zZT1yZXNwb25zZSkKICAgIHRlc3RfZHJ5cnVuID0gTWFydmluRHJ5UnVuKGN0eD1tb2NrZWRfY3R4LCBtZXNzYWdlcz1tZXNzYWdlcywgcHJpbnRfcmVzcG9uc2U9cmVzcG9uc2UpCiAgICB0ZXN0X2RyeXJ1bi5leGVjdXRlKGNsYXp6PWNsYXp6LCBwYXJhbXM9Tm9uZSwgaW5pdGlhbF9kYXRhc2V0PU5vbmUsIGRhdGFzZXQ9Tm9uZSwgbW9kZWw9Tm9uZSwgbWV0cmljcz1Ob25lLCBwcm9maWxpbmdfZW5hYmxlZD1GYWxzZSkKCiAgICBkdW1wc19tb2NrZWQuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKCgpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lLnN5cy5leGl0JykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmVuZ2luZS50aW1lLnNsZWVwJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmVuZ2luZS5NYXJ2aW5EYXRhJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmVuZ2luZS5Db25maWcnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lLnN1YnByb2Nlc3MuUG9wZW4nKQpkZWYgdGVzdF9lbmdpbmVfaHR0cHNlcnZlcihQb3Blbl9tb2NrZWQsIENvbmZpZ19tb2NrZWQsIE1hcnZpbkRhdGFfbW9ja2VkLCBzbGVlcF9tb2NrZWQsIGV4aXRfbW9ja2VkKToKCiAgICBzbGVlcF9tb2NrZWQuc2lkZV9lZmZlY3QgPSBtb2NrZWRfc2xlZXAKCiAgICBlbmdpbmVfaHR0cHNlcnZlcihjdHg9bW9ja2VkX2N0eCwgYWN0aW9uPSdhbGwnLCBwYXJhbXNfZmlsZT0ndGVzdF9wYXJhbXMnLCBpbml0aWFsX2RhdGFzZXQ9J3Rlc3RfaWQnLCBkYXRhc2V0PSd0ZXN0X2QnLCBtb2RlbD0ndGVzdF9tJywgbWV0cmljcz0ndGVzdF9tZScsCiAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbD0ndGVzdF9wcm90b2NvbCcsIHNwYXJrX2NvbmY9J3Rlc3RfY29uZicsIGh0dHBfaG9zdD0ndGVzdF9ob3N0JywgaHR0cF9wb3J0PTk5OTksIGV4ZWN1dG9yX3BhdGg9J3Rlc3RfZXhlY3V0b3InLAogICAgICAgICAgICAgICAgICAgICAgbWF4X3dvcmtlcnM9OSwgbWF4X3JwY193b3JrZXJzPTk5LCBleHRyYV9leGVjdXRvcl9wYXJhbWV0ZXJzPSItRFhYPTEyMyIpCgogICAgZXhwZWN0ZWRfY2FsbHMgPSBbXQoKICAgIGV4cGVjdGVkX2NhbGxzLmFwcGVuZChjYWxsKFsKICAgICAgICAnbWFydmluJywgJ2VuZ2luZS1ncnBjc2VydmVyJywKICAgICAgICAnLWEnLCAnYWxsJywKICAgICAgICAnLXcnLCAnOScsCiAgICAgICAgJy1ydycsICc5OScsCiAgICAgICAgQU5ZLCBBTlksCiAgICAgICAgQU5ZLCBBTlksCiAgICAgICAgQU5ZLCBBTlksCiAgICAgICAgQU5ZLCBBTlksCiAgICAgICAgQU5ZLCBBTlksCiAgICAgICAgQU5ZLCBBTlldCiAgICApKQoKICAgIGV4cGVjdGVkX2NhbGxzLmFwcGVuZChjYWxsKFsKICAgICAgICAnamF2YScsCiAgICAgICAgJy1EbWFydmluQ29uZmlnLmVuZ2luZUhvbWU9dGVzdF9kaXInLAogICAgICAgICctRG1hcnZpbkNvbmZpZy5pcEFkZHJlc3M9dGVzdF9ob3N0JywKICAgICAgICAnLURtYXJ2aW5Db25maWcucG9ydD05OTk5JywKICAgICAgICAnLURtYXJ2aW5Db25maWcucHJvdG9jb2w9dGVzdF9wcm90b2NvbCcsCiAgICAgICAgJy1EWFg9MTIzJywKICAgICAgICAnLWphcicsCiAgICAgICAgTWFydmluRGF0YV9tb2NrZWQuZG93bmxvYWRfZmlsZSgndGVzdF9leGVjdXRvcicpXQogICAgKSkKCiAgICBQb3Blbl9tb2NrZWQuYXNzZXJ0X2hhc19jYWxscyhleHBlY3RlZF9jYWxscykKICAgIGV4aXRfbW9ja2VkLmFzc2VydF9jYWxsZWRfd2l0aCgwKQoKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5lbmdpbmUuc3VicHJvY2Vzcy5Qb3BlbicpCmRlZiB0ZXN0X2NyZWF0ZV92aXJ0dWFsX2VudihQb3Blbl9tb2NrZWQpOgogICAgbmFtZSA9ICJteV9wcm9qZWN0IgogICAgZGVzdCA9ICIvdG1wL3h4eCIKICAgIHB5dGhvbiA9ICJweXRob24iCgogICAgbW9ja3ggPSBtb2NrLk1hZ2ljTW9jaygpCiAgICBtb2NreC53YWl0LnJldHVybl92YWx1ZSA9IDAKICAgIFBvcGVuX21vY2tlZC5yZXR1cm5fdmFsdWUgPSBtb2NreAoKICAgIGVudl9uYW1lID0gX2NyZWF0ZV92aXJ0dWFsX2VudihuYW1lLCBkZXN0LCBweXRob24pCgogICAgY29tbWFuZHMgPSBbCiAgICAgICAgJ2Jhc2gnLAogICAgICAgICctYycsCiAgICAgICAgJy4gdmlydHVhbGVudndyYXBwZXIuc2g7IG1rdmlydHVhbGVudiAtcCB7MH0gLWEgezF9IHsyfTsnLmZvcm1hdChweXRob24sIGRlc3QsIGVudl9uYW1lKQogICAgXQoKICAgIFBvcGVuX21vY2tlZC5hc3NlcnRfY2FsbGVkX3dpdGgoY29tbWFuZHMsIGVudj1vcy5lbnZpcm9uKQogICAgYXNzZXJ0IGVudl9uYW1lID09ICdteS1wcm9qZWN0LWVudicKCgpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lLnN5cycpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5lbmdpbmUuc3VicHJvY2Vzcy5Qb3BlbicpCmRlZiB0ZXN0X2NyZWF0ZV92aXJ0dWFsX2Vudl9lcnJvcihQb3Blbl9tb2NrZWQsIHN5c19tb2NrZWQpOgogICAgbmFtZSA9ICJteV9wcm9qZWN0IgogICAgZGVzdCA9ICIvdG1wL3h4eCIKICAgIHB5dGhvbiA9ICJweXRob24iCgogICAgbW9ja3ggPSBtb2NrLk1hZ2ljTW9jaygpCiAgICBtb2NreC53YWl0LnJldHVybl92YWx1ZSA9IDMKICAgIFBvcGVuX21vY2tlZC5yZXR1cm5fdmFsdWUgPSBtb2NreAoKICAgIGVudl9uYW1lID0gX2NyZWF0ZV92aXJ0dWFsX2VudihuYW1lLCBkZXN0LCBweXRob24pCgogICAgY29tbWFuZHMgPSBbCiAgICAgICAgJ2Jhc2gnLAogICAgICAgICctYycsCiAgICAgICAgJy4gdmlydHVhbGVudndyYXBwZXIuc2g7IG1rdmlydHVhbGVudiAtcCB7MH0gLWEgezF9IHsyfTsnLmZvcm1hdChweXRob24sIGRlc3QsIGVudl9uYW1lKQogICAgXQoKICAgIFBvcGVuX21vY2tlZC5hc3NlcnRfY2FsbGVkX3dpdGgoY29tbWFuZHMsIGVudj1vcy5lbnZpcm9uKQogICAgbW9ja3gud2FpdC5hc3NlcnRfY2FsbGVkX29uY2UoKQogICAgIyBzeXNfbW9ja2VkLmV4aXQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSkKCgpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuZW5naW5lLm9zLnN5bWxpbmsnKQpkZWYgdGVzdF9tYWtlX2RhdGFfbGlua19jYWxsX3N5bWxpbmsobW9ja19zeW1saW5rKToKICAgIG9zLmVudmlyb25bJ01BUlZJTl9EQVRBX1BBVEgnXSA9ICcvdG1wLycKICAgIGRlc3QgPSAnL3RtcC8nCiAgICBfbWFrZV9kYXRhX2xpbmsoZGVzdCkKICAgIG1vY2tfc3ltbGluay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnL3RtcC8nLCAnL3RtcC9ub3RlYm9va3MvZGF0YScpCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHl0aG9uLXRvb2xib3gvdGVzdHMvbWFuYWdlbWVudC90ZXN0X25vdGVib29rLnB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAwNzY1IAAwMDAwMjQgADAwMDAwMDA2NjMxIDEzNDYzMzMzNDYyIDAyNDQ1MAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMGx1Y2FzYm9uYXR0bwAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIS91c3IvYmluL2VudiBweXRob24KIyBjb2Rpbmc9dXRmLTgKCiMgQ29weXJpZ2h0IFsyMDE3XSBbQjJXIERpZ2l0YWxdCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIwojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiMgZnJvbSBjbGljay50ZXN0aW5nIGltcG9ydCBDbGlSdW5uZXIKCnRyeToKICAgIGltcG9ydCBtb2NrCmV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgIGltcG9ydCB1bml0dGVzdC5tb2NrIGFzIG1vY2sKCmltcG9ydCBvcwpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50Lm5vdGVib29rIGltcG9ydCBub3RlYm9vaywgbGFiCgoKY2xhc3MgbW9ja2VkX2N0eChvYmplY3QpOgogICAgb2JqID0geydiYXNlX3BhdGgnOiAnL3RtcCd9CgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50Lm5vdGVib29rLnN5cycpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5ub3RlYm9vay5vcy5zeXN0ZW0nKQpkZWYgdGVzdF9ub3RlYm9vayhzeXN0ZW1fbW9ja2VkLCBzeXNfbW9ja2VkKToKICAgIGN0eCA9IG1vY2tlZF9jdHgoKQogICAgcG9ydCA9IDg4ODgKICAgIGVuYWJsZV9zZWN1cml0eSA9IEZhbHNlCiAgICBhbGxvd19yb290ID0gRmFsc2UKICAgIHNwYXJrX2NvbmYgPSAnL29wdC9zcGFyay9jb25mJwogICAgc3lzdGVtX21vY2tlZC5yZXR1cm5fdmFsdWUgPSAxCgogICAgbm90ZWJvb2soY3R4LCBwb3J0LCBlbmFibGVfc2VjdXJpdHksIHNwYXJrX2NvbmYsIGFsbG93X3Jvb3QpCgogICAgc3lzdGVtX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnU1BBUktfQ09ORl9ESVI9L29wdC9zcGFyay9jb25mIFlBUk5fQ09ORl9ESVI9L29wdC9zcGFyay9jb25mIGp1cHl0ZXIgbm90ZWJvb2sgLS1ub3RlYm9vay1kaXIgL3RtcC9ub3RlYm9va3MgLS1pcCAwLjAuMC4wIC0tcG9ydCA4ODg4IC0tbm8tYnJvd3NlciAtLWNvbmZpZyAnICsgb3MuZW52aXJvblsiTUFSVklOX0VOR0lORV9QQVRIIl0gKyAnL21hcnZpbl9weXRob25fdG9vbGJveC9leHRyYXMvbm90ZWJvb2tfZXh0ZW5zaW9ucy9qdXB5dGVyX25vdGVib29rX2NvbmZpZy5weSAtLU5vdGVib29rQXBwLnRva2VuPScpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50Lm5vdGVib29rLnN5cycpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5ub3RlYm9vay5vcy5zeXN0ZW0nKQpkZWYgdGVzdF9ub3RlYm9va193aXRoX3NlY3VyaXR5KHN5c3RlbV9tb2NrZWQsIHN5c19tb2NrZWQpOgogICAgY3R4ID0gbW9ja2VkX2N0eCgpCiAgICBwb3J0ID0gODg4OAogICAgZW5hYmxlX3NlY3VyaXR5ID0gVHJ1ZQogICAgYWxsb3dfcm9vdCA9IEZhbHNlCiAgICBzcGFya19jb25mID0gJy9vcHQvc3BhcmsvY29uZicKICAgIHN5c3RlbV9tb2NrZWQucmV0dXJuX3ZhbHVlID0gMQoKICAgIG5vdGVib29rKGN0eCwgcG9ydCwgZW5hYmxlX3NlY3VyaXR5LCBzcGFya19jb25mLCBhbGxvd19yb290KQoKICAgIHN5c3RlbV9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ1NQQVJLX0NPTkZfRElSPS9vcHQvc3BhcmsvY29uZiBZQVJOX0NPTkZfRElSPS9vcHQvc3BhcmsvY29uZiBqdXB5dGVyIG5vdGVib29rIC0tbm90ZWJvb2stZGlyIC90bXAvbm90ZWJvb2tzIC0taXAgMC4wLjAuMCAtLXBvcnQgODg4OCAtLW5vLWJyb3dzZXIgLS1jb25maWcgJyArIG9zLmVudmlyb25bIk1BUlZJTl9FTkdJTkVfUEFUSCJdICsgJy9tYXJ2aW5fcHl0aG9uX3Rvb2xib3gvZXh0cmFzL25vdGVib29rX2V4dGVuc2lvbnMvanVweXRlcl9ub3RlYm9va19jb25maWcucHknKQoKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5ub3RlYm9vay5zeXMnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQubm90ZWJvb2sub3Muc3lzdGVtJykKZGVmIHRlc3RfanVweXRlcl9sYWIoc3lzdGVtX21vY2tlZCwgc3lzX21vY2tlZCk6CiAgICBjdHggPSBtb2NrZWRfY3R4KCkKICAgIHBvcnQgPSA4ODg4CiAgICBlbmFibGVfc2VjdXJpdHkgPSBGYWxzZQogICAgc3BhcmtfY29uZiA9ICcvb3B0L3NwYXJrL2NvbmYnCiAgICBzeXN0ZW1fbW9ja2VkLnJldHVybl92YWx1ZSA9IDEKCiAgICBsYWIoY3R4LCBwb3J0LCBlbmFibGVfc2VjdXJpdHksIHNwYXJrX2NvbmYpCgogICAgc3lzdGVtX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnU1BBUktfQ09ORl9ESVI9L29wdC9zcGFyay9jb25mIFlBUk5fQ09ORl9ESVI9L29wdC9zcGFyay9jb25mIGp1cHl0ZXItbGFiIC0tbm90ZWJvb2stZGlyIC90bXAvbm90ZWJvb2tzIC0taXAgMC4wLjAuMCAtLXBvcnQgODg4OCAtLW5vLWJyb3dzZXIgLS1Ob3RlYm9va0FwcC50b2tlbj0nKQoKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5ub3RlYm9vay5zeXMnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQubm90ZWJvb2sub3Muc3lzdGVtJykKZGVmIHRlc3RfanVweXRlcl9sYWJfd2l0aF9zZWN1cml0eShzeXN0ZW1fbW9ja2VkLCBzeXNfbW9ja2VkKToKICAgIGN0eCA9IG1vY2tlZF9jdHgoKQogICAgcG9ydCA9IDg4ODgKICAgIGVuYWJsZV9zZWN1cml0eSA9IFRydWUKICAgIHNwYXJrX2NvbmYgPSAnL29wdC9zcGFyay9jb25mJwogICAgc3lzdGVtX21vY2tlZC5yZXR1cm5fdmFsdWUgPSAxCgogICAgbGFiKGN0eCwgcG9ydCwgZW5hYmxlX3NlY3VyaXR5LCBzcGFya19jb25mKQoKICAgIHN5c3RlbV9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ1NQQVJLX0NPTkZfRElSPS9vcHQvc3BhcmsvY29uZiBZQVJOX0NPTkZfRElSPS9vcHQvc3BhcmsvY29uZiBqdXB5dGVyLWxhYiAtLW5vdGVib29rLWRpciAvdG1wL25vdGVib29rcyAtLWlwIDAuMC4wLjAgLS1wb3J0IDg4ODggLS1uby1icm93c2VyJykKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHB5dGhvbi10b29sYm94L3Rlc3RzL21hbmFnZW1lbnQvdGVzdF9oaXZlLnB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMDc2NSAAMDAwMDI0IAAwMDAwMDEwMjc0MCAxMzQ2MzMzMzQ2MiAwMjM1NjEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDBsdWNhc2JvbmF0dG8AAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiMgY29kaW5nPXV0Zi04CgojIENvcHlyaWdodCBbMjAxN10gW0IyVyBEaWdpdGFsXQojCiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICdMaWNlbnNlJyk7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAojCiMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgp0cnk6CiAgICBpbXBvcnQgbW9jawpleGNlcHQgSW1wb3J0RXJyb3I6CiAgICBpbXBvcnQgdW5pdHRlc3QubW9jayBhcyBtb2NrCgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50IGltcG9ydCBoaXZlCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuanNvbicpCmRlZiB0ZXN0X2hpdmVfZ2VuZXJhdGVjb25mX3dyaXRlX2ZpbGVfd2l0aF9qc29uKG1vY2tlZF9qc29uKToKICAgIGRlZmF1bHRfY29uZiA9IFt7CiAgICAgICAgIm9yaWdpbl9ob3N0IjogInh4eF9ob3N0X25hbWUiLAogICAgICAgICJvcmlnaW5fZGIiOiAieHh4X2RiX25hbWUiLAogICAgICAgICJvcmlnaW5fcXVldWUiOiAibWFydmluIiwKICAgICAgICAidGFyZ2V0X3RhYmxlX25hbWUiOiAieHh4X3RhYmxlX25hbWUiLAogICAgICAgICJzYW1wbGVfc3FsIjogIlNFTEVDVCAqIEZST00gWFhYIiwKICAgICAgICAic3FsX2lkIjogIjEiCiAgICB9XQoKICAgIG1vY2tlZF9vcGVuID0gbW9jay5tb2NrX29wZW4oKQogICAgd2l0aCBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLm9wZW4nLCBtb2NrZWRfb3BlbiwgY3JlYXRlPVRydWUpOgogICAgICAgIGhpdmUuaGl2ZV9nZW5lcmF0ZWNvbmYoTm9uZSkKCiAgICBtb2NrZWRfb3Blbi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnaGl2ZV9kYXRhaW1wb3J0LmNvbmYnLCAndycpCiAgICBtb2NrZWRfanNvbi5kdW1wLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGRlZmF1bHRfY29uZiwgbW9ja2VkX29wZW4oKSwgaW5kZW50PTIpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5yZXNldF9yZW1vdGVfdGFibGVzJykKZGVmIHRlc3RfaGl2ZV9yZXNldHJlbW90ZV9jYWxsX0hpdmVEYXRhSW1wb3J0ZXJfcmVzZXRfcmVtb3RlX3RhYmxlcyhyZXNldF9tb2NrZWQpOiAKICAgIGhpdmUuaGl2ZV9yZXNldHJlbW90ZShjdHg9Tm9uZSwgaG9zdD0idGVzdCIsIGVuZ2luZT0idGVzdCIsIHF1ZXVlPSJ0ZXN0IikKICAgIHJlc2V0X21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUucmVhZF9jb25maWcnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9faW5pdF9fJykKZGVmIHRlc3RfaGl2ZV9kYXRhaW1wb3J0X3dpdGhvdXRfY29uZmlnKGluaXRfbW9ja2VkLCByZWFkX2NvbmZpZ19tb2NrZWQpOgogICAgcmVhZF9jb25maWdfbW9ja2VkLnJldHVybl92YWx1ZSA9IE5vbmUKCiAgICBjdHggPSBjb25mID0gc3FsX2lkID0gZW5naW5lID0gXAogICAgICAgIHNraXBfcmVtb3RlX3ByZXBhcmF0aW9uID0gZm9yY2VfY29weV9maWxlcyA9IHZhbGlkYXRlID0gZm9yY2UgPVwKICAgICAgICBmb3JjZV9yZW1vdGUgPSBtYXhfcXVlcnlfc2l6ZSA9IGRlc3RpbmF0aW9uX2hvc3QgPSBkZXN0aW5hdGlvbl9wb3J0ID1cCiAgICAgICAgZGVzdGluYXRpb25faG9zdF91c2VybmFtZSA9IGRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQgPSBkZXN0aW5hdGlvbl9oZGZzX3Jvb3RfcGF0aCA9IE5vbmUKCiAgICBoaXZlLmhpdmVfZGF0YWltcG9ydCgKICAgICAgICBjdHgsIGNvbmYsIHNxbF9pZCwgZW5naW5lLCAKICAgICAgICBza2lwX3JlbW90ZV9wcmVwYXJhdGlvbiwgZm9yY2VfY29weV9maWxlcywgdmFsaWRhdGUsIGZvcmNlLAogICAgICAgIGZvcmNlX3JlbW90ZSwgbWF4X3F1ZXJ5X3NpemUsIGRlc3RpbmF0aW9uX2hvc3QsIGRlc3RpbmF0aW9uX3BvcnQsCiAgICAgICAgZGVzdGluYXRpb25faG9zdF91c2VybmFtZSwgZGVzdGluYXRpb25faG9zdF9wYXNzd29yZCwgZGVzdGluYXRpb25faGRmc19yb290X3BhdGgKICAgICkKCiAgICBpbml0X21vY2tlZC5hc3NlcnRfbm90X2NhbGxlZCgpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUucmVhZF9jb25maWcnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9faW5pdF9fJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci50YWJsZV9leGlzdHMnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmltcG9ydF9zYW1wbGUnKQpkZWYgdGVzdF9oaXZlX2RhdGFpbXBvcnRfd2l0aF9jb25maWcoaW1wb3J0X3NhbXBsZV9tb2NrZWQsIHRhYmxlX2V4aXN0c19tb2NrZWQsIGluaXRfbW9ja2VkLCByZWFkX2NvbmZpZ19tb2NrZWQpOgogICAgcmVhZF9jb25maWdfbW9ja2VkLnJldHVybl92YWx1ZSA9IFt7J29yaWdpbl9kYic6ICd0ZXN0JywgJ3RhcmdldF90YWJsZV9uYW1lJzogJ3Rlc3QnfV0KICAgIGluaXRfbW9ja2VkLnJldHVybl92YWx1ZSA9IE5vbmUKCiAgICBjdHggPSBzcWxfaWQgPSBlbmdpbmUgPSBcCiAgICAgICAgc2tpcF9yZW1vdGVfcHJlcGFyYXRpb24gPSBmb3JjZV9jb3B5X2ZpbGVzID0gdmFsaWRhdGUgPVwKICAgICAgICBmb3JjZV9yZW1vdGUgPSBtYXhfcXVlcnlfc2l6ZSA9IGRlc3RpbmF0aW9uX3BvcnQgPVwKICAgICAgICBkZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lID0gZGVzdGluYXRpb25faG9zdF9wYXNzd29yZCA9IGRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoID0gTm9uZQoKICAgIGZvcmNlID0gVHJ1ZQogICAgY29uZiA9ICcvcGF0aC90by9jb25mJwogICAgZGVzdGluYXRpb25faG9zdCA9ICd0ZXN0JwoKICAgIGhpdmUuaGl2ZV9kYXRhaW1wb3J0KAogICAgICAgIGN0eCwgY29uZiwgc3FsX2lkLCBlbmdpbmUsIAogICAgICAgIHNraXBfcmVtb3RlX3ByZXBhcmF0aW9uLCBmb3JjZV9jb3B5X2ZpbGVzLCB2YWxpZGF0ZSwgZm9yY2UsCiAgICAgICAgZm9yY2VfcmVtb3RlLCBtYXhfcXVlcnlfc2l6ZSwgZGVzdGluYXRpb25faG9zdCwgZGVzdGluYXRpb25fcG9ydCwKICAgICAgICBkZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lLCBkZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkLCBkZXN0aW5hdGlvbl9oZGZzX3Jvb3RfcGF0aAogICAgKQoKICAgIGluaXRfbW9ja2VkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAogICAgICAgIG1heF9xdWVyeV9zaXplPW1heF9xdWVyeV9zaXplLAogICAgICAgIGRlc3RpbmF0aW9uX2hvc3Q9ZGVzdGluYXRpb25faG9zdCwKICAgICAgICBkZXN0aW5hdGlvbl9wb3J0PWRlc3RpbmF0aW9uX3BvcnQsCiAgICAgICAgZGVzdGluYXRpb25faG9zdF91c2VybmFtZT1kZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lLAogICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQ9ZGVzdGluYXRpb25faG9zdF9wYXNzd29yZCwKICAgICAgICBkZXN0aW5hdGlvbl9oZGZzX3Jvb3RfcGF0aD1kZXN0aW5hdGlvbl9oZGZzX3Jvb3RfcGF0aCwKICAgICAgICBvcmlnaW5fZGI9J3Rlc3QnLAogICAgICAgIHRhcmdldF90YWJsZV9uYW1lPSd0ZXN0JywKICAgICAgICBlbmdpbmU9ZW5naW5lLAogICAgKQogICAgaW1wb3J0X3NhbXBsZV9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCiAgICAgICAgY3JlYXRlX3RlbXBfdGFibGU9VHJ1ZSwKICAgICAgICBjb3B5X2ZpbGVzPU5vbmUsCiAgICAgICAgdmFsaWRhdGVfcXVlcnk9Tm9uZSwKICAgICAgICBmb3JjZV9jcmVhdGVfcmVtb3RlX3RhYmxlPU5vbmUKICAgICkKCgpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5yZWFkX2NvbmZpZycpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuX19pbml0X18nKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLnRhYmxlX2V4aXN0cycpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuaW1wb3J0X3NhbXBsZScpCmRlZiB0ZXN0X2hpdmVfZGF0YWltcG9ydF93aXRoX2NvbmZpZ19zcWxfaWQoaW1wb3J0X3NhbXBsZV9tb2NrZWQsIHRhYmxlX2V4aXN0c19tb2NrZWQsIGluaXRfbW9ja2VkLCByZWFkX2NvbmZpZ19tb2NrZWQpOgogICAgcmVhZF9jb25maWdfbW9ja2VkLnJldHVybl92YWx1ZSA9IFsKICAgICAgICB7J29yaWdpbl9kYic6ICd0ZXN0JywgJ3RhcmdldF90YWJsZV9uYW1lJzogJ3Rlc3QnLCAnc3FsX2lkJzogJ3Rlc3QnfSwKICAgICAgICB7J29yaWdpbl9kYic6ICdibGEnLCAndGFyZ2V0X3RhYmxlX25hbWUnOiAnYmxhJywgJ3NxbF9pZCc6ICdibGEnfSwKICAgIF0KICAgIGluaXRfbW9ja2VkLnJldHVybl92YWx1ZSA9IE5vbmUKCiAgICBjdHggPSBzcWxfaWQgPSBlbmdpbmUgPSBcCiAgICAgICAgc2tpcF9yZW1vdGVfcHJlcGFyYXRpb24gPSBmb3JjZV9jb3B5X2ZpbGVzID0gdmFsaWRhdGUgPVwKICAgICAgICBmb3JjZV9yZW1vdGUgPSBtYXhfcXVlcnlfc2l6ZSA9IGRlc3RpbmF0aW9uX3BvcnQgPVwKICAgICAgICBkZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lID0gZGVzdGluYXRpb25faG9zdF9wYXNzd29yZCA9IGRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoID0gTm9uZQoKICAgIHNxbF9pZD0gJ3Rlc3QnCiAgICBmb3JjZSA9IFRydWUKICAgIGNvbmYgPSAnL3BhdGgvdG8vY29uZicKICAgIGRlc3RpbmF0aW9uX2hvc3QgPSAndGVzdCcKCiAgICBoaXZlLmhpdmVfZGF0YWltcG9ydCgKICAgICAgICBjdHgsIGNvbmYsIHNxbF9pZCwgZW5naW5lLCAKICAgICAgICBza2lwX3JlbW90ZV9wcmVwYXJhdGlvbiwgZm9yY2VfY29weV9maWxlcywgdmFsaWRhdGUsIGZvcmNlLAogICAgICAgIGZvcmNlX3JlbW90ZSwgbWF4X3F1ZXJ5X3NpemUsIGRlc3RpbmF0aW9uX2hvc3QsIGRlc3RpbmF0aW9uX3BvcnQsCiAgICAgICAgZGVzdGluYXRpb25faG9zdF91c2VybmFtZSwgZGVzdGluYXRpb25faG9zdF9wYXNzd29yZCwgZGVzdGluYXRpb25faGRmc19yb290X3BhdGgKICAgICkKCiAgICBpbml0X21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKICAgICAgICBtYXhfcXVlcnlfc2l6ZT1tYXhfcXVlcnlfc2l6ZSwKICAgICAgICBkZXN0aW5hdGlvbl9ob3N0PWRlc3RpbmF0aW9uX2hvc3QsCiAgICAgICAgZGVzdGluYXRpb25fcG9ydD1kZXN0aW5hdGlvbl9wb3J0LAogICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfdXNlcm5hbWU9ZGVzdGluYXRpb25faG9zdF91c2VybmFtZSwKICAgICAgICBkZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkPWRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQsCiAgICAgICAgZGVzdGluYXRpb25faGRmc19yb290X3BhdGg9ZGVzdGluYXRpb25faGRmc19yb290X3BhdGgsCiAgICAgICAgb3JpZ2luX2RiPSd0ZXN0JywKICAgICAgICB0YXJnZXRfdGFibGVfbmFtZT0ndGVzdCcsCiAgICAgICAgc3FsX2lkPSd0ZXN0JywKICAgICAgICBlbmdpbmU9ZW5naW5lLAogICAgKQogICAgaW1wb3J0X3NhbXBsZV9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCiAgICAgICAgY3JlYXRlX3RlbXBfdGFibGU9VHJ1ZSwKICAgICAgICBjb3B5X2ZpbGVzPU5vbmUsCiAgICAgICAgdmFsaWRhdGVfcXVlcnk9Tm9uZSwKICAgICAgICBmb3JjZV9jcmVhdGVfcmVtb3RlX3RhYmxlPU5vbmUKICAgICkKCgpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5yZWFkX2NvbmZpZycpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIudGFibGVfZXhpc3RzJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5pbXBvcnRfc2FtcGxlJykKZGVmIHRlc3RfaGl2ZV9kYXRhaW1wb3J0X3dpdGhfY29uZmlnX2ZvcmNlX2ZhbHNlKGltcG9ydF9zYW1wbGVfbW9ja2VkLCB0YWJsZV9leGlzdHNfbW9ja2VkLCByZWFkX2NvbmZpZ19tb2NrZWQpOgogICAgdGFibGVfZXhpc3RzX21vY2tlZC5yZXR1cm5fdmFsdWUgPSBGYWxzZQogICAgcmVhZF9jb25maWdfbW9ja2VkLnJldHVybl92YWx1ZSA9IFt7CiAgICAgICAgJ29yaWdpbl9kYic6ICd0ZXN0JywKICAgICAgICAndGFyZ2V0X3RhYmxlX25hbWUnOiAndGVzdCcsCiAgICAgICAgJ29yaWdpbl9xdWV1ZSc6J3Rlc3QnLAogICAgICAgICdvcmlnaW5faG9zdCc6J3Rlc3QnLAogICAgICAgICdzYW1wbGVfc3FsJzondGVzdCcsCiAgICAgICAgJ3NxbF9pZCc6J3Rlc3QnCiAgICB9XQoKICAgIGN0eCA9IHNxbF9pZCA9IGVuZ2luZSA9IFwKICAgICAgICBza2lwX3JlbW90ZV9wcmVwYXJhdGlvbiA9IGZvcmNlX2NvcHlfZmlsZXMgPSB2YWxpZGF0ZSA9XAogICAgICAgIGZvcmNlX3JlbW90ZSA9IG1heF9xdWVyeV9zaXplID0gZGVzdGluYXRpb25fcG9ydCA9XAogICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfdXNlcm5hbWUgPSBkZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkID0gZGVzdGluYXRpb25faGRmc19yb290X3BhdGggPSBOb25lCgogICAgZm9yY2UgPSBGYWxzZQogICAgY29uZiA9ICcvcGF0aC90by9jb25mJwogICAgZGVzdGluYXRpb25faG9zdCA9ICd0ZXN0JwoKICAgIGhkaSA9IGhpdmUuSGl2ZURhdGFJbXBvcnRlcigKICAgICAgICBtYXhfcXVlcnlfc2l6ZT1tYXhfcXVlcnlfc2l6ZSwKICAgICAgICBkZXN0aW5hdGlvbl9ob3N0PWRlc3RpbmF0aW9uX2hvc3QsCiAgICAgICAgZGVzdGluYXRpb25fcG9ydD1kZXN0aW5hdGlvbl9wb3J0LAogICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfdXNlcm5hbWU9ZGVzdGluYXRpb25faG9zdF91c2VybmFtZSwKICAgICAgICBkZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkPWRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQsCiAgICAgICAgZGVzdGluYXRpb25faGRmc19yb290X3BhdGg9ZGVzdGluYXRpb25faGRmc19yb290X3BhdGgsCiAgICAgICAgb3JpZ2luX2RiPSd0ZXN0JywKICAgICAgICB0YXJnZXRfdGFibGVfbmFtZT0ndGVzdCcsCiAgICAgICAgZW5naW5lPWVuZ2luZSwKICAgICAgICBzcWxfaWQ9J3Rlc3QnLAogICAgICAgIG9yaWdpbl9ob3N0PSd0ZXN0JywKICAgICAgICBvcmlnaW5fcXVldWU9J3Rlc3QnLAogICAgICAgIHNhbXBsZV9zcWw9J3Rlc3QnLAogICAgKQoKICAgIHdpdGggbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyJywgcmV0dXJuX3ZhbHVlPWhkaSk6CiAgICAgICAgaGl2ZS5oaXZlX2RhdGFpbXBvcnQoCiAgICAgICAgICAgIGN0eCwgY29uZiwgc3FsX2lkLCBlbmdpbmUsIAogICAgICAgICAgICBza2lwX3JlbW90ZV9wcmVwYXJhdGlvbiwgZm9yY2VfY29weV9maWxlcywgdmFsaWRhdGUsIGZvcmNlLAogICAgICAgICAgICBmb3JjZV9yZW1vdGUsIG1heF9xdWVyeV9zaXplLCBkZXN0aW5hdGlvbl9ob3N0LCBkZXN0aW5hdGlvbl9wb3J0LAogICAgICAgICAgICBkZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lLCBkZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkLCBkZXN0aW5hdGlvbl9oZGZzX3Jvb3RfcGF0aAogICAgICAgICkKCiAgICAgICAgdGFibGVfZXhpc3RzX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKICAgICAgICAgICAgaG9zdD1oZGkuZGVzdGluYXRpb25faG9zdCwgZGI9aGRpLm9yaWdpbl9kYiwgdGFibGU9aGRpLnRhcmdldF90YWJsZV9uYW1lCiAgICAgICAgKQoKICAgICAgICBpbXBvcnRfc2FtcGxlX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKICAgICAgICAgICAgY3JlYXRlX3RlbXBfdGFibGU9VHJ1ZSwKICAgICAgICAgICAgY29weV9maWxlcz1Ob25lLAogICAgICAgICAgICB2YWxpZGF0ZV9xdWVyeT1Ob25lLAogICAgICAgICAgICBmb3JjZV9jcmVhdGVfcmVtb3RlX3RhYmxlPU5vbmUKICAgICAgICApCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuanNvbicpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLm9zLnBhdGgnKQpkZWYgdGVzdF9yZWFkX2NvbmZpZ193aXRoX2V4aXN0aW5nX3BhdGgocGF0aF9tb2NrZWQsIGpzb25fbW9ja2VkKToKICAgIHBhdGhfbW9ja2VkLmV4aXN0cy5yZXR1cm5fdmFsdWUgPSBUcnVlCiAgICBwYXRoX21vY2tlZC5qb2luLnJldHVybl92YWx1ZSA9ICd0ZXN0LmNvbmYnCgogICAgbW9ja2VkX29wZW4gPSBtb2NrLm1vY2tfb3BlbigpCiAgICB3aXRoIG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUub3BlbicsIG1vY2tlZF9vcGVuLCBjcmVhdGU9VHJ1ZSk6CiAgICAgICAgaGl2ZS5yZWFkX2NvbmZpZygidGVzdC5jb25mIikKCiAgICBtb2NrZWRfb3Blbi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgndGVzdC5jb25mJywgJ3InKQogICAganNvbl9tb2NrZWQubG9hZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChtb2NrZWRfb3BlbigpKQoKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLmpzb24nKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5vcy5wYXRoJykKZGVmIHRlc3RfcmVhZF9jb25maWdfd2l0aF9ub3RfZXhpc3RpbmdfcGF0aChwYXRoX21vY2tlZCwganNvbl9tb2NrZWQpOgogICAgcGF0aF9tb2NrZWQuZXhpc3RzLnJldHVybl92YWx1ZSA9IEZhbHNlCiAgICBwYXRoX21vY2tlZC5qb2luLnJldHVybl92YWx1ZSA9ICd0ZXN0LmNvbmYnCgogICAgbW9ja2VkX29wZW4gPSBtb2NrLm1vY2tfb3BlbigpCiAgICB3aXRoIG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUub3BlbicsIG1vY2tlZF9vcGVuLCBjcmVhdGU9VHJ1ZSk6CiAgICAgICAgaGl2ZS5yZWFkX2NvbmZpZygidGVzdC5jb25mIikKCiAgICBtb2NrZWRfb3Blbi5hc3NlcnRfbm90X2NhbGxlZCgpCiAgICBqc29uX21vY2tlZC5sb2FkLmFzc2VydF9ub3RfY2FsbGVkKCkKCgpjbGFzcyBUZXN0SGl2ZURhdGFJbXBvcnRlcjoKCiAgICBkZWYgc2V0dXAoc2VsZik6CiAgICAgICAgc2VsZi5oZGkgPSBoaXZlLkhpdmVEYXRhSW1wb3J0ZXIoCiAgICAgICAgICAgIG1heF9xdWVyeV9zaXplPTEzLAogICAgICAgICAgICBkZXN0aW5hdGlvbl9ob3N0PSd0ZXN0JywKICAgICAgICAgICAgZGVzdGluYXRpb25fcG9ydD1Ob25lLAogICAgICAgICAgICBkZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lPU5vbmUsCiAgICAgICAgICAgIGRlc3RpbmF0aW9uX2hvc3RfcGFzc3dvcmQ9Tm9uZSwKICAgICAgICAgICAgZGVzdGluYXRpb25faGRmc19yb290X3BhdGg9Jy90bXAnLAogICAgICAgICAgICBvcmlnaW5fZGI9J3Rlc3QnLAogICAgICAgICAgICB0YXJnZXRfdGFibGVfbmFtZT0ndGVzdCcsCiAgICAgICAgICAgIGVuZ2luZT0ndGVzdCcsCiAgICAgICAgICAgIHNxbF9pZD0ndGVzdCcsCiAgICAgICAgICAgIG9yaWdpbl9ob3N0PSd0ZXN0JywKICAgICAgICAgICAgb3JpZ2luX3F1ZXVlPSd0ZXN0JywKICAgICAgICAgICAgc2FtcGxlX3NxbD0ndGVzdCcsCiAgICAgICAgKQoKICAgICAgICBzZWxmLm1vY2tfbWV0aG9kcyA9IHsKICAgICAgICAgICAgJ2dldF9jcmVhdGV0YWJsZV9kZGwnOiBtb2NrLkRFRkFVTFQsCiAgICAgICAgICAgICdnZXRfcGFydGl0aW9ucyc6IG1vY2suREVGQVVMVCwKICAgICAgICAgICAgJ2hhc19wYXJ0aXRpb25zJzogbW9jay5ERUZBVUxULAogICAgICAgICAgICAnY3JlYXRlX2RhdGFiYXNlJzogbW9jay5ERUZBVUxULAogICAgICAgICAgICAndGFibGVfZXhpc3RzJzogbW9jay5ERUZBVUxULAogICAgICAgICAgICAnZHJvcF90YWJsZSc6IG1vY2suREVGQVVMVCwKICAgICAgICAgICAgJ2NyZWF0ZV90YWJsZSc6IG1vY2suREVGQVVMVCwKICAgICAgICAgICAgJ3BvcHVsYXRlX3RhYmxlJzogbW9jay5ERUZBVUxULAogICAgICAgICAgICAnZ2V0X3RhYmxlX2xvY2F0aW9uJzogbW9jay5ERUZBVUxULAogICAgICAgICAgICAnZ2VuZXJhdGVfdGFibGVfbG9jYXRpb24nOiBtb2NrLkRFRkFVTFQsCiAgICAgICAgICAgICdoZGZzX2Rpc3RfY29weSc6IG1vY2suREVGQVVMVCwKICAgICAgICAgICAgJ2NyZWF0ZV9leHRlcm5hbF90YWJsZSc6IG1vY2suREVGQVVMVCwKICAgICAgICAgICAgJ3JlZnJlc2hfcGFydGl0aW9ucyc6IG1vY2suREVGQVVMVCwKICAgICAgICAgICAgJ2Ryb3Bfdmlldyc6IG1vY2suREVGQVVMVCwKICAgICAgICAgICAgJ2NyZWF0ZV92aWV3JzogbW9jay5ERUZBVUxULAogICAgICAgICAgICAndmFsaWRhZGVfcXVlcnknOiBtb2NrLkRFRkFVTFQsCiAgICAgICAgICAgICdnZXRfY29ubmVjdGlvbic6IG1vY2suREVGQVVMVCwKICAgICAgICAgICAgJ3ByaW50X2ZpbmlzaF9zdGVwJzogbW9jay5ERUZBVUxULAogICAgICAgICAgICAncHJpbnRfc3RhcnRfc3RlcCc6IG1vY2suREVGQVVMVAogICAgICAgIH0KCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmNvdW50X3Jvd3MnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5nZXRfY29ubmVjdGlvbicpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLnJldHJpZXZlX2RhdGFfc2FtcGxlJykKICAgIGRlZiB0ZXN0X3ZhbGlkYWRlX3F1ZXJ5KHNlbGYsIHJldHJpZXZlX21vY2tlZCwgY29ubmVjdGlvbl9tb2NrZWQsIGNvdW50X3Jvd3NfbW9ja2VkKToKICAgICAgICBjb3VudF9yb3dzX21vY2tlZC5yZXR1cm5fdmFsdWUgPSAxCiAgICAgICAgY29ubmVjdGlvbl9tb2NrZWQucmV0dXJuX3ZhbHVlID0gJ2Nvbm5lY3Rpb25fbW9ja2VkJwogICAgICAgIHJldHJpZXZlX21vY2tlZC5yZXR1cm5fdmFsdWUgPSB7J2VzdGltYXRlX3F1ZXJ5X21lYW5fcGVyX2xpbmUnOiA0Mn0KCiAgICAgICAgc2VsZi5oZGkudmFsaWRhZGVfcXVlcnkoKQoKICAgICAgICBjb25uZWN0aW9uX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKICAgICAgICAgICAgaG9zdD1zZWxmLmhkaS5vcmlnaW5faG9zdCwgCiAgICAgICAgICAgIGRiPXNlbGYuaGRpLm9yaWdpbl9kYiwgCiAgICAgICAgICAgIHF1ZXVlPXNlbGYuaGRpLm9yaWdpbl9xdWV1ZQogICAgICAgICkKICAgICAgICBjb3VudF9yb3dzX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChjb25uPSdjb25uZWN0aW9uX21vY2tlZCcsIHNxbD1zZWxmLmhkaS5zYW1wbGVfc3FsKQogICAgICAgIHJldHJpZXZlX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChjb25uPSdjb25uZWN0aW9uX21vY2tlZCcsIGZ1bGxfdGFibGVfbmFtZT1zZWxmLmhkaS5mdWxsX3RhYmxlX25hbWUpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5zaG93X2xvZycpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmdldF9jb25uZWN0aW9uJykKICAgIGRlZiB0ZXN0X3RhYmxlX2V4aXN0c190YWJsZV9ub3RfZXhpc3RzKHNlbGYsIGNvbm5lY3Rpb25fbW9ja2VkLCBzaG93X2xvZ19tb2NrZWQpOgogICAgICAgIGN1cnNvciA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBjb25uID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGNvbm4uY3Vyc29yLnJldHVybl92YWx1ZSA9IGN1cnNvcgogICAgICAgIGN1cnNvci5mZXRjaGFsbC5yZXR1cm5fdmFsdWUgPSBbXQogICAgICAgIGNvbm5lY3Rpb25fbW9ja2VkLnJldHVybl92YWx1ZSA9IGNvbm4KCiAgICAgICAgdGFibGVfZXhpc3RzID0gc2VsZi5oZGkudGFibGVfZXhpc3RzKGhvc3Q9J2hvc3QnLCBkYj0nZGInLCB0YWJsZT0ndGFibGUnKQoKICAgICAgICBzaG93X2xvZ19tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY3Vyc29yKQogICAgICAgIGFzc2VydCB0YWJsZV9leGlzdHMgaXMgRmFsc2UKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLnNob3dfbG9nJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuZ2V0X2Nvbm5lY3Rpb24nKQogICAgZGVmIHRlc3RfdGFibGVfZXhpc3RzX3RhYmxlX2V4aXN0cyhzZWxmLCBjb25uZWN0aW9uX21vY2tlZCwgc2hvd19sb2dfbW9ja2VkKToKICAgICAgICBjdXJzb3IgPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgY29ubiA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBjb25uLmN1cnNvci5yZXR1cm5fdmFsdWUgPSBjdXJzb3IKICAgICAgICBjdXJzb3IuZmV0Y2hhbGwucmV0dXJuX3ZhbHVlID0gWyd0ZXN0J10KICAgICAgICBjb25uZWN0aW9uX21vY2tlZC5yZXR1cm5fdmFsdWUgPSBjb25uCgogICAgICAgIHRhYmxlX2V4aXN0cyA9IHNlbGYuaGRpLnRhYmxlX2V4aXN0cyhob3N0PSdob3N0JywgZGI9J2RiJywgdGFibGU9J3RhYmxlJykKCiAgICAgICAgc2hvd19sb2dfbW9ja2VkLmFzc2VydF9oYXNfY2FsbHMoW21vY2suY2FsbChjdXJzb3IpXSAqIDIpCiAgICAgICAgYXNzZXJ0IHRhYmxlX2V4aXN0cyBpcyBUcnVlCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5zaG93X2xvZycpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmRyb3BfdGFibGUnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5kZWxldGVfZmlsZXMnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5nZXRfY29ubmVjdGlvbicpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9nZXRfc3NoX2NsaWVudCcpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmdlbmVyYXRlX3RhYmxlX2xvY2F0aW9uJykKICAgIGRlZiB0ZXN0X3Jlc2V0X3JlbW90ZV90YWJsZXNfd2l0aG91dF92YWxpZHNfdGFibGVzKHNlbGYsIHRiX2xvY19tb2NrLCBzc2hfY2xpX21vY2ssIGNvbm5fbW9jaywgCiAgICAgICAgZGVsZXRlX21vY2ssIGRyb3BfbW9jaywgbG9nX21vY2spOgogICAgICAgIGN1cnNvciA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBjb25uID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGNvbm4uY3Vyc29yLnJldHVybl92YWx1ZSA9IGN1cnNvcgogICAgICAgIGN1cnNvci5mZXRjaGFsbC5yZXR1cm5fdmFsdWUgPSBbXQogICAgICAgIGNvbm5fbW9jay5yZXR1cm5fdmFsdWUgPSBjb25uCgogICAgICAgIHNlbGYuaGRpLnJlc2V0X3JlbW90ZV90YWJsZXMoKQoKICAgICAgICBjb25uX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCiAgICAgICAgICAgIGhvc3Q9c2VsZi5oZGkub3JpZ2luX2hvc3QsIAogICAgICAgICAgICBkYj1zZWxmLmhkaS50ZW1wX2RiX25hbWUsIAogICAgICAgICAgICBxdWV1ZT1zZWxmLmhkaS5vcmlnaW5fcXVldWUKICAgICAgICApCiAgICAgICAgbG9nX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY3Vyc29yKQoKICAgICAgICBkcm9wX21vY2suYXNzZXJ0X25vdF9jYWxsZWQoKQogICAgICAgIHRiX2xvY19tb2NrLmFzc2VydF9ub3RfY2FsbGVkKCkKICAgICAgICBkZWxldGVfbW9jay5hc3NlcnRfbm90X2NhbGxlZCgpCiAgICAgICAgc3NoX2NsaV9tb2NrLmFzc2VydF9ub3RfY2FsbGVkKCkKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLnNob3dfbG9nJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuZHJvcF90YWJsZScpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmRlbGV0ZV9maWxlcycpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmdldF9jb25uZWN0aW9uJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuX2dldF9zc2hfY2xpZW50JykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuZ2VuZXJhdGVfdGFibGVfbG9jYXRpb24nKQogICAgZGVmIHRlc3RfcmVzZXRfcmVtb3RlX3RhYmxlc193aXRoX3ZhbGlkc190YWJsZXMoc2VsZiwgdGJfbG9jX21vY2ssIHNzaF9jbGlfbW9jaywgCiAgICAgICAgY29ubl9tb2NrLCBkZWxldGVfbW9jaywgZHJvcF9tb2NrLCBsb2dfbW9jayk6CiAgICAgICAgY3Vyc29yID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGNvbm4gPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgY29ubi5jdXJzb3IucmV0dXJuX3ZhbHVlID0gY3Vyc29yCiAgICAgICAgY3Vyc29yLmZldGNoYWxsLnJldHVybl92YWx1ZSA9IFtbJ3Rlc3QnXV0KICAgICAgICBjb25uX21vY2sucmV0dXJuX3ZhbHVlID0gY29ubgoKICAgICAgICB0Yl9sb2NfbW9jay5yZXR1cm5fdmFsdWUgPSAndGVzdCcKICAgICAgICBzc2hfY2xpX21vY2sucmV0dXJuX3ZhbHVlID0gJ3Rlc3QnCgogICAgICAgIHNlbGYuaGRpLnJlc2V0X3JlbW90ZV90YWJsZXMoKQoKICAgICAgICBjb25uX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCiAgICAgICAgICAgIGhvc3Q9c2VsZi5oZGkub3JpZ2luX2hvc3QsIAogICAgICAgICAgICBkYj1zZWxmLmhkaS50ZW1wX2RiX25hbWUsIAogICAgICAgICAgICBxdWV1ZT1zZWxmLmhkaS5vcmlnaW5fcXVldWUKICAgICAgICApCiAgICAgICAgbG9nX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY3Vyc29yKQoKICAgICAgICBkcm9wX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY29ubj1jb25uLCB0YWJsZV9uYW1lPSJtYXJ2aW4udGVzdCIpCiAgICAgICAgdGJfbG9jX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCiAgICAgICAgICAgIHNlbGYuaGRpLmRlc3RpbmF0aW9uX2hkZnNfcm9vdF9wYXRoLAogICAgICAgICAgICBzZWxmLmhkaS5vcmlnaW5faG9zdCwKICAgICAgICAgICAgc2VsZi5oZGkudGVtcF9kYl9uYW1lICsgJy5kYicsCiAgICAgICAgICAgICJ0ZXN0IgogICAgICAgICkKICAgICAgICBkZWxldGVfbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgndGVzdCcsICd0ZXN0JykKICAgICAgICBzc2hfY2xpX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCiAgICAgICAgICAgIHNlbGYuaGRpLm9yaWdpbl9ob3N0LAogICAgICAgICAgICBzZWxmLmhkaS5kZXN0aW5hdGlvbl9ob3N0X3VzZXJuYW1lLAogICAgICAgICAgICBzZWxmLmhkaS5kZXN0aW5hdGlvbl9ob3N0X3Bhc3N3b3JkCiAgICAgICAgKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIudmFsaWRhZGVfcXVlcnknKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5nZXRfY29ubmVjdGlvbicpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLnByaW50X2ZpbmlzaF9zdGVwJykKICAgIGRlZiB0ZXN0X2ltcG9ydF9zYW1wbGVfd2l0aF9pbnZhbGlkX3F1ZXJ5X2FuZF9mbGFnX3RydWVfc3RvcChzZWxmLCBmaW5pc2hfc3RlcF9tb2NrLCBjb25uX21vY2ssIHZhbF9xdWVyeV9tb2NrKToKICAgICAgICB2YWxfcXVlcnlfbW9jay5yZXR1cm5fdmFsdWUgPSBGYWxzZQoKICAgICAgICBzZWxmLmhkaS5pbXBvcnRfc2FtcGxlKHZhbGlkYXRlX3F1ZXJ5PVRydWUpCgogICAgICAgIHZhbF9xdWVyeV9tb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKICAgICAgICBmaW5pc2hfc3RlcF9tb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKICAgICAgICBjb25uX21vY2suYXNzZXJ0X25vdF9jYWxsZWQoKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLnByaW50JykKICAgIGRlZiB0ZXN0X2ltcG9ydF9zYW1wbGVfd2l0aF9pbnZhbGlkX3F1ZXJ5X2FuZF9mbGFnX2ZhbHNlX2RvbnRfc3RvcChzZWxmLCBwcmludF9tb2NrZWQpOgogICAgICAgIHdpdGggbW9jay5wYXRjaC5tdWx0aXBsZSgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyJywKICAgICAgICAgICAgKipzZWxmLm1vY2tfbWV0aG9kcwogICAgICAgICkgYXMgbW9ja3M6CgogICAgICAgICAgICBzZWxmLmhkaS5pbXBvcnRfc2FtcGxlKHZhbGlkYXRlX3F1ZXJ5PUZhbHNlKQoKICAgICAgICAgICAgYXNzZXJ0IG1vY2tzWydwcmludF9maW5pc2hfc3RlcCddLmNhbGxfY291bnQgPT0gNgogICAgICAgICAgICBhc3NlcnQgbW9ja3NbJ2dldF9jb25uZWN0aW9uJ10uY2FsbF9jb3VudCA9PSA1CiAgICAgICAgICAgIAogICAgICAgICAgICBtb2Nrc1sndmFsaWRhZGVfcXVlcnknXS5hc3NlcnRfbm90X2NhbGxlZCgpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUucHJpbnQnKQogICAgZGVmIHRlc3RfaW1wb3J0X3NhbXBsZV93aXRoX3BhcnRpdGlvbnNfc3RvcChzZWxmLCBwcmludF9tb2NrZWQpOgogICAgICAgIHdpdGggbW9jay5wYXRjaC5tdWx0aXBsZSgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyJywKICAgICAgICAgICAgKipzZWxmLm1vY2tfbWV0aG9kcwogICAgICAgICkgYXMgbW9ja3M6CgogICAgICAgICAgICBjb25uID0gbW9jay5NYWdpY01vY2soKQogICAgICAgICAgICBtb2Nrc1snaGFzX3BhcnRpdGlvbnMnXS5yZXR1cm5fdmFsdWUgPSBUcnVlCiAgICAgICAgICAgIG1vY2tzWydnZXRfY29ubmVjdGlvbiddLnJldHVybl92YWx1ZSA9IGNvbm4KCiAgICAgICAgICAgIHNlbGYuaGRpLmltcG9ydF9zYW1wbGUodmFsaWRhdGVfcXVlcnk9VHJ1ZSkKCiAgICAgICAgICAgIGFzc2VydCBtb2Nrc1snZ2V0X2Nvbm5lY3Rpb24nXS5jYWxsX2NvdW50ID09IDIKICAgICAgICAgICAgbW9ja3NbJ2dldF9jcmVhdGV0YWJsZV9kZGwnXS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKICAgICAgICAgICAgICAgIGNvbm49Y29ubiwKICAgICAgICAgICAgICAgIG9yaWdpbl90YWJsZV9uYW1lPXNlbGYuaGRpLnRhcmdldF90YWJsZV9uYW1lLAogICAgICAgICAgICAgICAgZGVzdF90YWJsZV9uYW1lPXNlbGYuaGRpLnRlbXBfdGFibGVfbmFtZQogICAgICAgICAgICApCiAgICAgICAgICAgIG1vY2tzWydnZXRfcGFydGl0aW9ucyddLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAogICAgICAgICAgICAgICAgbW9ja3NbJ2dldF9jcmVhdGV0YWJsZV9kZGwnXS5yZXR1cm5fdmFsdWUKICAgICAgICAgICAgKQogICAgICAgICAgICBtb2Nrc1snY3JlYXRlX2RhdGFiYXNlJ10uYXNzZXJ0X25vdF9jYWxsZWQoKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLnByaW50JykKICAgIGRlZiB0ZXN0X2ltcG9ydF9zYW1wbGVfd2l0aF9jcmVhdGVfdGVtcF90YWJsZV9mYWxzZV9kb250X2NhbGxfY3JlYXRlX3RhYmxlKHNlbGYsIHByaW50X21vY2tlZCk6CiAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm11bHRpcGxlKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXInLAogICAgICAgICAgICAqKnNlbGYubW9ja19tZXRob2RzCiAgICAgICAgKSBhcyBtb2NrczoKCiAgICAgICAgICAgIHNlbGYuaGRpLmltcG9ydF9zYW1wbGUoY3JlYXRlX3RlbXBfdGFibGU9RmFsc2UpCgogICAgICAgICAgICBtb2Nrc1sndGFibGVfZXhpc3RzJ10uYXNzZXJ0X25vdF9jYWxsZWQoKQogICAgICAgICAgICBtb2Nrc1snZHJvcF90YWJsZSddLmFzc2VydF9ub3RfY2FsbGVkKCkKICAgICAgICAgICAgbW9ja3NbJ2NyZWF0ZV90YWJsZSddLmFzc2VydF9ub3RfY2FsbGVkKCkKICAgICAgICAgICAgbW9ja3NbJ3BvcHVsYXRlX3RhYmxlJ10uYXNzZXJ0X25vdF9jYWxsZWQoKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLnByaW50JykKICAgIGRlZiB0ZXN0X2ltcG9ydF9zYW1wbGVfd2l0aF9jcmVhdGVfdGVtcF90YWJsZV90cnVlX2NhbGxfY3JlYXRlX3RhYmxlKHNlbGYsIHByaW50X21vY2tlZCk6CiAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm11bHRpcGxlKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXInLAogICAgICAgICAgICAqKnNlbGYubW9ja19tZXRob2RzCiAgICAgICAgKSBhcyBtb2NrczoKCiAgICAgICAgICAgIG1vY2tzWydoYXNfcGFydGl0aW9ucyddLnJldHVybl92YWx1ZSA9IEZhbHNlCiAgICAgICAgICAgIHNlbGYuaGRpLmltcG9ydF9zYW1wbGUoY3JlYXRlX3RlbXBfdGFibGU9VHJ1ZSwgZm9yY2VfY3JlYXRlX3JlbW90ZV90YWJsZT1UcnVlKQoKICAgICAgICAgICAgYXNzZXJ0IG1vY2tzWydkcm9wX3RhYmxlJ10uY2FsbF9jb3VudCA9PSAyCiAgICAgICAgICAgIGFzc2VydCBtb2Nrc1snY3JlYXRlX3RhYmxlJ10uY2FsbF9jb3VudCA9PSAxCiAgICAgICAgICAgIGFzc2VydCBtb2Nrc1sncG9wdWxhdGVfdGFibGUnXS5jYWxsX2NvdW50ID09IDEKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5wcmludCcpCiAgICBkZWYgdGVzdF9pbXBvcnRfc2FtcGxlKHNlbGYsIHByaW50X21vY2tlZCk6CiAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm11bHRpcGxlKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXInLAogICAgICAgICAgICAqKnNlbGYubW9ja19tZXRob2RzCiAgICAgICAgKSBhcyBtb2NrczoKCiAgICAgICAgICAgIG1vY2tzWyd2YWxpZGFkZV9xdWVyeSddLnJldHVybl92YWx1ZSA9IFRydWUKICAgICAgICAgICAgbW9ja3NbJ2hhc19wYXJ0aXRpb25zJ10ucmV0dXJuX3ZhbHVlID0gRmFsc2UKICAgICAgICAgICAgc2VsZi5oZGkuaW1wb3J0X3NhbXBsZSgpCgogICAgICAgICAgICBhc3NlcnQgbW9ja3NbJ3ByaW50X2ZpbmlzaF9zdGVwJ10uY2FsbF9jb3VudCA9PSA2CiAgICAgICAgICAgIGFzc2VydCBtb2Nrc1snZ2V0X2Nvbm5lY3Rpb24nXS5jYWxsX2NvdW50ID09IDUKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmNsZWFuX2RkbCcpCiAgICBkZWYgdGVzdF9nZXRfY3JlYXRldGFibGVfZGRsKHNlbGYsIGNsZWFuX2RkbF9tb2NrZWQpOgogICAgICAgIGN1cnNvciA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBjb25uID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGNvbm4uY3Vyc29yLnJldHVybl92YWx1ZSA9IGN1cnNvcgogICAgICAgIGN1cnNvci5mZXRjaGFsbC5yZXR1cm5fdmFsdWUgPSBbWydsMSddLCBbJ2wyJ11dCiAgICAgICAgZGxsID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGNsZWFuX2RkbF9tb2NrZWQucmV0dXJuX3ZhbHVlID0gZGxsCgogICAgICAgIHNlbGYuaGRpLmdldF9jcmVhdGV0YWJsZV9kZGwoY29ubiwgJ21hcnZpbicsICd0ZXN0JykKCiAgICAgICAgY3Vyc29yLmV4ZWN1dGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoIlNIT1cgQ1JFQVRFIFRBQkxFIG1hcnZpbiIpCiAgICAgICAgY2xlYW5fZGRsX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnbDFsMicsIHJlbW92ZV9mb3JtYXRzPUZhbHNlLCByZW1vdmVfZ2VuZXJhbD1UcnVlKQogICAgICAgIGRsbC5yZXBsYWNlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdtYXJ2aW4nLCAndGVzdCcpCiAgICAgICAgY3Vyc29yLmNsb3NlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLnNob3dfbG9nJykKICAgIGRlZiB0ZXN0X2V4ZWN1dGVfZGJfY29tbWFuZChzZWxmLCBzaG93X2xvZ19tb2NrZWQpOgogICAgICAgIGN1cnNvciA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBjb25uID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGNvbm4uY3Vyc29yLnJldHVybl92YWx1ZSA9IGN1cnNvcgogICAgICAgIGNvbW1hbmQgPSAiYmxhIGJsYSBibGEiCgogICAgICAgIHNlbGYuaGRpLl9leGVjdXRlX2RiX2NvbW1hbmQoY29ubiwgY29tbWFuZCkKCiAgICAgICAgY3Vyc29yLmV4ZWN1dGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY29tbWFuZCkKICAgICAgICBzaG93X2xvZ19tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY3Vyc29yKQogICAgICAgIGN1cnNvci5jbG9zZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuaGl2ZScpCiAgICBkZWYgdGVzdF9nZXRfY29ubmVjdGlvbihzZWxmLCBweWhpdmVfbW9ja2VkKToKICAgICAgICBob3N0ID0gJ3Rlc3QnCiAgICAgICAgc2VsZi5oZGkuZ2V0X2Nvbm5lY3Rpb24oaG9zdCwgZGI9J0RFRkFVTFQnLCBxdWV1ZT0nZGVmYXVsdCcpCgogICAgICAgIHB5aGl2ZV9tb2NrZWQuY29ubmVjdC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKICAgICAgICAgICAgaG9zdD1ob3N0LCBkYXRhYmFzZT0nREVGQVVMVCcsCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249eydtYXByZWQuam9iLnF1ZXVlLm5hbWUnOiAnZGVmYXVsdCcsCiAgICAgICAgICAgICAgICAnIGhpdmUuZXhlYy5keW5hbWljLnBhcnRpdGlvbi5tb2RlJzogJ25vbnN0cmljdCd9CiAgICAgICAgKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuc2hvd19sb2cnKQogICAgZGVmIHRlc3RfcmV0cmlldmVfZGF0YV9zYW1wbGUoc2VsZiwgc2hvd19sb2dfbW9ja2VkKToKICAgICAgICBjdXJzb3IgPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgY29ubiA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBjb25uLmN1cnNvci5yZXR1cm5fdmFsdWUgPSBjdXJzb3IKICAgICAgICBjdXJzb3IuZGVzY3JpcHRpb24gPSBbKCd0YWJsZS5jb2wnLCAndHlwZScpXQogICAgICAgIGN1cnNvci5mZXRjaGFsbC5yZXR1cm5fdmFsdWUgPSBbJ3Rlc3QnXQoKICAgICAgICBmdWxsX3RhYmxlX25hbWUgPSAndGVzdCcKICAgICAgICBzYW1wbGVfbGltaXQgPSAxMAoKICAgICAgICBkYXRhID0gc2VsZi5oZGkucmV0cmlldmVfZGF0YV9zYW1wbGUoY29ubiwgZnVsbF90YWJsZV9uYW1lLCBzYW1wbGVfbGltaXQpCiAgICAgICAgCiAgICAgICAgc3FsID0gIlNFTEVDVCAqIEZST00ge30gVEFCTEVTQU1QTEUgKHt9IFJPV1MpIi5mb3JtYXQoZnVsbF90YWJsZV9uYW1lLCBzYW1wbGVfbGltaXQpCgogICAgICAgIGN1cnNvci5leGVjdXRlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHNxbCkKICAgICAgICBhc3NlcnQgZGF0YVsnZGF0YV9oZWFkZXInXVswXVsnY29sJ10gPT0gJ2NvbCcKICAgICAgICBhc3NlcnQgZGF0YVsnZGF0YV9oZWFkZXInXVswXVsndGFibGUnXSA9PSAndGFibGUnCiAgICAgICAgYXNzZXJ0IGRhdGFbJ2RhdGFfaGVhZGVyJ11bMF1bJ3R5cGUnXSA9PSAndHlwZScKICAgICAgICBhc3NlcnQgZGF0YVsndG90YWxfbGluZXMnXSA9PSAxCiAgICAgICAgYXNzZXJ0IGRhdGFbJ2RhdGEnXSA9PSBbJ3Rlc3QnXQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuc2hvd19sb2cnKQogICAgZGVmIHRlc3RfY291bnRfcm93cyhzZWxmLCBzaG93X2xvZ19tb2NrZWQpOgogICAgICAgIGN1cnNvciA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBjb25uID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGN1cnNvci5mZXRjaG9uZS5yZXR1cm5fdmFsdWUgPSBbNDJdCiAgICAgICAgY29ubi5jdXJzb3IucmV0dXJuX3ZhbHVlID0gY3Vyc29yCgogICAgICAgIHNxbCA9ICJTRUxFQ1QgQ09MMSwgQ09MMiBGUk9NIFRBQkxFIgogICAgICAgIGNvdW50ID0gc2VsZi5oZGkuY291bnRfcm93cyhjb25uLCBzcWwpCgogICAgICAgIGFzc2VydCBjb3VudCA9PSA0MgogICAgICAgIGN1cnNvci5leGVjdXRlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCJTRUxFQ1QgQ09VTlQoMSkgRlJPTSBUQUJMRSIpCiAgICAgICAgc2hvd19sb2dfbW9ja2VkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGN1cnNvcikKICAgICAgICBjdXJzb3IuY2xvc2UuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLmxvZ2dlcicpCiAgICBkZWYgdGVzdF9zaG93X2xvZyhzZWxmLCBsb2dnZXJfbW9ja2VkKToKICAgICAgICBjdXJzb3IgPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgY3Vyc29yLmZldGNoX2xvZ3MucmV0dXJuX3ZhbHVlID0gWydsb2cgbG9nIGxvZyddCgogICAgICAgIHNlbGYuaGRpLnNob3dfbG9nKGN1cnNvcikKCiAgICAgICAgbG9nZ2VyX21vY2tlZC5kZWJ1Zy5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnbG9nIGxvZyBsb2cnKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuc2hvd19sb2cnKQogICAgZGVmIHRlc3Rfc2F2ZV9kYXRhKHNlbGYsIHNob3dfbG9nX21vY2tlZCk6CiAgICAgICAgY3Vyc29yID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGNvbm4gPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgY29ubi5jdXJzb3IucmV0dXJuX3ZhbHVlID0gY3Vyc29yCgogICAgICAgIHRhYmxlID0gJ3Rlc3QnCiAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgJ3RvdGFsX2xpbmVzJzogMiwKICAgICAgICAgICAgJ2RhdGFfaGVhZGVyJzogWwogICAgICAgICAgICAgICAgeydjb2wnOiAndGVzdF9jb2xfMSd9LAogICAgICAgICAgICAgICAgeydjb2wnOiAndGVzdF9jb2xfMid9LAogICAgICAgICAgICBdLAogICAgICAgICAgICAnZGF0YSc6IFsKICAgICAgICAgICAgICAgICdoZWFkZXInLAogICAgICAgICAgICAgICAgJ3Rlc3RfdmFsXzEnLAogICAgICAgICAgICAgICAgJ3Rlc3RfdmFsXzInLAogICAgICAgICAgICBdCiAgICAgICAgfQogICAgICAgIHNlbGYuaGRpLnNhdmVfZGF0YShjb25uLCB0YWJsZSwgZGF0YSkKCiAgICAgICAgZG1sID0gIklOU0VSVCBJTlRPIHRlc3QgKHRlc3RfY29sXzEsIHRlc3RfY29sXzIpIFZBTFVFUyAoJXMsICVzKSIKICAgICAgICBjdXJzb3IuZXhlY3V0ZW1hbnkuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZG1sLCBbKCd0ZXN0X3ZhbF8xJywpLCAoJ3Rlc3RfdmFsXzInLCldKQogICAgICAgIHNob3dfbG9nX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChjdXJzb3IpCiAgICAgICAgY3Vyc29yLmNsb3NlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9leGVjdXRlX2RiX2NvbW1hbmQnKQogICAgZGVmIHRlc3RfcG9wdWxhdGVfdGFibGVfd2l0aF9wYXJ0aXRpb25zKHNlbGYsIGV4ZWNfY29tbV9tb2NrKToKICAgICAgICBjb25uID0gTm9uZQogICAgICAgIHRhYmxlX25hbWUgPSAndGVzdCcKICAgICAgICBzcWwgPSAnYmxhIGJsYSBibGEnCiAgICAgICAgcGFydGl0aW9ucyA9IFt7J2NvbCc6ICd0ZXN0MSd9LCB7J2NvbCc6ICd0ZXN0Mid9XQoKICAgICAgICBzZWxmLmhkaS5wb3B1bGF0ZV90YWJsZShjb25uLCB0YWJsZV9uYW1lLCBwYXJ0aXRpb25zLCBzcWwpCgogICAgICAgIGRtbCA9ICJJTlNFUlQgT1ZFUldSSVRFIFRBQkxFIHRlc3QgUEFSVElUSU9OICh0ZXN0MSwgdGVzdDIpIGJsYSBibGEgYmxhIgogICAgICAgIGV4ZWNfY29tbV9tb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGNvbm4sIGRtbCkKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9leGVjdXRlX2RiX2NvbW1hbmQnKQogICAgZGVmIHRlc3RfcG9wdWxhdGVfdGFibGVfd2l0aG91dF9wYXJ0aXRpb25zKHNlbGYsIGV4ZWNfY29tbV9tb2NrKToKICAgICAgICBjb25uID0gTm9uZQogICAgICAgIHRhYmxlX25hbWUgPSAndGVzdCcKICAgICAgICBzcWwgPSAnYmxhIGJsYSBibGEnCiAgICAgICAgcGFydGl0aW9ucyA9IFtdCgogICAgICAgIHNlbGYuaGRpLnBvcHVsYXRlX3RhYmxlKGNvbm4sIHRhYmxlX25hbWUsIHBhcnRpdGlvbnMsIHNxbCkKCiAgICAgICAgZG1sID0gIklOU0VSVCBPVkVSV1JJVEUgVEFCTEUgdGVzdCAgYmxhIGJsYSBibGEiCiAgICAgICAgZXhlY19jb21tX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY29ubiwgZG1sKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuX2V4ZWN1dGVfZGJfY29tbWFuZCcpCiAgICBkZWYgdGVzdF9jcmVhdGVfdmlldyhzZWxmLCBleGVjX2NvbW1fbW9jayk6CiAgICAgICAgY29ubiA9IE5vbmUKICAgICAgICB2aWV3X25hbWUgPSAndmlld190ZXN0JwogICAgICAgIHRhYmxlX25hbWUgPSAndGFibGVfdGVzdCcKCiAgICAgICAgc2VsZi5oZGkuY3JlYXRlX3ZpZXcoY29ubiwgdmlld19uYW1lLCB0YWJsZV9uYW1lKQoKICAgICAgICBkbWwgPSAiQ1JFQVRFIFZJRVcgezB9IEFTIFNFTEVDVCAqIEZST00gezF9Ii5mb3JtYXQodmlld19uYW1lLCB0YWJsZV9uYW1lKQogICAgICAgIGV4ZWNfY29tbV9tb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGNvbm4sIGRtbCkKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9leGVjdXRlX2RiX2NvbW1hbmQnKQogICAgZGVmIHRlc3RfcmVmcmVzaF9wYXJ0aXRpb25zKHNlbGYsIGV4ZWNfY29tbV9tb2NrKToKICAgICAgICBjb25uID0gTm9uZQogICAgICAgIHRhYmxlX25hbWUgPSAndGFibGVfdGVzdCcKCiAgICAgICAgc2VsZi5oZGkucmVmcmVzaF9wYXJ0aXRpb25zKGNvbm4sIHRhYmxlX25hbWUpCgogICAgICAgIHN0dG10ID0gIk1TQ0sgUkVQQUlSIFRBQkxFIHswfSIuZm9ybWF0KHRhYmxlX25hbWUpCiAgICAgICAgZXhlY19jb21tX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoY29ubiwgc3R0bXQpCgogICAgZGVmIHRlc3RfZ2V0X3RhYmxlX2xvY2F0aW9uKHNlbGYpOgogICAgICAgIGN1cnNvciA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBjb25uID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGN1cnNvci5mZXRjaGFsbC5yZXR1cm5fdmFsdWUgPSBbWycgbG9jYXRpb246ICcsICcgaGRmczovL3Rlc3QgJ11dCiAgICAgICAgY29ubi5jdXJzb3IucmV0dXJuX3ZhbHVlID0gY3Vyc29yCiAgICAgICAgdGFibGVfbmFtZSA9ICd0ZXN0JwoKICAgICAgICBsb2MgPSBzZWxmLmhkaS5nZXRfdGFibGVfbG9jYXRpb24oY29ubiwgdGFibGVfbmFtZSkKCiAgICAgICAgY3Vyc29yLmV4ZWN1dGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoIkRFU0NSSUJFIEZPUk1BVFRFRCB0ZXN0IikKICAgICAgICBhc3NlcnQgbG9jID09ICdoZnRwOi8vdGVzdCcKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9oZGZzX2NvbW1hbmRzJykKICAgIGRlZiB0ZXN0X2RlbGV0ZV9maWxlcyhzZWxmLCBjbWRfbW9ja2VkKToKICAgICAgICBzc2ggPSAnc3NoJwogICAgICAgIHVybCA9ICd0ZXN0LmNvbScKICAgICAgICBzZWxmLmhkaS5kZWxldGVfZmlsZXMoc3NoLCB1cmwpCgogICAgICAgIGNtZCA9ICJoZGZzIGRmcyAtcm0gLVIgJ3Rlc3QuY29tJyIKICAgICAgICBjbWRfbW9ja2VkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHNzaCwgY21kKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuX2hkZnNfY29tbWFuZHMnKQogICAgZGVmIHRlc3RfY29weV9maWxlcyhzZWxmLCBjbWRfbW9ja2VkKToKICAgICAgICBzc2ggPSAnc3NoJwogICAgICAgIG9yaWdpbiA9ICIvaG9tZS8iCiAgICAgICAgZGVzdCA9ICIvdG1wLyIKICAgICAgICBzZWxmLmhkaS5jb3B5X2ZpbGVzKHNzaCwgb3JpZ2luLCBkZXN0KQoKICAgICAgICBjbWQgPSAiaGFkb29wIGRpc3RjcCAtLXVwZGF0ZSAnL2hvbWUvJyAnL3RtcC8nIgogICAgICAgIGNtZF9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoc3NoLCBjbWQpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUubG9nZ2VyJykKICAgIGRlZiB0ZXN0X2hkZnNfY29tbWFuZHMoc2VsZiwgbG9nZ2VyX21vY2tlZCk6CiAgICAgICAgaSA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBvID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIGUgPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgc3NoID0gbW9jay5NYWdpY01vY2soKQogICAgICAgIG8ucmVhZGxpbmVzLnJldHVybl92YWx1ZSA9ICdvdXRwdXQnCiAgICAgICAgZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlID0gJ2Vycm9yJwogICAgICAgIHNzaC5leGVjX2NvbW1hbmQucmV0dXJuX3ZhbHVlID0gKGksIG8sIGUpCiAgICAgICAgY21kID0gImNvbW1hbmQiCgogICAgICAgIG91dCwgZXJyID0gc2VsZi5oZGkuX2hkZnNfY29tbWFuZHMoc3NoLCBjbWQpCgogICAgICAgIGFzc2VydCAob3V0LCBlcnIpID09ICgnb3V0cHV0JywgJ2Vycm9yJykKICAgICAgICBsb2dnZXJfbW9ja2VkLmRlYnVnLmFzc2VydF9hbnlfY2FsbCgiRXhlY3V0aW5nIHJlbW90ZSBjb21tYW5kOiBjb21tYW5kIikKICAgICAgICBsb2dnZXJfbW9ja2VkLmRlYnVnLmFzc2VydF9hbnlfY2FsbCgib3V0cHV0IikKICAgICAgICBsb2dnZXJfbW9ja2VkLmRlYnVnLmFzc2VydF9hbnlfY2FsbCgiZXJyb3IiKQoKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkF1dG9BZGRQb2xpY3knLCBzcGVjPVRydWUpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5TU0hDbGllbnQuY29ubmVjdCcpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5TU0hDbGllbnQuc2V0X21pc3NpbmdfaG9zdF9rZXlfcG9saWN5JykKICAgIGRlZiB0ZXN0X2dldF9zc2hfY2xpZW50KHNlbGYsIHNldF9taXNzaW5nX21vY2tlZCwgY29ubmVjdF9tb2NrZWQsIEF1dG9BZGRQb2xpY3lNb2NrZWQpOgogICAgICAgIGhkZnNfaG9zdCA9ICdoZGZzOi8vdGVzdC5jb20nCiAgICAgICAgaGRmc19wb3J0ID0gJzEyMzQnCiAgICAgICAgdXNlcm5hbWUgPSAndXNlcicKICAgICAgICBwYXNzd29yZCA9ICdwYXNzJwogICAgICAgIHNlbGYuaGRpLl9nZXRfc3NoX2NsaWVudChoZGZzX2hvc3QsIGhkZnNfcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkKQoKICAgICAgICBzZXRfbWlzc2luZ19tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoQXV0b0FkZFBvbGljeU1vY2tlZC5yZXR1cm5fdmFsdWUpCiAgICAgICAgY29ubmVjdF9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCiAgICAgICAgICAgIGhvc3RuYW1lPWhkZnNfaG9zdCwgcG9ydD1oZGZzX3BvcnQsIHVzZXJuYW1lPXVzZXJuYW1lLCBwYXNzd29yZD1wYXNzd29yZAogICAgICAgICkKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5zeXMnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUubG9nZ2VyJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuY29weV9maWxlcycpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmRlbGV0ZV9maWxlcycpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9oZGZzX2NvbW1hbmRzJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuX2dldF9zc2hfY2xpZW50JykKICAgIGRlZiB0ZXN0X2hkZnNfZGlzdF9jb3B5KHNlbGYsIHNzaF9jbGlfbW9jaywgaGRmc19jb21tX21vY2ssIGRlbF9maWxlc19tb2NrLCBjb3B5X21vY2ssIGxvZ2dlcl9tb2NrLCBzeXNfbW9jayk6CiAgICAgICAgaGRmc19jb21tX21vY2sucmV0dXJuX3ZhbHVlID0gKDQyLCBOb25lKQogICAgICAgIGNvcHlfbW9jay5yZXR1cm5fdmFsdWUgPSAoTm9uZSwgTm9uZSkKICAgICAgICBzc2ggPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgc3NoX2NsaV9tb2NrLnJldHVybl92YWx1ZSA9IHNzaAoKICAgICAgICBmb3JjZSA9IEZhbHNlCiAgICAgICAgaGRmc19ob3N0ID0gJ2hkZnM6Ly90ZXN0LmNvbScKICAgICAgICBoZGZzX3BvcnQgPSAxMjM0CiAgICAgICAgb3JpZ2luID0gJy9ob21lLycKICAgICAgICBkZXN0ID0gJy90bXAvJwoKICAgICAgICBzZWxmLmhkaS5oZGZzX2Rpc3RfY29weShmb3JjZSwgaGRmc19ob3N0LCBoZGZzX3BvcnQsIG9yaWdpbiwgZGVzdCwgdXNlcm5hbWU9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSkKCiAgICAgICAgc3NoX2NsaV9tb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGhkZnNfaG9zdCwgaGRmc19wb3J0LCBOb25lLCBOb25lKQogICAgICAgIGRlbF9maWxlc19tb2NrLmFzc2VydF9ub3RfY2FsbGVkKCkKICAgICAgICBoZGZzX2NvbW1fbW9jay5hc3NlcnRfYW55X2NhbGwoc3NoLCAiaGRmcyBkZnMgLWxzIC1SICcvaG9tZS8nIHwgZ3JlcCAtRSAnXi0nIHwgd2MgLWwiKQogICAgICAgIGhkZnNfY29tbV9tb2NrLmFzc2VydF9hbnlfY2FsbChzc2gsICJoZGZzIGRmcyAtbHMgLVIgJy90bXAvJyB8IGdyZXAgLUUgJ14tJyB8IHdjIC1sIikKICAgICAgICBsb2dnZXJfbW9jay5kZWJ1Zy5hc3NlcnRfbm90X2NhbGxlZCgpCiAgICAgICAgc3lzX21vY2suZXhpdC5hc3NlcnRfbm90X2NhbGxlZCgpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuc3lzJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLmxvZ2dlcicpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmNvcHlfZmlsZXMnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5kZWxldGVfZmlsZXMnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5faGRmc19jb21tYW5kcycpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9nZXRfc3NoX2NsaWVudCcpCiAgICBkZWYgdGVzdF9oZGZzX2Rpc3RfY29weV93aXRoX2ZvcmNlKHNlbGYsIHNzaF9jbGlfbW9jaywgaGRmc19jb21tX21vY2ssIGRlbF9maWxlc19tb2NrLCBjb3B5X21vY2ssIGxvZ2dlcl9tb2NrLCBzeXNfbW9jayk6CiAgICAgICAgaGRmc19jb21tX21vY2sucmV0dXJuX3ZhbHVlID0gKDQyLCBOb25lKQogICAgICAgIGNvcHlfbW9jay5yZXR1cm5fdmFsdWUgPSAoTm9uZSwgTm9uZSkKICAgICAgICBzc2ggPSBtb2NrLk1hZ2ljTW9jaygpCiAgICAgICAgc3NoX2NsaV9tb2NrLnJldHVybl92YWx1ZSA9IHNzaAoKICAgICAgICBmb3JjZSA9IFRydWUKICAgICAgICBoZGZzX2hvc3QgPSAnaGRmczovL3Rlc3QuY29tJwogICAgICAgIGhkZnNfcG9ydCA9IDEyMzQKICAgICAgICBvcmlnaW4gPSAnL2hvbWUvJwogICAgICAgIGRlc3QgPSAnL3RtcC8nCgogICAgICAgIHNlbGYuaGRpLmhkZnNfZGlzdF9jb3B5KGZvcmNlLCBoZGZzX2hvc3QsIGhkZnNfcG9ydCwgb3JpZ2luLCBkZXN0LCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lKQoKICAgICAgICBzc2hfY2xpX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoaGRmc19ob3N0LCBoZGZzX3BvcnQsIE5vbmUsIE5vbmUpCiAgICAgICAgZGVsX2ZpbGVzX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoc3NoLCBkZXN0KQogICAgICAgIGhkZnNfY29tbV9tb2NrLmFzc2VydF9hbnlfY2FsbChzc2gsICJoZGZzIGRmcyAtbHMgLVIgJy9ob21lLycgfCBncmVwIC1FICdeLScgfCB3YyAtbCIpCiAgICAgICAgaGRmc19jb21tX21vY2suYXNzZXJ0X2FueV9jYWxsKHNzaCwgImhkZnMgZGZzIC1scyAtUiAnL3RtcC8nIHwgZ3JlcCAtRSAnXi0nIHwgd2MgLWwiKQogICAgICAgIGxvZ2dlcl9tb2NrLmRlYnVnLmFzc2VydF9ub3RfY2FsbGVkKCkKICAgICAgICBzeXNfbW9jay5leGl0LmFzc2VydF9ub3RfY2FsbGVkKCkKCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5zeXMnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUubG9nZ2VyJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuY29weV9maWxlcycpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLmRlbGV0ZV9maWxlcycpCiAgICBAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQuaGl2ZS5IaXZlRGF0YUltcG9ydGVyLl9oZGZzX2NvbW1hbmRzJykKICAgIEBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5oaXZlLkhpdmVEYXRhSW1wb3J0ZXIuX2dldF9zc2hfY2xpZW50JykKICAgIGRlZiB0ZXN0X2hkZnNfZGlzdF9jb3B5X2Vycm9yX2NvcHkoc2VsZiwgc3NoX2NsaV9tb2NrLCBoZGZzX2NvbW1fbW9jaywgZGVsX2ZpbGVzX21vY2ssIGNvcHlfbW9jaywgbG9nZ2VyX21vY2ssIHN5c19tb2NrKToKICAgICAgICBoZGZzX2NvbW1fbW9jay5zaWRlX2VmZmVjdCA9IFsoNDIsIE5vbmUpLCAoMTMsIE5vbmUpXQogICAgICAgIGNvcHlfbW9jay5yZXR1cm5fdmFsdWUgPSAoTm9uZSwgWydlcnJvciddKQogICAgICAgIHNzaCA9IG1vY2suTWFnaWNNb2NrKCkKICAgICAgICBzc2hfY2xpX21vY2sucmV0dXJuX3ZhbHVlID0gc3NoCgogICAgICAgIGZvcmNlID0gRmFsc2UKICAgICAgICBoZGZzX2hvc3QgPSAnaGRmczovL3Rlc3QuY29tJwogICAgICAgIGhkZnNfcG9ydCA9IDEyMzQKICAgICAgICBvcmlnaW4gPSAnL2hvbWUvJwogICAgICAgIGRlc3QgPSAnL3RtcC8nCgogICAgICAgIHNlbGYuaGRpLmhkZnNfZGlzdF9jb3B5KGZvcmNlLCBoZGZzX2hvc3QsIGhkZnNfcG9ydCwgb3JpZ2luLCBkZXN0LCB1c2VybmFtZT1Ob25lLCBwYXNzd29yZD1Ob25lKQoKICAgICAgICBzc2hfY2xpX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoaGRmc19ob3N0LCBoZGZzX3BvcnQsIE5vbmUsIE5vbmUpCiAgICAgICAgZGVsX2ZpbGVzX21vY2suYXNzZXJ0X25vdF9jYWxsZWQoKQogICAgICAgIGhkZnNfY29tbV9tb2NrLmFzc2VydF9hbnlfY2FsbChzc2gsICJoZGZzIGRmcyAtbHMgLVIgJy9ob21lLycgfCBncmVwIC1FICdeLScgfCB3YyAtbCIpCiAgICAgICAgaGRmc19jb21tX21vY2suYXNzZXJ0X2FueV9jYWxsKHNzaCwgImhkZnMgZGZzIC1scyAtUiAnL3RtcC8nIHwgZ3JlcCAtRSAnXi0nIHwgd2MgLWwiKQogICAgICAgIGxvZ2dlcl9tb2NrLmRlYnVnLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdlcnJvcicpCiAgICAgICAgc3lzX21vY2suZXhpdC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgiU3RvcGluZyBwcm9jZXNzISIpCgogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5jbGVhbl9kZGwnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5jcmVhdGVfdGFibGUnKQogICAgQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LmhpdmUuSGl2ZURhdGFJbXBvcnRlci5nZXRfdGFibGVfZm9ybWF0JykKICAgIGRlZiB0ZXN0X2NyZWF0ZV9leHRlcm5hbF90YWJsZShzZWxmLCB0YWJsZV9mb3JtYXJfbW9jaywgY3JlYXRlX3RhYmxlX21vY2ssIGNsZWFuX2RkbF9tb2NrKToKICAgICAgICB0YWJsZV9mb3JtYXJfbW9jay5yZXR1cm5fdmFsdWUgPSAndGVzdCcKICAgICAgICBjb25uID0gTm9uZQogICAgICAgIHRlbXBfdGFibGVfbmFtZSA9ICd0ZW1wJwogICAgICAgIGRkbCA9ICJDUkVBVEUgVEFCTEUgYmxhIGJsYSBibGEiCiAgICAgICAgcGFycXVldF9maWxlX2xvY2F0aW9uID0gIi90bXAvIgogICAgICAgIGNsZWFuX2RkbF9tb2NrLnJldHVybl92YWx1ZSA9IGRkbAoKICAgICAgICBzZWxmLmhkaS5jcmVhdGVfZXh0ZXJuYWxfdGFibGUoY29ubiwgdGVtcF90YWJsZV9uYW1lLCBkZGwsIHBhcnF1ZXRfZmlsZV9sb2NhdGlvbikKCiAgICAgICAgdGFibGVfZm9ybWFyX21vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZGRsKQogICAgICAgIGNsZWFuX2RkbF9tb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGRkbCwgcmVtb3ZlX2Zvcm1hdHM9VHJ1ZSwgcmVtb3ZlX2dlbmVyYWw9RmFsc2UpCiAgICAgICAgZGRsID0gIkNSRUFURSBFWFRFUk5BTCBUQUJMRSBibGEgYmxhIGJsYSBTVE9SRUQgQVMgdGVzdCBMT0NBVElPTiAnL3RtcC8nIgogICAgICAgIGNyZWF0ZV90YWJsZV9tb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGNvbm49Y29ubiwgdGFibGVfbmFtZT10ZW1wX3RhYmxlX25hbWUsIGRkbD1kZGwpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXRob24tdG9vbGJveC90ZXN0cy9tYW5hZ2VtZW50L3Rlc3RfcGtnLnB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDA3NjUgADAwMDAyNCAAMDAwMDAwMTY1NDIgMTM0NjMzMzM0NjIgMDIzNDEzACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwbHVjYXNib25hdHRvAAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMhL3Vzci9iaW4vZW52IHB5dGhvbgojIGNvZGluZz11dGYtOAoKIyBDb3B5cmlnaHQgWzIwMTddIFtCMlcgRGlnaXRhbF0KIwojIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpOwojIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKIyBmcm9tIGNsaWNrLnRlc3RpbmcgaW1wb3J0IENsaVJ1bm5lcgoKdHJ5OgogICAgaW1wb3J0IG1vY2sKZXhjZXB0IEltcG9ydEVycm9yOgogICAgaW1wb3J0IHVuaXR0ZXN0Lm1vY2sgYXMgbW9jawoKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cgaW1wb3J0IF9jbG9uZQpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZyBpbXBvcnQgY29weQpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZyBpbXBvcnQgZ2V0X2dpdF9icmFuY2gKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cgaW1wb3J0IGlzX2dpdF9jbGVhbgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZyBpbXBvcnQgZ2V0X2dpdF90YWdzCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnIGltcG9ydCBnZXRfZ2l0X3JlcG9zaXRvcnlfdXJsCmZyb20gbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnIGltcG9ydCBnZXRfZ2l0X3RhZwpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZyBpbXBvcnQgZ2V0X2dpdF9jb21taXQKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cgaW1wb3J0IGdldF90YWdfZnJvbV9yZXBvX3VybApmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZyBpbXBvcnQgZ2V0X3JlcG9zX2Zyb21fcmVxdWlyZW1lbnRzCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5vcGVuJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5vcy5wYXRoLmpvaW4nKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnLm9zLnBhdGguY3VyZGlyJykKZGVmIHRlc3RfZ2V0X3JlcG9zX2Zyb21fcmVxdWlyZW1lbnRzKGN1cmRpcl9tb2NrZWQsIGpvaW5fbW9ja2VkLCBvcGVuX21vY2tlZCk6CiAgICBqb2luX21vY2tlZC5yZXR1cm5fdmFsdWUgPSAnL3RtcCcKCiAgICBnZXRfcmVwb3NfZnJvbV9yZXF1aXJlbWVudHMocGF0aD1Ob25lKQoKICAgIGpvaW5fbW9ja2VkLmFzc2VydF9jYWxsZWRfd2l0aChjdXJkaXJfbW9ja2VkLCAncmVxdWlyZW1lbnRzLnR4dCcpCiAgICBvcGVuX21vY2tlZC5hc3NlcnRfY2FsbGVkX3dpdGgoJy90bXAnLCAncicpCgogICAgZ2V0X3JlcG9zX2Zyb21fcmVxdWlyZW1lbnRzKHBhdGg9Jy9wYXRoJykKCiAgICBqb2luX21vY2tlZC5hc3NlcnRfY2FsbGVkX3dpdGgoJy9wYXRoJywgJ3JlcXVpcmVtZW50cy50eHQnKQogICAgb3Blbl9tb2NrZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCcvdG1wJywgJ3InKQoKCmRlZiB0ZXN0X2dldF90YWdfZnJvbV9yZXBvX3VybCgpOgogICAgcmVwb3MgPSBbJ2h0dHA6Ly93d3cueHh4Lm9yZzo4MC90YWdAL3JlcG8uaHRtbCddCgogICAgdGFncyA9IGdldF90YWdfZnJvbV9yZXBvX3VybChyZXBvcykKCiAgICBhc3NlcnQgdGFncyA9PSB7J2h0dHA6Ly93d3cueHh4Lm9yZzo4MC90YWdAL3JlcG8uaHRtbCc6ICcvcmVwby5odG1sJ30KCiAgICByZXBvcyA9IFsnaHR0cDovL3d3dy54eHgub3JnOjgwL3RhZy9yZXBvLmh0bWwnXQoKICAgIHRhZ3MgPSBnZXRfdGFnX2Zyb21fcmVwb191cmwocmVwb3MpCgogICAgYXNzZXJ0IHRhZ3MgPT0geydodHRwOi8vd3d3Lnh4eC5vcmc6ODAvdGFnL3JlcG8uaHRtbCc6IE5vbmV9CgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5naXRfY2xvbmUnKQpkZWYgdGVzdF9jbG9uZShnaXRfbW9ja2VkKToKICAgIGdpdF9tb2NrZWQucmV0dXJuX3ZhbHVlID0gMQogICAgcmVwbyA9ICdodHRwOi8veHh4LmdpdCcKICAgIHJlc3VsdCA9IF9jbG9uZShyZXBvKQoKICAgIGFzc2VydCByZXN1bHQgPT0gKHJlcG8sIDEpCiAgICBnaXRfbW9ja2VkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHJlcG8sIGNoZWNrb3V0PUZhbHNlLCBkZXB0aD0xKQoKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cuc2h1dGlsLmlnbm9yZV9wYXR0ZXJucycpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cuc2h1dGlsLmNvcHl0cmVlJykKZGVmIHRlc3RfY29weShjb3B5dHJlZV9tb2NrZWQsIGlnbm9yZV9tb2NrZWQpOgogICAgc3JjID0gJy94cHRvJwogICAgZGVzdCA9ICcveHB0b19kZXN0JwogICAgaWdub3JlID0gKCcuZ2l0JykKICAgIGlnbm9yZV9tb2NrZWQucmV0dXJuX3ZhbHVlID0gMQogICAgY29weShzcmMsIGRlc3QsIGlnbm9yZSkKCiAgICBjb3B5dHJlZV9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoc3JjLCBkZXN0LCBpZ25vcmU9MSkKICAgIGlnbm9yZV9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKmlnbm9yZSkKCgpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnLnN1YnByb2Nlc3MuUElQRScpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cub3MucGF0aC5jdXJkaXInKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnLnN1YnByb2Nlc3MuUG9wZW4nKQpkZWYgdGVzdF9nZXRfZ2l0X2JyYW5jaChwb3Blbl9tb2NrZWQsIGN1cmRpcl9tb2NrZWQsIHBpcGVfbW9ja2VkKToKICAgIG1vY2t4ID0gbW9jay5NYWdpY01vY2soKQogICAgbW9ja3guc3Rkb3V0LnJlYWQucmV0dXJuX3ZhbHVlID0gYidicmFuY2ggJwogICAgcG9wZW5fbW9ja2VkLnJldHVybl92YWx1ZSA9IG1vY2t4CgogICAgYnJhbmNoID0gZ2V0X2dpdF9icmFuY2goKQoKICAgIHBvcGVuX21vY2tlZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChbJ2dpdCcsICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSwgc3Rkb3V0PXBpcGVfbW9ja2VkLCBjd2Q9Y3VyZGlyX21vY2tlZCkKCiAgICBhc3NlcnQgYnJhbmNoID09ICdicmFuY2gnCgogICAgYnJhbmNoID0gZ2V0X2dpdF9icmFuY2gocGF0aD0nL3RtcCcpCgogICAgcG9wZW5fbW9ja2VkLmFzc2VydF9jYWxsZWRfd2l0aChbJ2dpdCcsICdyZXYtcGFyc2UnLCAnLS1hYmJyZXYtcmVmJywgJ0hFQUQnXSwgc3Rkb3V0PXBpcGVfbW9ja2VkLCBjd2Q9Jy90bXAnKQoKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cuc3VicHJvY2Vzcy5QSVBFJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5vcy5wYXRoLmN1cmRpcicpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cuc3VicHJvY2Vzcy5Qb3BlbicpCmRlZiB0ZXN0X2dldF9naXRfdGFnKHBvcGVuX21vY2tlZCwgY3VyZGlyX21vY2tlZCwgcGlwZV9tb2NrZWQpOgogICAgbW9ja3ggPSBtb2NrLk1hZ2ljTW9jaygpCiAgICBtb2NreC5zdGRvdXQucmVhZC5yZXR1cm5fdmFsdWUgPSBiJ3RhZyAnCiAgICBwb3Blbl9tb2NrZWQucmV0dXJuX3ZhbHVlID0gbW9ja3gKCiAgICB0YWdzID0gZ2V0X2dpdF90YWcoKQoKICAgIHBvcGVuX21vY2tlZC5hc3NlcnRfY2FsbGVkX3dpdGgoWydnaXQnLCAnZGVzY3JpYmUnLCAnLS10YWdzJywgJ3RhZyddLCBzdGRvdXQ9cGlwZV9tb2NrZWQsIGN3ZD1jdXJkaXJfbW9ja2VkKQoKICAgIGFzc2VydCB0YWdzID09ICd0YWcnCgogICAgdGFncyA9IGdldF9naXRfdGFnKHBhdGg9Jy90bXAnKQoKICAgIHBvcGVuX21vY2tlZC5hc3NlcnRfY2FsbGVkX3dpdGgoWydnaXQnLCAnZGVzY3JpYmUnLCAnLS10YWdzJywgJ3RhZyddLCBzdGRvdXQ9cGlwZV9tb2NrZWQsIGN3ZD0nL3RtcCcpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5zdWJwcm9jZXNzLlBJUEUnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnLm9zLnBhdGguY3VyZGlyJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5zdWJwcm9jZXNzLlBvcGVuJykKZGVmIHRlc3RfZ2V0X2dpdF9jb21taXQocG9wZW5fbW9ja2VkLCBjdXJkaXJfbW9ja2VkLCBwaXBlX21vY2tlZCk6CiAgICBtb2NreCA9IG1vY2suTWFnaWNNb2NrKCkKICAgIG1vY2t4LnN0ZG91dC5yZWFkLnJldHVybl92YWx1ZSA9IGInY29tbWl0ICcKICAgIHBvcGVuX21vY2tlZC5yZXR1cm5fdmFsdWUgPSBtb2NreAoKICAgIGNvbW1pdCA9IGdldF9naXRfY29tbWl0KCkKCiAgICBwb3Blbl9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoWydnaXQnLCAncmV2LXBhcnNlJywgJ0hFQUQnXSwgc3Rkb3V0PXBpcGVfbW9ja2VkLCBjd2Q9Y3VyZGlyX21vY2tlZCkKCiAgICBhc3NlcnQgY29tbWl0ID09ICdjb21taXQnCgogICAgY29tbWl0ID0gZ2V0X2dpdF9jb21taXQocGF0aD0nL3RtcCcpCiAgICBwb3Blbl9tb2NrZWQuYXNzZXJ0X2NhbGxlZF93aXRoKFsnZ2l0JywgJ3Jldi1wYXJzZScsICdIRUFEJ10sIHN0ZG91dD1waXBlX21vY2tlZCwgY3dkPScvdG1wJykKCiAgICBjb21taXQgPSBnZXRfZ2l0X2NvbW1pdCh0YWc9J3RhZycpCiAgICBwb3Blbl9tb2NrZWQuYXNzZXJ0X2NhbGxlZF93aXRoKFsnZ2l0JywgJ3Jldi1saXN0JywgJy1uJywgJzEnLCAndGFnJ10sIHN0ZG91dD1waXBlX21vY2tlZCwgY3dkPWN1cmRpcl9tb2NrZWQpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5zdWJwcm9jZXNzLlBJUEUnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnLm9zLnBhdGguY3VyZGlyJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5zdWJwcm9jZXNzLlBvcGVuJykKZGVmIHRlc3RfZ2V0X2dpdF9yZXBvc2l0b3J5X3VybChwb3Blbl9tb2NrZWQsIGN1cmRpcl9tb2NrZWQsIHBpcGVfbW9ja2VkKToKICAgIG1vY2t4ID0gbW9jay5NYWdpY01vY2soKQogICAgbW9ja3guc3Rkb3V0LnJlYWQucmV0dXJuX3ZhbHVlID0gYid1cmwgJwogICAgcG9wZW5fbW9ja2VkLnJldHVybl92YWx1ZSA9IG1vY2t4CgogICAgdXJsID0gZ2V0X2dpdF9yZXBvc2l0b3J5X3VybCgpCgogICAgcG9wZW5fbW9ja2VkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKFsnZ2l0JywgJ2NvbmZpZycsICctLWdldCcsICdyZW1vdGUub3JpZ2luLnVybCddLCBzdGRvdXQ9cGlwZV9tb2NrZWQsIGN3ZD1jdXJkaXJfbW9ja2VkKQoKICAgIGFzc2VydCB1cmwgPT0gJ3VybCcKCiAgICB1cmwgPSBnZXRfZ2l0X3JlcG9zaXRvcnlfdXJsKHBhdGg9J3d3dy54eHguY29tJykKCiAgICBwb3Blbl9tb2NrZWQuYXNzZXJ0X2NhbGxlZF93aXRoKFsnZ2l0JywgJ2NvbmZpZycsICctLWdldCcsICdyZW1vdGUub3JpZ2luLnVybCddLCBzdGRvdXQ9cGlwZV9tb2NrZWQsIGN3ZD0nd3d3Lnh4eC5jb20nKQoKCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cuc3VicHJvY2Vzcy5QSVBFJykKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5vcy5wYXRoLmN1cmRpcicpCkBtb2NrLnBhdGNoKCdtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudC5wa2cuc3VicHJvY2Vzcy5Qb3BlbicpCmRlZiB0ZXN0X2dldF9naXRfdGFncyhwb3Blbl9tb2NrZWQsIGN1cmRpcl9tb2NrZWQsIHBpcGVfbW9ja2VkKToKICAgIG1vY2t4ID0gbW9jay5NYWdpY01vY2soKQogICAgbW9ja3guc3Rkb3V0LnJlYWQucmV0dXJuX3ZhbHVlID0gJ2dpdFxudGFncyAnCiAgICBwb3Blbl9tb2NrZWQucmV0dXJuX3ZhbHVlID0gbW9ja3gKCiAgICB0YWdzID0gZ2V0X2dpdF90YWdzKCkKCiAgICBwb3Blbl9tb2NrZWQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoWydnaXQnLCAndGFnJ10sIHN0ZG91dD1waXBlX21vY2tlZCwgY3dkPWN1cmRpcl9tb2NrZWQpCgogICAgYXNzZXJ0IHRhZ3MgPT0gWyd0YWdzJywgJ2dpdCddCgogICAgdGFncyA9IGdldF9naXRfdGFncyhwYXRoPScvdG1wJykKCiAgICBwb3Blbl9tb2NrZWQuYXNzZXJ0X2NhbGxlZF93aXRoKFsnZ2l0JywgJ3RhZyddLCBzdGRvdXQ9cGlwZV9tb2NrZWQsIGN3ZD0nL3RtcCcpCgoKQG1vY2sucGF0Y2goJ21hcnZpbl9weXRob25fdG9vbGJveC5tYW5hZ2VtZW50LnBrZy5zdWJwcm9jZXNzLlBJUEUnKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnLnN1YnByb2Nlc3MuUG9wZW4nKQpAbW9jay5wYXRjaCgnbWFydmluX3B5dGhvbl90b29sYm94Lm1hbmFnZW1lbnQucGtnLm9zLnBhdGguY3VyZGlyJykKZGVmIHRlc3RfaXNfZ2l0X2NsZWFu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b3J0IHByaW50X2Z1bmN0aW9uCgppbXBvcnQgc3lzCmltcG9ydCBvcy5wYXRoCgpmcm9tIG1hcnZpbl9weXRob25fdG9vbGJveC5jb25maWcgaW1wb3J0IGZpbmRfaW5pZGlyLCBwYXJzZV9pbmkKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3gubWFuYWdlbWVudCBpbXBvcnQgY3JlYXRlX2NsaQppbXBvcnQgbWFydmluX3B5dGhvbl90b29sYm94IGFzIHRvb2xib3gKZnJvbSBtYXJ2aW5fcHl0aG9uX3Rvb2xib3ggaW1wb3J0IF9fdmVyc2lvbl9fIGFzIFRPT0xCT1hfVkVSU0lPTgoKIyBGaW5kIHRoZSBpbmkgZGlyZWN0b3J5CmluaWZpbGVuYW1lID0gJ21hcnZpbi5pbmknCmluaWRpciA9IGZpbmRfaW5pZGlyKGluaWZpbGVuYW1lKQoKaWYgbm90IGluaWRpcjoKICAgIGRlZmF1bHRfaW5pX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGVmYXVsdF9pbmlfcGF0aCwgaW5pZmlsZW5hbWUpKToKICAgICAgICBpbmlkaXIgPSBkZWZhdWx0X2luaV9wYXRoCgppZiBub3QgaW5pZGlyOgogICAgcHJpbnQoIkVSUk9SOiBtYXJ2aW5pbmkgZmlsZSAne30nIG5vdCBmb3VuZCIuZm9ybWF0KGluaWZpbGVuYW1lKSkKICAgIHN5cy5leGl0KDEpCgojIExvYWQgdGhlIGluaSBmaWxlCmluaXBhdGggPSBvcy5wYXRoLmpvaW4oaW5pZGlyLCBpbmlmaWxlbmFtZSkKCm9zLmVudmlyb25bIkRFRkFVTFRfQ09ORklHX1BBVEgiXSA9IGluaXBhdGgKb3MuZW52aXJvblsiTUFSVklOX0VOR0lORV9QQVRIIl0gPSBpbmlkaXIKb3MuZW52aXJvblsiTUFSVklOX1RPT0xCT1hfUEFUSCJdID0gdG9vbGJveC5fX3BhdGhfX1swXQpvcy5lbnZpcm9uWyJUT09MQk9YX1ZFUlNJT04iXSA9IFRPT0xCT1hfVkVSU0lPTgoKaWYgbm90IG9zLmdldGVudigiTE9HX0xFVkVMIik6CiAgICBvcy5lbnZpcm9uWyJMT0dfTEVWRUwiXSA9ICdJTkZPJwoKY29uZmlnX2RlZmF1bHRzID0gewogICAgJ2luaWRpcic6IGluaWRpciwKICAgICdtYXJ2aW5fcGFja2FnZWRpcic6ICd7aW5pZGlyfS97bWFydmluX3BhY2thZ2V9JywKfQoKY29uZmlnID0gcGFyc2VfaW5pKGluaXBhdGgsIGNvbmZpZ19kZWZhdWx0cykKCnBhY2thZ2VfbmFtZSA9IGNvbmZpZ1snbWFydmluX3BhY2thZ2UnXQpwYWNrYWdlX3BhdGggPSBjb25maWdbJ21hcnZpbl9wYWNrYWdlZGlyJ10KCmhvbWUgPSBvcy5lbnZpcm9uWydIT01FJ10Kb3MuZW52aXJvbi5zZXRkZWZhdWx0KCdTUEFSS19IT01FJywgJy9vcHQvc3BhcmsnKQpvcy5lbnZpcm9uLnNldGRlZmF1bHQoJ1dPUktPTl9IT01FJywgb3MucGF0aC5qb2luKGhvbWUsICcudmlydHVhbGVudnMnKSkKb3MuZW52aXJvbi5zZXRkZWZhdWx0KCdNQVJWSU5fSE9NRScsIG9zLnBhdGguam9pbihob21lLCAnbWFydmluJykpCm9zLmVudmlyb24uc2V0ZGVmYXVsdCgnTUFSVklOX0RBVEFfUEFUSCcsIG9zLnBhdGguam9pbihob21lLCAnbWFydmluL2RhdGEnKSkKCm1hcnZpbl9kYXRhID0gb3MuZW52aXJvblsnTUFSVklOX0RBVEFfUEFUSCddCmlmIG5vdCBvcy5wYXRoLmV4aXN0cyhtYXJ2aW5fZGF0YSk6CiAgICBvcy5tYWtlZGlycyhtYXJ2aW5fZGF0YSkKCgp0eXBlXyA9IGNvbmZpZy5nZXQoJ21hcnZpbl90eXBlJywgTm9uZSkKCmV4Y2x1ZGVfY29tbWFuZHMgPSBjb25maWcuZ2V0KCdtYXJ2aW5fZXhjbHVkZScsIE5vbmUpCgpjbGkgPSBjcmVhdGVfY2xpKHBhY2thZ2VfbmFtZSwgcGFja2FnZV9wYXRoLCB0eXBlXz10eXBlXywgZXhjbHVkZT1leGNsdWRlX2NvbW1hbmRzLCBjb25maWc9Y29uZmlnKQoKY2xpKCkKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=