@fluxlay/cli 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f7101b13-4293-5c29-a48b-09e989865b9b")}catch(e){}}();
4
- import{createRequire as e}from"node:module";import"dotenv/config";import*as t from"@clack/prompts";import n from"chalk";import{Command as r}from"commander";import i from"node:crypto";import a from"node:fs";import o from"node:path";import s from"js-yaml";import{fileURLToPath as c}from"node:url";import{createClient as l}from"@connectrpc/connect";import{createConnectTransport as u}from"@connectrpc/connect-node";import{fileDesc as d,serviceDesc as f}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_descriptor as p,file_google_protobuf_duration as m,file_google_protobuf_field_mask as h,file_google_protobuf_timestamp as g}from"@bufbuild/protobuf/wkt";import _ from"env-paths";import v from"fs-extra";import y from"node:os";import{build as ee,createServer as b}from"vite";import te from"node:net";import ne from"open";import{createClient as x}from"@supabase/supabase-js";import*as S from"@sentry/node";const C=e(import.meta.url),re=o.dirname(c(import.meta.url)),{getDeveloperKey:ie,setDeveloperKey:ae,validateManifest:w,packContent:T,unpackContent:oe,getContentKey:se,setContentKey:ce}=process.env.FLUXLAY_CLI_DEV===`1`?C("@fluxlay/core"):C(o.resolve(re,`./native/index.js`)),E=d(`ChpmbHV4bGF5L2F1dGgvdjEvYXV0aC5wcm90bxIPZmx1eGxheS5hdXRoLnYxIhkKF0NyZWF0ZURldmljZUNvZGVSZXF1ZXN0IoIBChhDcmVhdGVEZXZpY2VDb2RlUmVzcG9uc2USEwoLZGV2aWNlX2NvZGUYASABKAkSEQoJdXNlcl9jb2RlGAIgASgJEhgKEHZlcmlmaWNhdGlvbl91cmkYAyABKAkSEgoKZXhwaXJlc19pbhgEIAEoBRIQCghpbnRlcnZhbBgFIAEoBSItChZQb2xsRGV2aWNlVG9rZW5SZXF1ZXN0EhMKC2RldmljZV9jb2RlGAEgASgJInMKDURldmljZVNlc3Npb24SFAoMYWNjZXNzX3Rva2VuGAEgASgJEhUKDXJlZnJlc2hfdG9rZW4YAiABKAkSEgoKdG9rZW5fdHlwZRgDIAEoCRISCgpleHBpcmVzX2F0GAQgASgDEg0KBWVtYWlsGAUgASgJIn4KF1BvbGxEZXZpY2VUb2tlblJlc3BvbnNlEjIKBnN0YXR1cxgBIAEoDjIiLmZsdXhsYXkuYXV0aC52MS5EZXZpY2VUb2tlblN0YXR1cxIvCgdzZXNzaW9uGAIgASgLMh4uZmx1eGxheS5hdXRoLnYxLkRldmljZVNlc3Npb24iKQoUQXBwcm92ZURldmljZVJlcXVlc3QSEQoJdXNlcl9jb2RlGAEgASgJIhcKFUFwcHJvdmVEZXZpY2VSZXNwb25zZSrKAQoRRGV2aWNlVG9rZW5TdGF0dXMSIwofREVWSUNFX1RPS0VOX1NUQVRVU19VTlNQRUNJRklFRBAAEi0KKURFVklDRV9UT0tFTl9TVEFUVVNfQVVUSE9SSVpBVElPTl9QRU5ESU5HEAESIAocREVWSUNFX1RPS0VOX1NUQVRVU19BUFBST1ZFRBACEh8KG0RFVklDRV9UT0tFTl9TVEFUVVNfRVhQSVJFRBADEh4KGkRFVklDRV9UT0tFTl9TVEFUVVNfREVOSUVEEARCvQEKE2NvbS5mbHV4bGF5LmF1dGgudjFCCUF1dGhQcm90b1ABWj1naXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L2F1dGgvdjE7YXV0aHYxogIDRkFYqgIPRmx1eGxheS5BdXRoLlYxygIPRmx1eGxheVxBdXRoXFYx4gIbRmx1eGxheVxBdXRoXFYxXEdQQk1ldGFkYXRh6gIRRmx1eGxheTo6QXV0aDo6VjFiBnByb3RvMw`),D=d(`CiJmbHV4bGF5L2NoZWNrb3V0L3YxL2NoZWNrb3V0LnByb3RvEhNmbHV4bGF5LmNoZWNrb3V0LnYxIkQKGkNyZWF0ZVBheW1lbnRJbnRlbnRSZXF1ZXN0EhQKDHdhbGxwYXBlcl9pZBgBIAEoCRIQCghjdXJyZW5jeRgCIAEoCSI0ChtDcmVhdGVQYXltZW50SW50ZW50UmVzcG9uc2USFQoNY2xpZW50X3NlY3JldBgBIAEoCULdAQoXY29tLmZsdXhsYXkuY2hlY2tvdXQudjFCDUNoZWNrb3V0UHJvdG9QAVpFZ2l0aHViLmNvbS9rZW4xMDkvZmx1eGxheS1wcm90by9nZW4vZ28vZmx1eGxheS9jaGVja291dC92MTtjaGVja291dHYxogIDRkNYqgITRmx1eGxheS5DaGVja291dC5WMcoCE0ZsdXhsYXlcQ2hlY2tvdXRcVjHiAh9GbHV4bGF5XENoZWNrb3V0XFYxXEdQQk1ldGFkYXRh6gIVRmx1eGxheTo6Q2hlY2tvdXQ6OlYxYgZwcm90bzM`),O=d(`ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSLaFwoKRmxvYXRSdWxlcxKDAQoFY29uc3QYASABKAJCdMJIcQpvCgtmbG9hdC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEp8BCgJsdBgCIAEoAkKQAcJIjAEKiQEKCGZsb2F0Lmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEq8BCgNsdGUYAyABKAJCnwHCSJsBCpgBCglmbG9hdC5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLvBwoCZ3QYBCABKAJC4AfCSNwHCo0BCghmbG9hdC5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsMBCgtmbG9hdC5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs0BChVmbG9hdC5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrTAQoMZmxvYXQuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3QEKFmZsb2F0Lmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEroICgNndGUYBSABKAJCqgjCSKYICpsBCglmbG9hdC5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0gEKDGZsb2F0Lmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3AEKFmZsb2F0Lmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuIBCg1mbG9hdC5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrsAQoXZmxvYXQuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESfwoCaW4YBiADKAJCc8JIcApuCghmbG9hdC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdgoGbm90X2luGAcgAygCQmbCSGMKYQoMZmxvYXQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdQoGZmluaXRlGAggASgIQmXCSGIKYAoMZmxvYXQuZmluaXRlGlBydWxlcy5maW5pdGUgPyAodGhpcy5pc05hbigpIHx8IHRoaXMuaXNJbmYoKSA/ICd2YWx1ZSBtdXN0IGJlIGZpbml0ZScgOiAnJykgOiAnJxIrCgdleGFtcGxlGAkgAygCQhrCSBcKFQoNZmxvYXQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i7RcKC0RvdWJsZVJ1bGVzEoQBCgVjb25zdBgBIAEoAUJ1wkhyCnAKDGRvdWJsZS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqABCgJsdBgCIAEoAUKRAcJIjQEKigEKCWRvdWJsZS5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKwAQoDbHRlGAMgASgBQqABwkicAQqZAQoKZG91YmxlLmx0ZRqKASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvQHCgJndBgEIAEoAULlB8JI4QcKjgEKCWRvdWJsZS5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsQBCgxkb3VibGUuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrOAQoWZG91YmxlLmd0X2x0X2V4Y2x1c2l2ZRqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCtQBCg1kb3VibGUuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3gEKF2RvdWJsZS5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK/CAoDZ3RlGAUgASgBQq8IwkirCAqcAQoKZG91YmxlLmd0ZRqNASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrTAQoNZG91YmxlLmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3QEKF2RvdWJsZS5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrjAQoOZG91YmxlLmd0ZV9sdGUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCu0BChhkb3VibGUuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygBQnTCSHEKbwoJZG91YmxlLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKAFCZ8JIZApiCg1kb3VibGUubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdgoGZmluaXRlGAggASgIQmbCSGMKYQoNZG91YmxlLmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSLAoHZXhhbXBsZRgJIAMoAUIbwkgYChYKDmRvdWJsZS5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50MzJSdWxlcxKDAQoFY29uc3QYASABKAVCdMJIcQpvCgtpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoBUJ8wkh5CncKCGludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKAVCjAHCSIgBCoUBCglpbnQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoBUKIB8JIhAcKegoIaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgFQtMHwkjPBwqIAQoJaW50MzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygFQnPCSHAKbgoIaW50MzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoBUJmwkhjCmEKDGludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCCADKAVCGsJIFwoVCg1pbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50NjRSdWxlcxKDAQoFY29uc3QYASABKANCdMJIcQpvCgtpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoA0J8wkh5CncKCGludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKANCjAHCSIgBCoUBCglpbnQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoA0KIB8JIhAcKegoIaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgDQtMHwkjPBwqIAQoJaW50NjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygDQnPCSHAKbgoIaW50NjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoA0JmwkhjCmEKDGludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDMyUnVsZXMShAEKBWNvbnN0GAEgASgNQnXCSHIKcAoMdWludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgNQn3CSHoKeAoJdWludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKA1CjQHCSIkBCoYBCgp1aW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKA1CjQfCSIkHCnsKCXVpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgNQtgHwkjUBwqJAQoKdWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygNQnTCSHEKbwoJdWludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKA1CZ8JIZApiCg11aW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoDUIbwkgYChYKDnVpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDY0UnVsZXMShAEKBWNvbnN0GAEgASgEQnXCSHIKcAoMdWludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgEQn3CSHoKeAoJdWludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKARCjQHCSIkBCoYBCgp1aW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKARCjQfCSIkHCnsKCXVpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgEQtgHwkjUBwqJAQoKdWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygEQnTCSHEKbwoJdWludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKARCZ8JIZApiCg11aW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoBEIbwkgYChYKDnVpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDMyUnVsZXMShAEKBWNvbnN0GAEgASgRQnXCSHIKcAoMc2ludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgRQn3CSHoKeAoJc2ludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBFCjQHCSIkBCoYBCgpzaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBFCjQfCSIkHCnsKCXNpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgRQtgHwkjUBwqJAQoKc2ludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygRQnTCSHEKbwoJc2ludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBFCZ8JIZApiCg1zaW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDY0UnVsZXMShAEKBWNvbnN0GAEgASgSQnXCSHIKcAoMc2ludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgSQn3CSHoKeAoJc2ludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBJCjQHCSIkBCoYBCgpzaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBJCjQfCSIkHCnsKCXNpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgSQtgHwkjUBwqJAQoKc2ludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygSQnTCSHEKbwoJc2ludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBJCZ8JIZApiCg1zaW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEkIbwkgYChYKDnNpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQzMlJ1bGVzEoUBCgVjb25zdBgBIAEoB0J2wkhzCnEKDWZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAdCfsJIewp5CgpmaXhlZDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAdCjgHCSIoBCocBCgtmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgHQpIHwkiOBwp8CgpmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgHQt0HwkjZBwqKAQoLZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAdCdcJIcgpwCgpmaXhlZDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAdCaMJIZQpjCg5maXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAdCHMJIGQoXCg9maXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIq8VCgxGaXhlZDY0UnVsZXMShQEKBWNvbnN0GAEgASgGQnbCSHMKcQoNZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEowBCgJsdBgCIAEoBkJ+wkh7CnkKCmZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoBkKOAcJIigEKhwEKC2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAZCkgfCSI4HCnwKCmZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAZC3QfCSNkHCooBCgtmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoEBCgJpbhgGIAMoBkJ1wkhyCnAKCmZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEngKBm5vdF9pbhgHIAMoBkJowkhlCmMKDmZpeGVkNjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwBUKDVNGaXhlZDMyUnVsZXMShgEKBWNvbnN0GAEgASgPQnfCSHQKcgoOc2ZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKNAQoCbHQYAiABKA9Cf8JIfAp6CgtzZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKfAQoDbHRlGAMgASgPQo8BwkiLAQqIAQoMc2ZpeGVkMzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKmBwoCZ3QYBCABKA9ClwfCSJMHCn0KC3NmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOc2ZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPc2ZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES8gcKA2d0ZRgFIAEoD0LiB8JI3gcKiwEKDHNmaXhlZDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9zZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBzZml4ZWQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKCAQoCaW4YBiADKA9CdsJIcwpxCgtzZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeQoGbm90X2luGAcgAygPQmnCSGYKZAoPc2ZpeGVkMzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLgoHZXhhbXBsZRgIIAMoD0IdwkgaChgKEHNmaXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQ2NFJ1bGVzEoYBCgVjb25zdBgBIAEoEEJ3wkh0CnIKDnNmaXhlZDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgQQn/CSHwKegoLc2ZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoEEKPAcJIiwEKiAEKDHNmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgQQpcHwkiTBwp9CgtzZml4ZWQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKBBC4gfCSN4HCosBCgxzZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkNjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkNjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygQQnbCSHMKcQoLc2ZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoEEJpwkhmCmQKD3NmaXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKBBCHcJIGgoYChBzZml4ZWQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLHAQoJQm9vbFJ1bGVzEoIBCgVjb25zdBgBIAEoCEJzwkhwCm4KCmJvb2wuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIiiDkKC1N0cmluZ1J1bGVzEoYBCgVjb25zdBgBIAEoCUJ3wkh0CnIKDHN0cmluZy5jb25zdBpidGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSfgoDbGVuGBMgASgEQnHCSG4KbAoKc3RyaW5nLmxlbhpedWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKZAQoHbWluX2xlbhgCIAEoBEKHAcJIgwEKgAEKDnN0cmluZy5taW5fbGVuGm51aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKXAQoHbWF4X2xlbhgDIAEoBEKFAcJIgQEKfwoOc3RyaW5nLm1heF9sZW4abXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSmwEKCWxlbl9ieXRlcxgUIAEoBEKHAcJIgwEKgAEKEHN0cmluZy5sZW5fYnl0ZXMabHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSAhPSBydWxlcy5sZW5fYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKjAQoJbWluX2J5dGVzGAQgASgEQo8BwkiLAQqIAQoQc3RyaW5nLm1pbl9ieXRlcxp0dWludChieXRlcyh0aGlzKS5zaXplKCkpIDwgcnVsZXMubWluX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSogEKCW1heF9ieXRlcxgFIAEoBEKOAcJIigEKhwEKEHN0cmluZy5tYXhfYnl0ZXMac3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9ieXRlc10pIDogJycSjQEKB3BhdHRlcm4YBiABKAlCfMJIeQp3Cg5zdHJpbmcucGF0dGVybhplIXRoaXMubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBkb2VzIG5vdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycShAEKBnByZWZpeBgHIAEoCUJ0wkhxCm8KDXN0cmluZy5wcmVmaXgaXiF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCBgJXNgJy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSggEKBnN1ZmZpeBgIIAEoCUJywkhvCm0KDXN0cmluZy5zdWZmaXgaXCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEpABCghjb250YWlucxgJIAEoCUJ+wkh7CnkKD3N0cmluZy5jb250YWlucxpmIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpgBCgxub3RfY29udGFpbnMYFyABKAlCgQHCSH4KfAoTc3RyaW5nLm5vdF9jb250YWlucxpldGhpcy5jb250YWlucyhydWxlcy5ub3RfY29udGFpbnMpID8gJ3ZhbHVlIGNvbnRhaW5zIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLm5vdF9jb250YWluc10pIDogJycSgAEKAmluGAogAygJQnTCSHEKbwoJc3RyaW5nLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YCyADKAlCZ8JIZApiCg1zdHJpbmcubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycS3wEKBWVtYWlsGAwgASgIQs0BwkjJAQphCgxzdHJpbmcuZW1haWwSI3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGiwhcnVsZXMuZW1haWwgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzRW1haWwoKQpkChJzdHJpbmcuZW1haWxfZW1wdHkSMnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGhohcnVsZXMuZW1haWwgfHwgdGhpcyAhPSAnJ0gAEucBCghob3N0bmFtZRgNIAEoCELSAcJIzgEKZQoPc3RyaW5nLmhvc3RuYW1lEh52YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdG5hbWUaMiFydWxlcy5ob3N0bmFtZSB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpCmUKFXN0cmluZy5ob3N0bmFtZV9lbXB0eRItdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lGh0hcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyAhPSAnJ0gAEscBCgJpcBgOIAEoCEK4AcJItAEKVQoJc3RyaW5nLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxomIXJ1bGVzLmlwIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKCkKWwoPc3RyaW5nLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxoXIXJ1bGVzLmlwIHx8IHRoaXMgIT0gJydIABLWAQoEaXB2NBgPIAEoCELFAcJIwQEKXAoLc3RyaW5nLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaKSFydWxlcy5pcHY0IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKDQpCmEKEXN0cmluZy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGhkhcnVsZXMuaXB2NCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjYYECABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY2EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzGikhcnVsZXMuaXB2NiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg2KQphChFzdHJpbmcuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxoZIXJ1bGVzLmlwdjYgfHwgdGhpcyAhPSAnJ0gAEr8BCgN1cmkYESABKAhCrwHCSKsBClEKCnN0cmluZy51cmkSGXZhbHVlIG11c3QgYmUgYSB2YWxpZCBVUkkaKCFydWxlcy51cmkgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzVXJpKCkKVgoQc3RyaW5nLnVyaV9lbXB0eRIodmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVSSRoYIXJ1bGVzLnVyaSB8fCB0aGlzICE9ICcnSAAScAoHdXJpX3JlZhgSIAEoCEJdwkhaClgKDnN0cmluZy51cmlfcmVmEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJIFJlZmVyZW5jZRohIXJ1bGVzLnVyaV9yZWYgfHwgdGhpcy5pc1VyaVJlZigpSAASkAIKB2FkZHJlc3MYFSABKAhC/AHCSPgBCoEBCg5zdHJpbmcuYWRkcmVzcxItdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKYAgoEdXVpZBgWIAEoCEKHAsJIgwIKpQEKC3N0cmluZy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS8AEKBXR1dWlkGCEgASgIQt4BwkjaAQpzCgxzdHJpbmcudHV1aWQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASlgIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvgBwkj0AQp4ChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEs8CChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQq8CwkirAgqTAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SNXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS8gEKCWlwX3ByZWZpeBgdIAEoCELcAcJI2AEKbAoQc3RyaW5nLmlwX3ByZWZpeBIfdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABKDAgoLaXB2NF9wcmVmaXgYHiABKAhC6wHCSOcBCnUKEnN0cmluZy5pcHY0X3ByZWZpeBIhdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjZfcHJlZml4GB8gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2Nl9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAErUCCg1ob3N0X2FuZF9wb3J0GCAgASgIQpsCwkiXAgqZAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSQXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEvUBCgR1bGlkGCMgASgIQuQBwkjgAQqCAQoLc3RyaW5nLnVsaWQSGnZhbHVlIG11c3QgYmUgYSB2YWxpZCBVTElEGlchcnVsZXMudWxpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kJykKWQoRc3RyaW5nLnVsaWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVTElEGhkhcnVsZXMudWxpZCB8fCB0aGlzICE9ICcnSAASqAUKEHdlbGxfa25vd25fcmVnZXgYGCABKA4yGC5idWYudmFsaWRhdGUuS25vd25SZWdleELxBMJI7QQK8AEKI3N0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lEiZ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRqgAXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMSB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXjo/WzAtOWEtekEtWiEjJCUmXCcqKy0uXl98flx4NjBdKyQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSskJykKjQEKKXN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lX2VtcHR5EjV2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRopcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgIT0gJycK5wEKJHN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl92YWx1ZRIndmFsdWUgbXVzdCBiZSBhIHZhbGlkIEhUVFAgaGVhZGVyIHZhbHVlGpUBcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAyIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXlteXHUwMDAwLVx1MDAwOFx1MDAwQS1cdTAwMUZcdTAwN0ZdKiQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSokJylIABIOCgZzdHJpY3QYGSABKAgSLAoHZXhhbXBsZRgiIAMoCUIbwkgYChYKDnN0cmluZy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLCEgoKQnl0ZXNSdWxlcxKAAQoFY29uc3QYASABKAxCccJIbgpsCgtieXRlcy5jb25zdBpddGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBiZSAleCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEngKA2xlbhgNIAEoBEJrwkhoCmYKCWJ5dGVzLmxlbhpZdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSkAEKB21pbl9sZW4YAiABKARCf8JIfAp6Cg1ieXRlcy5taW5fbGVuGml1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg1ieXRlcy5tYXhfbGVuGmF1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpABCgdwYXR0ZXJuGAQgASgJQn/CSHwKegoNYnl0ZXMucGF0dGVybhppIXN0cmluZyh0aGlzKS5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ3ZhbHVlIG11c3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoEBCgZwcmVmaXgYBSABKAxCccJIbgpsCgxieXRlcy5wcmVmaXgaXCF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCAleCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEn8KBnN1ZmZpeBgGIAEoDEJvwkhsCmoKDGJ5dGVzLnN1ZmZpeBpaIXRoaXMuZW5kc1dpdGgocnVsZXMuc3VmZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHN1ZmZpeCAleCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEoMBCghjb250YWlucxgHIAEoDEJxwkhuCmwKDmJ5dGVzLmNvbnRhaW5zGlohdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAndmFsdWUgZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSpwEKAmluGAggAygMQpoBwkiWAQqTAQoIYnl0ZXMuaW4ahgFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YCSADKAxCZsJIYwphCgxieXRlcy5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLrAQoCaXAYCiABKAhC3AHCSNgBCnQKCGJ5dGVzLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5AEKBGlwdjQYCyABKAhC0wHCSM8BCmUKCmJ5dGVzLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5QEKBGlwdjYYDCABKAhC1AHCSNABCmYKCmJ5dGVzLmlwdjYSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEtUBCgR1dWlkGA8gASgIQsQBwkjAAQpeCgpieXRlcy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLUAwoJRW51bVJ1bGVzEoIBCgVjb25zdBgBIAEoBUJzwkhwCm4KCmVudW0uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIUCgxkZWZpbmVkX29ubHkYAiABKAgSfgoCaW4YAyADKAVCcsJIbwptCgdlbnVtLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ1CgZub3RfaW4YBCADKAVCZcJIYgpgCgtlbnVtLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEioKB2V4YW1wbGUYBSADKAVCGcJIFgoUCgxlbnVtLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAiL7AwoNUmVwZWF0ZWRSdWxlcxKeAQoJbWluX2l0ZW1zGAEgASgEQooBwkiGAQqDAQoScmVwZWF0ZWQubWluX2l0ZW1zGm11aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICd2YWx1ZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEqIBCgltYXhfaXRlbXMYAiABKARCjgHCSIoBCocBChJyZXBlYXRlZC5tYXhfaXRlbXMacXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIpkXCg1EdXJhdGlvblJ1bGVzEqEBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJ3wkh0CnIKDmR1cmF0aW9uLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSqAEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQn/CSHwKegoLZHVyYXRpb24ubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASugEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKPAcJIiwEKiAEKDGR1cmF0aW9uLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASwQcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQpcHwkiTBwp9CgtkdXJhdGlvbi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDmR1cmF0aW9uLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD2R1cmF0aW9uLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEo0ICgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25C4gfCSN4HCosBCgxkdXJhdGlvbi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPZHVyYXRpb24uZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQZHVyYXRpb24uZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESnQEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnbCSHMKcQoLZHVyYXRpb24uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEpQBCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CacJIZgpkCg9kdXJhdGlvbi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i/QUKDkZpZWxkTWFza1J1bGVzEr8BCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCkwHCSI8BCowBChBmaWVsZF9tYXNrLmNvbnN0Gnh0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICd2YWx1ZSBtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS2QEKAmluGAIgAygJQswBwkjIAQrFAQoNZmllbGRfbWFzay5pbhqzASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICd2YWx1ZSBtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEvMBCgZub3RfaW4YAyADKAlC4gHCSN4BCtsBChFmaWVsZF9tYXNrLm5vdF9pbhrFASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ3ZhbHVlIG11c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIikhgKDlRpbWVzdGFtcFJ1bGVzEqMBCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCeMJIdQpzCg90aW1lc3RhbXAuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKrAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQoABwkh9CnsKDHRpbWVzdGFtcC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK8AQoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKQAcJIjAEKiQEKDXRpbWVzdGFtcC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEmwKBmx0X25vdxgHIAEoCEJawkhXClUKEHRpbWVzdGFtcC5sdF9ub3caQShydWxlcy5sdF9ub3cgJiYgdGhpcyA+IG5vdykgPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbm93JyA6ICcnSAASxwcKAmd0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKcB8JImAcKfgoMdGltZXN0YW1wLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq3AQoPdGltZXN0YW1wLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq/AQoZdGltZXN0YW1wLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCscBChB0aW1lc3RhbXAuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrPAQoadGltZXN0YW1wLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEpMICgNndGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQucHwkjjBwqMAQoNdGltZXN0YW1wLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsYBChB0aW1lc3RhbXAuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs4BChp0aW1lc3RhbXAuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1gEKEXRpbWVzdGFtcC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt4BCht0aW1lc3RhbXAuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESbwoGZ3Rfbm93GAggASgIQl3CSFoKWAoQdGltZXN0YW1wLmd0X25vdxpEKHJ1bGVzLmd0X25vdyAmJiB0aGlzIDwgbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBub3cnIDogJydIARK4AQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQowBwkiIAQqFAQoQdGltZXN0YW1wLndpdGhpbhpxdGhpcyA8IG5vdy1ydWxlcy53aXRoaW4gfHwgdGhpcyA+IG5vdytydWxlcy53aXRoaW4gPyAndmFsdWUgbXVzdCBiZSB3aXRoaW4gJXMgb2Ygbm93Jy5mb3JtYXQoW3J1bGVzLndpdGhpbl0pIDogJycSSwoHZXhhbXBsZRgKIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCHsJIGwoZChF0aW1lc3RhbXAuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iOQoKVmlvbGF0aW9ucxIrCgp2aW9sYXRpb25zGAEgAygLMhcuYnVmLnZhbGlkYXRlLlZpb2xhdGlvbiKfAQoJVmlvbGF0aW9uEiYKBWZpZWxkGAUgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIlCgRydWxlGAYgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIPCgdydWxlX2lkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDwoHZm9yX2tleRgEIAEoCEoECAEQAlIKZmllbGRfcGF0aCI9CglGaWVsZFBhdGgSMAoIZWxlbWVudHMYASADKAsyHi5idWYudmFsaWRhdGUuRmllbGRQYXRoRWxlbWVudCLpAgoQRmllbGRQYXRoRWxlbWVudBIUCgxmaWVsZF9udW1iZXIYASABKAUSEgoKZmllbGRfbmFtZRgCIAEoCRI+CgpmaWVsZF90eXBlGAMgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPAoIa2V5X3R5cGUYBCABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI+Cgp2YWx1ZV90eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSDwoFaW5kZXgYBiABKARIABISCghib29sX2tleRgHIAEoCEgAEhEKB2ludF9rZXkYCCABKANIABISCgh1aW50X2tleRgJIAEoBEgAEhQKCnN0cmluZ19rZXkYCiABKAlIAEILCglzdWJzY3JpcHQqoQEKBklnbm9yZRIWChJJR05PUkVfVU5TUEVDSUZJRUQQABIYChRJR05PUkVfSUZfWkVST19WQUxVRRABEhEKDUlHTk9SRV9BTFdBWVMQAyIECAIQAioMSUdOT1JFX0VNUFRZKg5JR05PUkVfREVGQVVMVCoXSUdOT1JFX0lGX0RFRkFVTFRfVkFMVUUqFUlHTk9SRV9JRl9VTlBPUFVMQVRFRCpuCgpLbm93blJlZ2V4EhsKF0tOT1dOX1JFR0VYX1VOU1BFQ0lGSUVEEAASIAocS05PV05fUkVHRVhfSFRUUF9IRUFERVJfTkFNRRABEiEKHUtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX1ZBTFVFEAI6VgoHbWVzc2FnZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiHCSABKAsyGi5idWYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlOk4KBW9uZW9mEh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuT25lb2ZSdWxlc1IFb25lb2Y6TgoFZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVmaWVsZDpdCgpwcmVkZWZpbmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiICSABKAsyHS5idWYudmFsaWRhdGUuUHJlZGVmaW5lZFJ1bGVzUgpwcmVkZWZpbmVkQrsBChBjb20uYnVmLnZhbGlkYXRlQg1WYWxpZGF0ZVByb3RvUAFaR2J1Zi5idWlsZC9nZW4vZ28vYnVmYnVpbGQvcHJvdG92YWxpZGF0ZS9wcm90b2NvbGJ1ZmZlcnMvZ28vYnVmL3ZhbGlkYXRlogIDQlZYqgIMQnVmLlZhbGlkYXRlygIMQnVmXFZhbGlkYXRl4gIYQnVmXFZhbGlkYXRlXEdQQk1ldGFkYXRh6gINQnVmOjpWYWxpZGF0ZQ`,[p,m,h,g]),le=d(`CiBmbHV4bGF5L2NvbnRhY3QvdjEvY29udGFjdC5wcm90bxISZmx1eGxheS5jb250YWN0LnYxIrUBChJTZW5kQ29udGFjdFJlcXVlc3QSPwoIY2F0ZWdvcnkYASABKA4yIy5mbHV4bGF5LmNvbnRhY3QudjEuQ29udGFjdENhdGVnb3J5Qgi6SAWCAQIgABIVCgRuYW1lGAIgASgJQge6SARyAhABEhYKBWVtYWlsGAMgASgJQge6SARyAmABEhgKB3N1YmplY3QYBCABKAlCB7pIBHICEAESFQoEYm9keRgFIAEoCUIHukgEcgIQASIVChNTZW5kQ29udGFjdFJlc3BvbnNlKsMCCg9Db250YWN0Q2F0ZWdvcnkSIAocQ09OVEFDVF9DQVRFR09SWV9VTlNQRUNJRklFRBAAEh8KG0NPTlRBQ1RfQ0FURUdPUllfQlVHX1JFUE9SVBABEiQKIENPTlRBQ1RfQ0FURUdPUllfRkVBVFVSRV9SRVFVRVNUEAISIgoeQ09OVEFDVF9DQVRFR09SWV9BQ0NPVU5UX0lTU1VFEAMSHgoaQ09OVEFDVF9DQVRFR09SWV9DT1BZUklHSFQQBBIaChZDT05UQUNUX0NBVEVHT1JZX09USEVSEAUSHAoYQ09OVEFDVF9DQVRFR09SWV9SRVZFTlVFEAYSIwofQ09OVEFDVF9DQVRFR09SWV9DT05URU5UX1JFVklFVxAHEiQKIENPTlRBQ1RfQ0FURUdPUllfQ1JFQVRPUl9QUk9HUkFNEAhC1QEKFmNvbS5mbHV4bGF5LmNvbnRhY3QudjFCDENvbnRhY3RQcm90b1ABWkNnaXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L2NvbnRhY3QvdjE7Y29udGFjdHYxogIDRkNYqgISRmx1eGxheS5Db250YWN0LlYxygISRmx1eGxheVxDb250YWN0XFYx4gIeRmx1eGxheVxDb250YWN0XFYxXEdQQk1ldGFkYXRh6gIURmx1eGxheTo6Q29udGFjdDo6VjFiBnByb3RvMw`,[O]),ue=d(`Ch5mbHV4bGF5L3N0cmlwZS92MS9zdHJpcGUucHJvdG8SEWZsdXhsYXkuc3RyaXBlLnYxIhYKFENyZWF0ZUFjY291bnRSZXF1ZXN0IlAKFUNyZWF0ZUFjY291bnRSZXNwb25zZRIZChFzdHJpcGVfYWNjb3VudF9pZBgBIAEoCRIcChRvbmJvYXJkaW5nX2NvbXBsZXRlZBgCIAEoCCIdChtDcmVhdGVBY2NvdW50U2Vzc2lvblJlcXVlc3QiNQocQ3JlYXRlQWNjb3VudFNlc3Npb25SZXNwb25zZRIVCg1jbGllbnRfc2VjcmV0GAEgASgJIhkKF0dldEFjY291bnRTdGF0dXNSZXF1ZXN0Iq0BChhHZXRBY2NvdW50U3RhdHVzUmVzcG9uc2USEwoLaGFzX2FjY291bnQYASABKAgSHAoUb25ib2FyZGluZ19jb21wbGV0ZWQYAiABKAgSHAoUcGVuZGluZ192ZXJpZmljYXRpb24YAyADKAkSFQoNY3VycmVudGx5X2R1ZRgEIAMoCRIQCghwYXN0X2R1ZRgFIAMoCRIXCg9kaXNhYmxlZF9yZWFzb24YBiABKAlCzQEKFWNvbS5mbHV4bGF5LnN0cmlwZS52MUILU3RyaXBlUHJvdG9QAVpBZ2l0aHViLmNvbS9rZW4xMDkvZmx1eGxheS1wcm90by9nZW4vZ28vZmx1eGxheS9zdHJpcGUvdjE7c3RyaXBldjGiAgNGU1iqAhFGbHV4bGF5LlN0cmlwZS5WMcoCEUZsdXhsYXlcU3RyaXBlXFYx4gIdRmx1eGxheVxTdHJpcGVcVjFcR1BCTWV0YWRhdGHqAhNGbHV4bGF5OjpTdHJpcGU6OlYxYgZwcm90bzM`),k=d(`CiVmbHV4bGF5L2NvbW1vbi92MS9idWNrZXRfb2JqZWN0LnByb3RvEhFmbHV4bGF5LmNvbW1vbi52MSI5ChBCdWNrZXRPYmplY3RNZXRhEg8KB3VzZXJfaWQYASABKAkSFAoMd2FsbHBhcGVyX2lkGAIgASgJIoYBCgxCdWNrZXRPYmplY3QSEwoLb2JqZWN0X3R5cGUYASABKAkSFAoMY29udGVudF90eXBlGAIgASgJEgoKAmlkGAMgASgJEgwKBG5hbWUYBCABKAkSMQoEbWV0YRgFIAEoCzIjLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdE1ldGFC0wEKFWNvbS5mbHV4bGF5LmNvbW1vbi52MUIRQnVja2V0T2JqZWN0UHJvdG9QAVpBZ2l0aHViLmNvbS9rZW4xMDkvZmx1eGxheS1wcm90by9nZW4vZ28vZmx1eGxheS9jb21tb24vdjE7Y29tbW9udjGiAgNGQ1iqAhFGbHV4bGF5LkNvbW1vbi5WMcoCEUZsdXhsYXlcQ29tbW9uXFYx4gIdRmx1eGxheVxDb21tb25cVjFcR1BCTWV0YWRhdGHqAhNGbHV4bGF5OjpDb21tb246OlYxYgZwcm90bzM`),A=d(`ChhmbHV4bGF5L3YxL3NlcnZpY2UucHJvdG8SCmZsdXhsYXkudjEy8gYKC1VzZXJTZXJ2aWNlEmYKDkdldEN1cnJlbnRVc2VyEiYuZmx1eGxheS51c2VyLnYxLkdldEN1cnJlbnRVc2VyUmVxdWVzdBonLmZsdXhsYXkudXNlci52MS5HZXRDdXJyZW50VXNlclJlc3BvbnNlIgOQAgESUQoHR2V0VXNlchIfLmZsdXhsYXkudXNlci52MS5HZXRVc2VyUmVxdWVzdBogLmZsdXhsYXkudXNlci52MS5HZXRVc2VyUmVzcG9uc2UiA5ACARJ/ChhVcGRhdGVDdXJyZW50VXNlclByb2ZpbGUSMC5mbHV4bGF5LnVzZXIudjEuVXBkYXRlQ3VycmVudFVzZXJQcm9maWxlUmVxdWVzdBoxLmZsdXhsYXkudXNlci52MS5VcGRhdGVDdXJyZW50VXNlclByb2ZpbGVSZXNwb25zZRJtChJVcGRhdGVQcm9maWxlSW1hZ2USKi5mbHV4bGF5LnVzZXIudjEuVXBkYXRlUHJvZmlsZUltYWdlUmVxdWVzdBorLmZsdXhsYXkudXNlci52MS5VcGRhdGVQcm9maWxlSW1hZ2VSZXNwb25zZRJ5ChZDcmVhdGVQcm9maWxlVXBsb2FkVVJMEi4uZmx1eGxheS51c2VyLnYxLkNyZWF0ZVByb2ZpbGVVcGxvYWRVUkxSZXF1ZXN0Gi8uZmx1eGxheS51c2VyLnYxLkNyZWF0ZVByb2ZpbGVVcGxvYWRVUkxSZXNwb25zZRJ1ChNHZXRPbmJvYXJkaW5nU3RhdHVzEisuZmx1eGxheS51c2VyLnYxLkdldE9uYm9hcmRpbmdTdGF0dXNSZXF1ZXN0GiwuZmx1eGxheS51c2VyLnYxLkdldE9uYm9hcmRpbmdTdGF0dXNSZXNwb25zZSIDkAIBEm0KEkNvbXBsZXRlT25ib2FyZGluZxIqLmZsdXhsYXkudXNlci52MS5Db21wbGV0ZU9uYm9hcmRpbmdSZXF1ZXN0GisuZmx1eGxheS51c2VyLnYxLkNvbXBsZXRlT25ib2FyZGluZ1Jlc3BvbnNlElcKCUxpc3RVc2VycxIhLmZsdXhsYXkudXNlci52MS5MaXN0VXNlcnNSZXF1ZXN0GiIuZmx1eGxheS51c2VyLnYxLkxpc3RVc2Vyc1Jlc3BvbnNlIgOQAgEyvAIKC0F1dGhTZXJ2aWNlEmcKEENyZWF0ZURldmljZUNvZGUSKC5mbHV4bGF5LmF1dGgudjEuQ3JlYXRlRGV2aWNlQ29kZVJlcXVlc3QaKS5mbHV4bGF5LmF1dGgudjEuQ3JlYXRlRGV2aWNlQ29kZVJlc3BvbnNlEmQKD1BvbGxEZXZpY2VUb2tlbhInLmZsdXhsYXkuYXV0aC52MS5Qb2xsRGV2aWNlVG9rZW5SZXF1ZXN0GiguZmx1eGxheS5hdXRoLnYxLlBvbGxEZXZpY2VUb2tlblJlc3BvbnNlEl4KDUFwcHJvdmVEZXZpY2USJS5mbHV4bGF5LmF1dGgudjEuQXBwcm92ZURldmljZVJlcXVlc3QaJi5mbHV4bGF5LmF1dGgudjEuQXBwcm92ZURldmljZVJlc3BvbnNlMnAKDkNvbnRhY3RTZXJ2aWNlEl4KC1NlbmRDb250YWN0EiYuZmx1eGxheS5jb250YWN0LnYxLlNlbmRDb250YWN0UmVxdWVzdBonLmZsdXhsYXkuY29udGFjdC52MS5TZW5kQ29udGFjdFJlc3BvbnNlMuUCChRTdHJpcGVDb25uZWN0U2VydmljZRJiCg1DcmVhdGVBY2NvdW50EicuZmx1eGxheS5zdHJpcGUudjEuQ3JlYXRlQWNjb3VudFJlcXVlc3QaKC5mbHV4bGF5LnN0cmlwZS52MS5DcmVhdGVBY2NvdW50UmVzcG9uc2USdwoUQ3JlYXRlQWNjb3VudFNlc3Npb24SLi5mbHV4bGF5LnN0cmlwZS52MS5DcmVhdGVBY2NvdW50U2Vzc2lvblJlcXVlc3QaLy5mbHV4bGF5LnN0cmlwZS52MS5DcmVhdGVBY2NvdW50U2Vzc2lvblJlc3BvbnNlEnAKEEdldEFjY291bnRTdGF0dXMSKi5mbHV4bGF5LnN0cmlwZS52MS5HZXRBY2NvdW50U3RhdHVzUmVxdWVzdBorLmZsdXhsYXkuc3RyaXBlLnYxLkdldEFjY291bnRTdGF0dXNSZXNwb25zZSIDkAIBMosBCg9DaGVja291dFNlcnZpY2USeAoTQ3JlYXRlUGF5bWVudEludGVudBIvLmZsdXhsYXkuY2hlY2tvdXQudjEuQ3JlYXRlUGF5bWVudEludGVudFJlcXVlc3QaMC5mbHV4bGF5LmNoZWNrb3V0LnYxLkNyZWF0ZVBheW1lbnRJbnRlbnRSZXNwb25zZTLAFgoQV2FsbHBhcGVyU2VydmljZRJwCg5MaXN0V2FsbHBhcGVycxIrLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RXYWxscGFwZXJzUmVxdWVzdBosLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RXYWxscGFwZXJzUmVzcG9uc2UiA5ACARJqCgxHZXRXYWxscGFwZXISKS5mbHV4bGF5LndhbGxwYXBlci52MS5HZXRXYWxscGFwZXJSZXF1ZXN0GiouZmx1eGxheS53YWxscGFwZXIudjEuR2V0V2FsbHBhcGVyUmVzcG9uc2UiA5ACARJ2ChBTZWFyY2hXYWxscGFwZXJzEi0uZmx1eGxheS53YWxscGFwZXIudjEuU2VhcmNoV2FsbHBhcGVyc1JlcXVlc3QaLi5mbHV4bGF5LndhbGxwYXBlci52MS5TZWFyY2hXYWxscGFwZXJzUmVzcG9uc2UiA5ACARKIAQoWTGlzdEZlYXR1cmVkV2FsbHBhcGVycxIzLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RGZWF0dXJlZFdhbGxwYXBlcnNSZXF1ZXN0GjQuZmx1eGxheS53YWxscGFwZXIudjEuTGlzdEZlYXR1cmVkV2FsbHBhcGVyc1Jlc3BvbnNlIgOQAgEShQEKFUxpc3RSZWxhdGVkV2FsbHBhcGVycxIyLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RSZWxhdGVkV2FsbHBhcGVyc1JlcXVlc3QaMy5mbHV4bGF5LndhbGxwYXBlci52MS5MaXN0UmVsYXRlZFdhbGxwYXBlcnNSZXNwb25zZSIDkAIBEnEKEEFjcXVpcmVXYWxscGFwZXISLS5mbHV4bGF5LndhbGxwYXBlci52MS5BY3F1aXJlV2FsbHBhcGVyUmVxdWVzdBouLmZsdXhsYXkud2FsbHBhcGVyLnYxLkFjcXVpcmVXYWxscGFwZXJSZXNwb25zZRJ/ChNMaXN0T3duZWRXYWxscGFwZXJzEjAuZmx1eGxheS53YWxscGFwZXIudjEuTGlzdE93bmVkV2FsbHBhcGVyc1JlcXVlc3QaMS5mbHV4bGF5LndhbGxwYXBlci52MS5MaXN0T3duZWRXYWxscGFwZXJzUmVzcG9uc2UiA5ACARJ0ChFGYXZvcml0ZVdhbGxwYXBlchIuLmZsdXhsYXkud2FsbHBhcGVyLnYxLkZhdm9yaXRlV2FsbHBhcGVyUmVxdWVzdBovLmZsdXhsYXkud2FsbHBhcGVyLnYxLkZhdm9yaXRlV2FsbHBhcGVyUmVzcG9uc2USegoTVW5mYXZvcml0ZVdhbGxwYXBlchIwLmZsdXhsYXkud2FsbHBhcGVyLnYxLlVuZmF2b3JpdGVXYWxscGFwZXJSZXF1ZXN0GjEuZmx1eGxheS53YWxscGFwZXIudjEuVW5mYXZvcml0ZVdhbGxwYXBlclJlc3BvbnNlEnwKEkxpc3RVc2VyV2FsbHBhcGVycxIvLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RVc2VyV2FsbHBhcGVyc1JlcXVlc3QaMC5mbHV4bGF5LndhbGxwYXBlci52MS5MaXN0VXNlcldhbGxwYXBlcnNSZXNwb25zZSIDkAIBEoYBChdVcGRhdGVXYWxscGFwZXJNZXRhZGF0YRI0LmZsdXhsYXkud2FsbHBhcGVyLnYxLlVwZGF0ZVdhbGxwYXBlck1ldGFkYXRhUmVxdWVzdBo1LmZsdXhsYXkud2FsbHBhcGVyLnYxLlVwZGF0ZVdhbGxwYXBlck1ldGFkYXRhUmVzcG9uc2USgwEKFkNyZWF0ZVByZXZpZXdVcGxvYWRVUkwSMy5mbHV4bGF5LndhbGxwYXBlci52MS5DcmVhdGVQcmV2aWV3VXBsb2FkVVJMUmVxdWVzdBo0LmZsdXhsYXkud2FsbHBhcGVyLnYxLkNyZWF0ZVByZXZpZXdVcGxvYWRVUkxSZXNwb25zZRJuCg9BZGRQcmV2aWV3SW1hZ2USLC5mbHV4bGF5LndhbGxwYXBlci52MS5BZGRQcmV2aWV3SW1hZ2VSZXF1ZXN0Gi0uZmx1eGxheS53YWxscGFwZXIudjEuQWRkUHJldmlld0ltYWdlUmVzcG9uc2USdwoSRGVsZXRlUHJldmlld0ltYWdlEi8uZmx1eGxheS53YWxscGFwZXIudjEuRGVsZXRlUHJldmlld0ltYWdlUmVxdWVzdBowLmZsdXhsYXkud2FsbHBhcGVyLnYxLkRlbGV0ZVByZXZpZXdJbWFnZVJlc3BvbnNlEnEKEFB1Ymxpc2hXYWxscGFwZXISLS5mbHV4bGF5LndhbGxwYXBlci52MS5QdWJsaXNoV2FsbHBhcGVyUmVxdWVzdBouLmZsdXhsYXkud2FsbHBhcGVyLnYxLlB1Ymxpc2hXYWxscGFwZXJSZXNwb25zZRJ3ChJVbnB1Ymxpc2hXYWxscGFwZXISLy5mbHV4bGF5LndhbGxwYXBlci52MS5VbnB1Ymxpc2hXYWxscGFwZXJSZXF1ZXN0GjAuZmx1eGxheS53YWxscGFwZXIudjEuVW5wdWJsaXNoV2FsbHBhcGVyUmVzcG9uc2USbgoPRGVsZXRlV2FsbHBhcGVyEiwuZmx1eGxheS53YWxscGFwZXIudjEuRGVsZXRlV2FsbHBhcGVyUmVxdWVzdBotLmZsdXhsYXkud2FsbHBhcGVyLnYxLkRlbGV0ZVdhbGxwYXBlclJlc3BvbnNlEm4KD0dldERldmVsb3BlcktleRIsLmZsdXhsYXkud2FsbHBhcGVyLnYxLkdldERldmVsb3BlcktleVJlcXVlc3QaLS5mbHV4bGF5LndhbGxwYXBlci52MS5HZXREZXZlbG9wZXJLZXlSZXNwb25zZRJ0ChFSZWdpc3RlcldhbGxwYXBlchIuLmZsdXhsYXkud2FsbHBhcGVyLnYxLlJlZ2lzdGVyV2FsbHBhcGVyUmVxdWVzdBovLmZsdXhsYXkud2FsbHBhcGVyLnYxLlJlZ2lzdGVyV2FsbHBhcGVyUmVzcG9uc2USaAoNR2V0Q29udGVudEtleRIqLmZsdXhsYXkud2FsbHBhcGVyLnYxLkdldENvbnRlbnRLZXlSZXF1ZXN0GisuZmx1eGxheS53YWxscGFwZXIudjEuR2V0Q29udGVudEtleVJlc3BvbnNlEmgKDUNvbmZpcm1VcGxvYWQSKi5mbHV4bGF5LndhbGxwYXBlci52MS5Db25maXJtVXBsb2FkUmVxdWVzdBorLmZsdXhsYXkud2FsbHBhcGVyLnYxLkNvbmZpcm1VcGxvYWRSZXNwb25zZRJlCgxDYW5jZWxVcGxvYWQSKS5mbHV4bGF5LndhbGxwYXBlci52MS5DYW5jZWxVcGxvYWRSZXF1ZXN0GiouZmx1eGxheS53YWxscGFwZXIudjEuQ2FuY2VsVXBsb2FkUmVzcG9uc2USdAoRU2V0V2FsbHBhcGVyUHJpY2USLi5mbHV4bGF5LndhbGxwYXBlci52MS5TZXRXYWxscGFwZXJQcmljZVJlcXVlc3QaLy5mbHV4bGF5LndhbGxwYXBlci52MS5TZXRXYWxscGFwZXJQcmljZVJlc3BvbnNlEnQKEVJlZ2lzdGVyRGV2aWNlS2V5Ei4uZmx1eGxheS53YWxscGFwZXIudjEuUmVnaXN0ZXJEZXZpY2VLZXlSZXF1ZXN0Gi8uZmx1eGxheS53YWxscGFwZXIudjEuUmVnaXN0ZXJEZXZpY2VLZXlSZXNwb25zZUKkAQoOY29tLmZsdXhsYXkudjFCDFNlcnZpY2VQcm90b1ABWjtnaXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L3YxO2ZsdXhsYXl2MaICA0ZYWKoCCkZsdXhsYXkuVjHKAgpGbHV4bGF5XFYx4gIWRmx1eGxheVxWMVxHUEJNZXRhZGF0YeoCC0ZsdXhsYXk6OlYxYgZwcm90bzM`,[E,D,le,ue,d(`ChpmbHV4bGF5L3VzZXIvdjEvdXNlci5wcm90bxIPZmx1eGxheS51c2VyLnYxIrICCgdQcm9maWxlEg4KBmhhbmRsZRgBIAEoCRIMCgRuYW1lGAIgASgJEi8KBmF2YXRhchgDIAEoCzIfLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdBIvCgZoZWFkZXIYBCABKAsyHy5mbHV4bGF5LmNvbW1vbi52MS5CdWNrZXRPYmplY3QSCwoDYmlvGAUgASgJEhMKC3dlYnNpdGVfdXJsGAYgASgJEgwKBHhfaWQYByABKAkSFAoMaW5zdGFncmFtX2lkGAggASgJEhEKCWdpdGh1Yl9pZBgJIAEoCRIQCghsb2NhdGlvbhgKIAEoCRIMCgR0YWdzGAsgAygJEi4KCnVwZGF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIqIBCgRVc2VyEg8KB3VzZXJfaWQYASABKAkSKQoHcHJvZmlsZRgCIAEoCzIYLmZsdXhsYXkudXNlci52MS5Qcm9maWxlEi4KCmNyZWF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIhcKFUdldEN1cnJlbnRVc2VyUmVxdWVzdCI9ChZHZXRDdXJyZW50VXNlclJlc3BvbnNlEiMKBHVzZXIYASABKAsyFS5mbHV4bGF5LnVzZXIudjEuVXNlciJNCg5HZXRVc2VyUmVxdWVzdBIbCgd1c2VyX2lkGAEgASgJQgi6SAVyA7ABAUgAEhAKBmhhbmRsZRgCIAEoCUgAQgwKCmlkZW50aWZpZXIiNgoPR2V0VXNlclJlc3BvbnNlEiMKBHVzZXIYASABKAsyFS5mbHV4bGF5LnVzZXIudjEuVXNlciLfAwofVXBkYXRlQ3VycmVudFVzZXJQcm9maWxlUmVxdWVzdBIvCgZoYW5kbGUYASABKAlCGrpIF8gBAXISMhBeW2EtekEtWjAtOV8tXSskSACIAQESEQoEbmFtZRgCIAEoCUgBiAEBEjQKBmF2YXRhchgDIAEoCzIfLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdEgCiAEBEjQKBmhlYWRlchgEIAEoCzIfLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdEgDiAEBEhAKA2JpbxgFIAEoCUgEiAEBEhgKC3dlYnNpdGVfdXJsGAYgASgJSAWIAQESEQoEeF9pZBgHIAEoCUgGiAEBEhkKDGluc3RhZ3JhbV9pZBgIIAEoCUgHiAEBEhYKCWdpdGh1Yl9pZBgJIAEoCUgIiAEBEhUKCGxvY2F0aW9uGAogASgJSAmIAQESDAoEdGFncxgLIAMoCUIJCgdfaGFuZGxlQgcKBV9uYW1lQgkKB19hdmF0YXJCCQoHX2hlYWRlckIGCgRfYmlvQg4KDF93ZWJzaXRlX3VybEIHCgVfeF9pZEIPCg1faW5zdGFncmFtX2lkQgwKCl9naXRodWJfaWRCCwoJX2xvY2F0aW9uIk0KIFVwZGF0ZUN1cnJlbnRVc2VyUHJvZmlsZVJlc3BvbnNlEikKB3Byb2ZpbGUYASABKAsyGC5mbHV4bGF5LnVzZXIudjEuUHJvZmlsZSLaAQodQ3JlYXRlUHJvZmlsZVVwbG9hZFVSTFJlcXVlc3QSFAoMY29udGVudF90eXBlGAEgASgJEkwKCmFzc2V0X3R5cGUYAiABKA4yOC5mbHV4bGF5LnVzZXIudjEuQ3JlYXRlUHJvZmlsZVVwbG9hZFVSTFJlcXVlc3QuQXNzZXRUeXBlIlUKCUFzc2V0VHlwZRIaChZBU1NFVF9UWVBFX1VOU1BFQ0lGSUVEEAASFQoRQVNTRVRfVFlQRV9BVkFUQVIQARIVChFBU1NFVF9UWVBFX0hFQURFUhACImUKHkNyZWF0ZVByb2ZpbGVVcGxvYWRVUkxSZXNwb25zZRISCgp1cGxvYWRfdXJsGAEgASgJEi8KBm9iamVjdBgCIAEoCzIfLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdCLnAQoZVXBkYXRlUHJvZmlsZUltYWdlUmVxdWVzdBJCCgR0eXBlGAEgASgOMjQuZmx1eGxheS51c2VyLnYxLlVwZGF0ZVByb2ZpbGVJbWFnZVJlcXVlc3QuSW1hZ2VUeXBlEi8KBm9iamVjdBgCIAEoCzIfLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdCJVCglJbWFnZVR5cGUSGgoWSU1BR0VfVFlQRV9VTlNQRUNJRklFRBAAEhUKEUlNQUdFX1RZUEVfQVZBVEFSEAESFQoRSU1BR0VfVFlQRV9IRUFERVIQAiJHChpVcGRhdGVQcm9maWxlSW1hZ2VSZXNwb25zZRIpCgdwcm9maWxlGAEgASgLMhguZmx1eGxheS51c2VyLnYxLlByb2ZpbGUiHAoaR2V0T25ib2FyZGluZ1N0YXR1c1JlcXVlc3QiZgobR2V0T25ib2FyZGluZ1N0YXR1c1Jlc3BvbnNlEhQKDHRlcm1zX2FncmVlZBgBIAEoCBIZChFoYW5kbGVfY29uZmlndXJlZBgCIAEoCBIWCg5jdXJyZW50X2hhbmRsZRgDIAEoCSJkChlDb21wbGV0ZU9uYm9hcmRpbmdSZXF1ZXN0Eg4KBmhhbmRsZRgBIAEoCRIWCg50ZXJtc19hY2NlcHRlZBgCIAEoCBIfChdtYXJrZXRpbmdfZW1haWxfY29uc2VudBgDIAEoCCIcChpDb21wbGV0ZU9uYm9hcmRpbmdSZXNwb25zZSJeChBMaXN0VXNlcnNSZXF1ZXN0EhoKCXBhZ2Vfc2l6ZRgBIAEoBUIHukgEGgIgABISCgpwYWdlX3Rva2VuGAIgASgJEhEKBHBhZ2UYAyABKAVIAIgBAUIHCgVfcGFnZSJtChFMaXN0VXNlcnNSZXNwb25zZRIqCghwcm9maWxlcxgBIAMoCzIYLmZsdXhsYXkudXNlci52MS5Qcm9maWxlEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoBUK9AQoTY29tLmZsdXhsYXkudXNlci52MUIJVXNlclByb3RvUAFaPWdpdGh1Yi5jb20va2VuMTA5L2ZsdXhsYXktcHJvdG8vZ2VuL2dvL2ZsdXhsYXkvdXNlci92MTt1c2VydjGiAgNGVViqAg9GbHV4bGF5LlVzZXIuVjHKAg9GbHV4bGF5XFVzZXJcVjHiAhtGbHV4bGF5XFVzZXJcVjFcR1BCTWV0YWRhdGHqAhFGbHV4bGF5OjpVc2VyOjpWMWIGcHJvdG8z`,[O,k,g]),d(`CiRmbHV4bGF5L3dhbGxwYXBlci92MS93YWxscGFwZXIucHJvdG8SFGZsdXhsYXkud2FsbHBhcGVyLnYxIlcKBkF1dGhvchIOCgZoYW5kbGUYASABKAkSDAoEbmFtZRgCIAEoCRIvCgZhdmF0YXIYAyABKAsyHy5mbHV4bGF5LmNvbW1vbi52MS5CdWNrZXRPYmplY3Qi6QUKCVdhbGxwYXBlchIKCgJpZBgBIAEoCRIMCgRzbHVnGA0gASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCRIVCg10aHVtYm5haWxfdXJsGAYgASgJEhEKCWVudHJ5X3VybBgHIAEoCRIMCgR0YWdzGAggAygJEjgKCHByZXZpZXdzGAkgAygLMiYuZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyUHJldmlldxI1CgZzdGF0dXMYCiABKA4yJS5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXJTdGF0dXMSLgoKY3JlYXRlZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEAoIaXNfb3duZWQYDiABKAgSEgoKbGljZW5zZV9pZBgPIAEoCRIPCgd1c2VyX2lkGBAgASgJEhkKEWxhdGVzdF92ZXJzaW9uX2lkGBEgASgJEjQKDmF1dGhvcl9wcm9maWxlGBIgASgLMhwuZmx1eGxheS53YWxscGFwZXIudjEuQXV0aG9yEjMKBXByaWNlGBMgASgLMiQuZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyUHJpY2USNAoGcHJpY2VzGBQgAygLMiQuZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyUHJpY2USNQoMcHVibGlzaGVkX2F0GBUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEjQKB25ldHdvcmsYFiADKAsyIy5mbHV4bGF5LndhbGxwYXBlci52MS5OZXR3b3JrT3JpZ2luEhQKDGlzX2Zhdm9yaXRlZBgXIAEoCEIPCg1fcHVibGlzaGVkX2F0IjIKDldhbGxwYXBlclByaWNlEhAKCGN1cnJlbmN5GAEgASgJEg4KBmFtb3VudBgCIAEoAyIvCg1OZXR3b3JrT3JpZ2luEg4KBm9yaWdpbhgBIAEoCRIOCgZyZWFzb24YAiABKAki0AEKEFdhbGxwYXBlclByZXZpZXcSCgoCaWQYASABKAkSLwoGb2JqZWN0GAIgASgLMh8uZmx1eGxheS5jb21tb24udjEuQnVja2V0T2JqZWN0Eg0KBW9yZGVyGAMgASgFEhIKBXdpZHRoGAQgASgFSACIAQESEwoGaGVpZ2h0GAUgASgFSAGIAQESHQoQZHVyYXRpb25fc2Vjb25kcxgGIAEoBUgCiAEBQggKBl93aWR0aEIJCgdfaGVpZ2h0QhMKEV9kdXJhdGlvbl9zZWNvbmRzIjkKF0FjcXVpcmVXYWxscGFwZXJSZXF1ZXN0Eh4KDHdhbGxwYXBlcl9pZBgBIAEoCUIIukgFcgOwAQEiGgoYQWNxdWlyZVdhbGxwYXBlclJlc3BvbnNlIkwKGkxpc3RPd25lZFdhbGxwYXBlcnNSZXF1ZXN0EhoKCXBhZ2Vfc2l6ZRgBIAEoBUIHukgEGgIgABISCgpwYWdlX3Rva2VuGAIgASgJImsKG0xpc3RPd25lZFdhbGxwYXBlcnNSZXNwb25zZRIzCgp3YWxscGFwZXJzGAEgAygLMh8uZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSI6ChhGYXZvcml0ZVdhbGxwYXBlclJlcXVlc3QSHgoMd2FsbHBhcGVyX2lkGAEgASgJQgi6SAVyA7ABASIbChlGYXZvcml0ZVdhbGxwYXBlclJlc3BvbnNlIjwKGlVuZmF2b3JpdGVXYWxscGFwZXJSZXF1ZXN0Eh4KDHdhbGxwYXBlcl9pZBgBIAEoCUIIukgFcgOwAQEiHQobVW5mYXZvcml0ZVdhbGxwYXBlclJlc3BvbnNlIksKGUxpc3RVc2VyV2FsbHBhcGVyc1JlcXVlc3QSGgoJcGFnZV9zaXplGAEgASgFQge6SAQaAiAAEhIKCnBhZ2VfdG9rZW4YAiABKAkiagoaTGlzdFVzZXJXYWxscGFwZXJzUmVzcG9uc2USMwoKd2FsbHBhcGVycxgBIAMoCzIfLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlchIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkilgEKHlVwZGF0ZVdhbGxwYXBlck1ldGFkYXRhUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESHQoEbmFtZRgCIAEoCUIKukgHyAEBcgIQAUgAiAEBEhgKC2Rlc2NyaXB0aW9uGAMgASgJSAGIAQESDAoEdGFncxgEIAMoCUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb24iVQofVXBkYXRlV2FsbHBhcGVyTWV0YWRhdGFSZXNwb25zZRIyCgl3YWxscGFwZXIYASABKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXIijAEKHUNyZWF0ZVByZXZpZXdVcGxvYWRVUkxSZXF1ZXN0Eh4KDHdhbGxwYXBlcl9pZBgBIAEoCUIIukgFcgOwAQESSwoMY29udGVudF90eXBlGAIgASgJQjW6SDJyMDIuXihpbWFnZS8ocG5nfGpwZWd8d2VicHxnaWYpfHZpZGVvLyhtcDR8d2VibSkpJCJICh5DcmVhdGVQcmV2aWV3VXBsb2FkVVJMUmVzcG9uc2USEgoKcHJldmlld19pZBgBIAEoCRISCgp1cGxvYWRfdXJsGAIgASgJImwKFkFkZFByZXZpZXdJbWFnZVJlcXVlc3QSHgoMd2FsbHBhcGVyX2lkGAEgASgJQgi6SAVyA7ABARIcCgpwcmV2aWV3X2lkGAIgASgJQgi6SAVyA7ABARIUCgxjb250ZW50X3R5cGUYAyABKAkiUgoXQWRkUHJldmlld0ltYWdlUmVzcG9uc2USNwoHcHJldmlldxgBIAEoCzImLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlclByZXZpZXciMQoZRGVsZXRlUHJldmlld0ltYWdlUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQEiHAoaRGVsZXRlUHJldmlld0ltYWdlUmVzcG9uc2UiLwoXUHVibGlzaFdhbGxwYXBlclJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIk4KGFB1Ymxpc2hXYWxscGFwZXJSZXNwb25zZRIyCgl3YWxscGFwZXIYASABKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXIiMQoZVW5wdWJsaXNoV2FsbHBhcGVyUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQEiUAoaVW5wdWJsaXNoV2FsbHBhcGVyUmVzcG9uc2USMgoJd2FsbHBhcGVyGAEgASgLMh8uZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyIi4KFkRlbGV0ZVdhbGxwYXBlclJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIhkKF0RlbGV0ZVdhbGxwYXBlclJlc3BvbnNlIr0BChVMaXN0V2FsbHBhcGVyc1JlcXVlc3QSGgoJcGFnZV9zaXplGAEgASgFQge6SAQaAiAAEhIKCnBhZ2VfdG9rZW4YAiABKAkSFAoHdXNlcl9pZBgDIAEoCUgAiAEBEhEKBHBhZ2UYBCABKAVIAYgBARI2Cgdzb3J0X2J5GAUgASgOMiUuZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyU29ydEJ5QgoKCF91c2VyX2lkQgcKBV9wYWdlInsKFkxpc3RXYWxscGFwZXJzUmVzcG9uc2USMwoKd2FsbHBhcGVycxgBIAMoCzIfLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlchIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAUibgoXU2VhcmNoV2FsbHBhcGVyc1JlcXVlc3QSDQoFcXVlcnkYASABKAkSDAoEdGFncxgCIAMoCRIaCglwYWdlX3NpemUYAyABKAVCB7pIBBoCIAASEQoEcGFnZRgEIAEoBUgAiAEBQgcKBV9wYWdlIk8KGFNlYXJjaFdhbGxwYXBlcnNSZXNwb25zZRIzCgp3YWxscGFwZXJzGAEgAygLMh8uZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyIjkKHUxpc3RGZWF0dXJlZFdhbGxwYXBlcnNSZXF1ZXN0EhgKBWxpbWl0GAEgASgFQgm6SAYaBBgUIAAiVQoeTGlzdEZlYXR1cmVkV2FsbHBhcGVyc1Jlc3BvbnNlEjMKCndhbGxwYXBlcnMYASADKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXIiXAocTGlzdFJlbGF0ZWRXYWxscGFwZXJzUmVxdWVzdBIeCgx3YWxscGFwZXJfaWQYASABKAlCCLpIBXIDsAEBEhIKBWxpbWl0GAIgASgFSACIAQFCCAoGX2xpbWl0IlQKHUxpc3RSZWxhdGVkV2FsbHBhcGVyc1Jlc3BvbnNlEjMKCndhbGxwYXBlcnMYASADKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXIiKgoKSGFuZGxlU2x1ZxIOCgZoYW5kbGUYASABKAkSDAoEc2x1ZxgCIAEoCSKPAQoTR2V0V2FsbHBhcGVyUmVxdWVzdBIMCgJpZBgBIAEoCUgAEg4KBHNsdWcYAiABKAlIABI3CgtoYW5kbGVfc2x1ZxgDIAEoCzIgLmZsdXhsYXkud2FsbHBhcGVyLnYxLkhhbmRsZVNsdWdIABITCgthY3RpdmVfb25seRgEIAEoCEIMCgppZGVudGlmaWVyIkoKFEdldFdhbGxwYXBlclJlc3BvbnNlEjIKCXdhbGxwYXBlchgBIAEoCzIfLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlciJtChZHZXREZXZlbG9wZXJLZXlSZXF1ZXN0EhUKBHNhbHQYASABKAxCB7pIBHoCaCASGAoQcHJvdG9jb2xfdmVyc2lvbhgCIAEoDRIiChFkZXZpY2VfcHVibGljX2tleRgDIAEoDEIHukgEegJoICJfChdHZXREZXZlbG9wZXJLZXlSZXNwb25zZRIVCg1kZXZlbG9wZXJfa2V5GAEgASgMEhIKCmV4cGlyZXNfYXQYAiABKAMSGQoRc2VydmVyX3B1YmxpY19rZXkYAyABKAwitgEKGFJlZ2lzdGVyV2FsbHBhcGVyUmVxdWVzdBIVCgRzbHVnGAEgASgJQge6SARyAhABEhUKBG5hbWUYAiABKAlCB7pIBHICEAESGAoHdmVyc2lvbhgDIAEoCUIHukgEcgIQARIcCgtjb250ZW50X2tleRgEIAEoDEIHukgEegJoIBI0CgduZXR3b3JrGAUgAygLMiMuZmx1eGxheS53YWxscGFwZXIudjEuTmV0d29ya09yaWdpbiJZChlSZWdpc3RlcldhbGxwYXBlclJlc3BvbnNlEhQKDHdhbGxwYXBlcl9pZBgBIAEoCRISCgp2ZXJzaW9uX2lkGAIgASgJEhIKCnVwbG9hZF91cmwYAyABKAkiiQEKFEdldENvbnRlbnRLZXlSZXF1ZXN0EhwKCnZlcnNpb25faWQYASABKAlCCLpIBXIDsAEBEhUKBHNhbHQYAiABKAxCB7pIBHoCaCASGAoQcHJvdG9jb2xfdmVyc2lvbhgDIAEoDRIiChFkZXZpY2VfcHVibGljX2tleRgEIAEoDEIHukgEegJoICJbChVHZXRDb250ZW50S2V5UmVzcG9uc2USEwoLY29udGVudF9rZXkYASABKAwSEgoKZXhwaXJlc19hdBgCIAEoAxIZChFzZXJ2ZXJfcHVibGljX2tleRgDIAEoDCJaChhSZWdpc3RlckRldmljZUtleVJlcXVlc3QSGgoJZGV2aWNlX2lkGAEgASgJQge6SARyAhABEiIKEWRldmljZV9wdWJsaWNfa2V5GAIgASgMQge6SAR6AmggIhsKGVJlZ2lzdGVyRGV2aWNlS2V5UmVzcG9uc2UiMwoUQ29uZmlybVVwbG9hZFJlcXVlc3QSGwoKdmVyc2lvbl9pZBgBIAEoCUIHukgEcgIQASIXChVDb25maXJtVXBsb2FkUmVzcG9uc2UiMgoTQ2FuY2VsVXBsb2FkUmVxdWVzdBIbCgp2ZXJzaW9uX2lkGAEgASgJQge6SARyAhABIhYKFENhbmNlbFVwbG9hZFJlc3BvbnNlIi4KClByaWNlRW50cnkSEAoIY3VycmVuY3kYASABKAkSDgoGYW1vdW50GAIgASgDImwKGFNldFdhbGxwYXBlclByaWNlUmVxdWVzdBIeCgx3YWxscGFwZXJfaWQYASABKAlCCLpIBXIDsAEBEjAKBnByaWNlcxgCIAMoCzIgLmZsdXhsYXkud2FsbHBhcGVyLnYxLlByaWNlRW50cnkiTwoZU2V0V2FsbHBhcGVyUHJpY2VSZXNwb25zZRIyCgl3YWxscGFwZXIYASABKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXIqjAEKD1dhbGxwYXBlclN0YXR1cxIgChxXQUxMUEFQRVJfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHgoaV0FMTFBBUEVSX1NUQVRVU19VUExPQURJTkcQARIaChZXQUxMUEFQRVJfU1RBVFVTX0RSQUZUEAISGwoXV0FMTFBBUEVSX1NUQVRVU19BQ1RJVkUQAyp7Cg9XYWxscGFwZXJTb3J0QnkSIQodV0FMTFBBUEVSX1NPUlRfQllfVU5TUEVDSUZJRUQQABIgChxXQUxMUEFQRVJfU09SVF9CWV9DUkVBVEVEX0FUEAESIwofV0FMTFBBUEVSX1NPUlRfQllfTElDRU5TRV9DT1VOVBACQuUBChhjb20uZmx1eGxheS53YWxscGFwZXIudjFCDldhbGxwYXBlclByb3RvUAFaR2dpdGh1Yi5jb20va2VuMTA5L2ZsdXhsYXktcHJvdG8vZ2VuL2dvL2ZsdXhsYXkvd2FsbHBhcGVyL3YxO3dhbGxwYXBlcnYxogIDRldYqgIURmx1eGxheS5XYWxscGFwZXIuVjHKAhRGbHV4bGF5XFdhbGxwYXBlclxWMeICIEZsdXhsYXlcV2FsbHBhcGVyXFYxXEdQQk1ldGFkYXRh6gIWRmx1eGxheTo6V2FsbHBhcGVyOjpWMWIGcHJvdG8z`,[O,k,g])]),de=f(A,1),fe=f(A,5),j=_(`com.fluxlay.core`,{suffix:``});var M=class e{static filePath=o.join(j.data,`auth.json`);static async saveSession(t){await v.ensureDir(j.data),await v.writeJson(e.filePath,t,{spaces:2}),await v.chmod(e.filePath,384)}static async getSession(){if(!await v.pathExists(e.filePath))return null;try{return await v.readJson(e.filePath)}catch{return null}}static async clearSession(){await v.pathExists(e.filePath)&&await v.remove(e.filePath)}static async getValidSession(){let t=await e.getSession();if(!t)return null;let n=t.access_token.split(`.`)[1];return JSON.parse(Buffer.from(n,`base64`).toString(`utf8`)).exp*1e3<Date.now()?(await e.clearSession(),null):t}};const N=e=>process.env[e]||{FLUXLAY_API_URL:`https://api.fluxlay.com`,FLUXLAY_APP_URL:`https://fluxlay.com`,FLUXLAY_SUPABASE_URL:`https://bfyrfypcnrfqiqtnhksg.supabase.co`,FLUXLAY_SUPABASE_KEY:`sb_publishable_UE64XbixbCKCdNP20YLmqg_S1_Zchd6`}[e],P={API_URL:N(`FLUXLAY_API_URL`),APP_URL:N(`FLUXLAY_APP_URL`),SUPABASE_URL:N(`FLUXLAY_SUPABASE_URL`),SUPABASE_ANON_KEY:N(`FLUXLAY_SUPABASE_KEY`)},F=P.API_URL||`http://localhost:8080`,I=u({baseUrl:F,httpVersion:`1.1`}),L=u({baseUrl:F,httpVersion:`1.1`,interceptors:[e=>async t=>{let n=await M.getValidSession();return n?.access_token&&t.header.set(`Authorization`,`Bearer ${n.access_token}`),e(t)}]}),R=l(de,I),z=l(fe,L),B=new Set([`mp4`,`webm`]),V=new Set([`png`,`jpg`,`jpeg`,`webp`,`gif`]);function H(e){if(e!==`web`&&e!==`video`&&e!==`image`)throw Error(`fluxlay.yaml の kind は "web" / "video" / "image" のいずれかが必須です(実際: ${JSON.stringify(e)})`)}function pe(e,t){let n=o.extname(t).slice(1).toLowerCase();if(e===`video`&&!B.has(n))throw Error(`kind: video には mp4/webm を指定してください(実際: .${n})`);if(e===`image`&&!V.has(n))throw Error(`kind: image には png/jpg/jpeg/webp/gif を指定してください(実際: .${n})`)}function me(e,t,n){let r=o.extname(n).slice(1).toLowerCase(),i=a.mkdtempSync(o.join(y.tmpdir(),`fluxlay-bundle-`));a.copyFileSync(n,o.join(i,`media.${r}`));let s=[`name: ${t.name}`,`slug: ${t.slug}`,`version: ${t.version}`,`kind: ${e}`].join(`
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="16bb9cc5-45ac-5bb6-89ae-0f2d85b72fa0")}catch(e){}}();
4
+ import{createRequire as e}from"node:module";import"dotenv/config";import*as t from"@clack/prompts";import n from"chalk";import{Command as r}from"commander";import i from"node:crypto";import a from"node:fs";import o from"node:path";import s from"js-yaml";import{fileURLToPath as c}from"node:url";import{createClient as l}from"@connectrpc/connect";import{createConnectTransport as u}from"@connectrpc/connect-node";import{fileDesc as d,serviceDesc as f}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_descriptor as p,file_google_protobuf_duration as m,file_google_protobuf_field_mask as h,file_google_protobuf_timestamp as g}from"@bufbuild/protobuf/wkt";import _ from"env-paths";import v from"fs-extra";import y from"node:os";import{build as ee,createServer as te}from"vite";import b from"node:net";import x from"open";import{createClient as S}from"@supabase/supabase-js";import*as C from"@sentry/node";const w=e(import.meta.url),T=o.dirname(c(import.meta.url)),{getDeveloperKey:ne,setDeveloperKey:re,validateManifest:E,packContent:D,unpackContent:ie,getContentKey:ae,setContentKey:oe}=process.env.FLUXLAY_CLI_DEV===`1`?w("@fluxlay/core"):w(o.resolve(T,`./native/index.js`)),O=d(`ChxmbHV4bGF5L2FkbWluL3YxL2FkbWluLnByb3RvEhBmbHV4bGF5LmFkbWluLnYxIg8KDVdob2FtaVJlcXVlc3QiPgoOV2hvYW1pUmVzcG9uc2USDwoHdXNlcl9pZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIMCgRraW5kGAMgASgJQsUBChRjb20uZmx1eGxheS5hZG1pbi52MUIKQWRtaW5Qcm90b1ABWj9naXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L2FkbWluL3YxO2FkbWludjGiAgNGQViqAhBGbHV4bGF5LkFkbWluLlYxygIQRmx1eGxheVxBZG1pblxWMeICHEZsdXhsYXlcQWRtaW5cVjFcR1BCTWV0YWRhdGHqAhJGbHV4bGF5OjpBZG1pbjo6VjFiBnByb3RvMw`),k=d(`ChpmbHV4bGF5L2F1dGgvdjEvYXV0aC5wcm90bxIPZmx1eGxheS5hdXRoLnYxIikKF0NyZWF0ZURldmljZUNvZGVSZXF1ZXN0Eg4KBmNsaWVudBgBIAEoCSKCAQoYQ3JlYXRlRGV2aWNlQ29kZVJlc3BvbnNlEhMKC2RldmljZV9jb2RlGAEgASgJEhEKCXVzZXJfY29kZRgCIAEoCRIYChB2ZXJpZmljYXRpb25fdXJpGAMgASgJEhIKCmV4cGlyZXNfaW4YBCABKAUSEAoIaW50ZXJ2YWwYBSABKAUiLQoWUG9sbERldmljZVRva2VuUmVxdWVzdBITCgtkZXZpY2VfY29kZRgBIAEoCSJzCg1EZXZpY2VTZXNzaW9uEhQKDGFjY2Vzc190b2tlbhgBIAEoCRIVCg1yZWZyZXNoX3Rva2VuGAIgASgJEhIKCnRva2VuX3R5cGUYAyABKAkSEgoKZXhwaXJlc19hdBgEIAEoAxINCgVlbWFpbBgFIAEoCSJ+ChdQb2xsRGV2aWNlVG9rZW5SZXNwb25zZRIyCgZzdGF0dXMYASABKA4yIi5mbHV4bGF5LmF1dGgudjEuRGV2aWNlVG9rZW5TdGF0dXMSLwoHc2Vzc2lvbhgCIAEoCzIeLmZsdXhsYXkuYXV0aC52MS5EZXZpY2VTZXNzaW9uIikKFEFwcHJvdmVEZXZpY2VSZXF1ZXN0EhEKCXVzZXJfY29kZRgBIAEoCSInChVBcHByb3ZlRGV2aWNlUmVzcG9uc2USDgoGY2xpZW50GAEgASgJKsoBChFEZXZpY2VUb2tlblN0YXR1cxIjCh9ERVZJQ0VfVE9LRU5fU1RBVFVTX1VOU1BFQ0lGSUVEEAASLQopREVWSUNFX1RPS0VOX1NUQVRVU19BVVRIT1JJWkFUSU9OX1BFTkRJTkcQARIgChxERVZJQ0VfVE9LRU5fU1RBVFVTX0FQUFJPVkVEEAISHwobREVWSUNFX1RPS0VOX1NUQVRVU19FWFBJUkVEEAMSHgoaREVWSUNFX1RPS0VOX1NUQVRVU19ERU5JRUQQBEK9AQoTY29tLmZsdXhsYXkuYXV0aC52MUIJQXV0aFByb3RvUAFaPWdpdGh1Yi5jb20va2VuMTA5L2ZsdXhsYXktcHJvdG8vZ2VuL2dvL2ZsdXhsYXkvYXV0aC92MTthdXRodjGiAgNGQViqAg9GbHV4bGF5LkF1dGguVjHKAg9GbHV4bGF5XEF1dGhcVjHiAhtGbHV4bGF5XEF1dGhcVjFcR1BCTWV0YWRhdGHqAhFGbHV4bGF5OjpBdXRoOjpWMWIGcHJvdG8z`),se=d(`CiJmbHV4bGF5L2NoZWNrb3V0L3YxL2NoZWNrb3V0LnByb3RvEhNmbHV4bGF5LmNoZWNrb3V0LnYxIkQKGkNyZWF0ZVBheW1lbnRJbnRlbnRSZXF1ZXN0EhQKDHdhbGxwYXBlcl9pZBgBIAEoCRIQCghjdXJyZW5jeRgCIAEoCSI0ChtDcmVhdGVQYXltZW50SW50ZW50UmVzcG9uc2USFQoNY2xpZW50X3NlY3JldBgBIAEoCULdAQoXY29tLmZsdXhsYXkuY2hlY2tvdXQudjFCDUNoZWNrb3V0UHJvdG9QAVpFZ2l0aHViLmNvbS9rZW4xMDkvZmx1eGxheS1wcm90by9nZW4vZ28vZmx1eGxheS9jaGVja291dC92MTtjaGVja291dHYxogIDRkNYqgITRmx1eGxheS5DaGVja291dC5WMcoCE0ZsdXhsYXlcQ2hlY2tvdXRcVjHiAh9GbHV4bGF5XENoZWNrb3V0XFYxXEdQQk1ldGFkYXRh6gIVRmx1eGxheTo6Q2hlY2tvdXQ6OlYxYgZwcm90bzM`),A=d(`ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSLaFwoKRmxvYXRSdWxlcxKDAQoFY29uc3QYASABKAJCdMJIcQpvCgtmbG9hdC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEp8BCgJsdBgCIAEoAkKQAcJIjAEKiQEKCGZsb2F0Lmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEq8BCgNsdGUYAyABKAJCnwHCSJsBCpgBCglmbG9hdC5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLvBwoCZ3QYBCABKAJC4AfCSNwHCo0BCghmbG9hdC5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsMBCgtmbG9hdC5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs0BChVmbG9hdC5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrTAQoMZmxvYXQuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3QEKFmZsb2F0Lmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEroICgNndGUYBSABKAJCqgjCSKYICpsBCglmbG9hdC5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0gEKDGZsb2F0Lmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3AEKFmZsb2F0Lmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuIBCg1mbG9hdC5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrsAQoXZmxvYXQuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESfwoCaW4YBiADKAJCc8JIcApuCghmbG9hdC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdgoGbm90X2luGAcgAygCQmbCSGMKYQoMZmxvYXQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdQoGZmluaXRlGAggASgIQmXCSGIKYAoMZmxvYXQuZmluaXRlGlBydWxlcy5maW5pdGUgPyAodGhpcy5pc05hbigpIHx8IHRoaXMuaXNJbmYoKSA/ICd2YWx1ZSBtdXN0IGJlIGZpbml0ZScgOiAnJykgOiAnJxIrCgdleGFtcGxlGAkgAygCQhrCSBcKFQoNZmxvYXQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i7RcKC0RvdWJsZVJ1bGVzEoQBCgVjb25zdBgBIAEoAUJ1wkhyCnAKDGRvdWJsZS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqABCgJsdBgCIAEoAUKRAcJIjQEKigEKCWRvdWJsZS5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKwAQoDbHRlGAMgASgBQqABwkicAQqZAQoKZG91YmxlLmx0ZRqKASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvQHCgJndBgEIAEoAULlB8JI4QcKjgEKCWRvdWJsZS5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsQBCgxkb3VibGUuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrOAQoWZG91YmxlLmd0X2x0X2V4Y2x1c2l2ZRqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCtQBCg1kb3VibGUuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3gEKF2RvdWJsZS5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK/CAoDZ3RlGAUgASgBQq8IwkirCAqcAQoKZG91YmxlLmd0ZRqNASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrTAQoNZG91YmxlLmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3QEKF2RvdWJsZS5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrjAQoOZG91YmxlLmd0ZV9sdGUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCu0BChhkb3VibGUuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygBQnTCSHEKbwoJZG91YmxlLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKAFCZ8JIZApiCg1kb3VibGUubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdgoGZmluaXRlGAggASgIQmbCSGMKYQoNZG91YmxlLmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSLAoHZXhhbXBsZRgJIAMoAUIbwkgYChYKDmRvdWJsZS5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50MzJSdWxlcxKDAQoFY29uc3QYASABKAVCdMJIcQpvCgtpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoBUJ8wkh5CncKCGludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKAVCjAHCSIgBCoUBCglpbnQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoBUKIB8JIhAcKegoIaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgFQtMHwkjPBwqIAQoJaW50MzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygFQnPCSHAKbgoIaW50MzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoBUJmwkhjCmEKDGludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCCADKAVCGsJIFwoVCg1pbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50NjRSdWxlcxKDAQoFY29uc3QYASABKANCdMJIcQpvCgtpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoA0J8wkh5CncKCGludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKANCjAHCSIgBCoUBCglpbnQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoA0KIB8JIhAcKegoIaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgDQtMHwkjPBwqIAQoJaW50NjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygDQnPCSHAKbgoIaW50NjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoA0JmwkhjCmEKDGludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDMyUnVsZXMShAEKBWNvbnN0GAEgASgNQnXCSHIKcAoMdWludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgNQn3CSHoKeAoJdWludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKA1CjQHCSIkBCoYBCgp1aW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKA1CjQfCSIkHCnsKCXVpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgNQtgHwkjUBwqJAQoKdWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygNQnTCSHEKbwoJdWludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKA1CZ8JIZApiCg11aW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoDUIbwkgYChYKDnVpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDY0UnVsZXMShAEKBWNvbnN0GAEgASgEQnXCSHIKcAoMdWludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgEQn3CSHoKeAoJdWludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKARCjQHCSIkBCoYBCgp1aW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKARCjQfCSIkHCnsKCXVpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgEQtgHwkjUBwqJAQoKdWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygEQnTCSHEKbwoJdWludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKARCZ8JIZApiCg11aW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoBEIbwkgYChYKDnVpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDMyUnVsZXMShAEKBWNvbnN0GAEgASgRQnXCSHIKcAoMc2ludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgRQn3CSHoKeAoJc2ludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBFCjQHCSIkBCoYBCgpzaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBFCjQfCSIkHCnsKCXNpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgRQtgHwkjUBwqJAQoKc2ludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygRQnTCSHEKbwoJc2ludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBFCZ8JIZApiCg1zaW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDY0UnVsZXMShAEKBWNvbnN0GAEgASgSQnXCSHIKcAoMc2ludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgSQn3CSHoKeAoJc2ludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBJCjQHCSIkBCoYBCgpzaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBJCjQfCSIkHCnsKCXNpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgSQtgHwkjUBwqJAQoKc2ludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygSQnTCSHEKbwoJc2ludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBJCZ8JIZApiCg1zaW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEkIbwkgYChYKDnNpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQzMlJ1bGVzEoUBCgVjb25zdBgBIAEoB0J2wkhzCnEKDWZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAdCfsJIewp5CgpmaXhlZDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAdCjgHCSIoBCocBCgtmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgHQpIHwkiOBwp8CgpmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgHQt0HwkjZBwqKAQoLZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAdCdcJIcgpwCgpmaXhlZDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAdCaMJIZQpjCg5maXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAdCHMJIGQoXCg9maXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIq8VCgxGaXhlZDY0UnVsZXMShQEKBWNvbnN0GAEgASgGQnbCSHMKcQoNZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEowBCgJsdBgCIAEoBkJ+wkh7CnkKCmZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoBkKOAcJIigEKhwEKC2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAZCkgfCSI4HCnwKCmZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAZC3QfCSNkHCooBCgtmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoEBCgJpbhgGIAMoBkJ1wkhyCnAKCmZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEngKBm5vdF9pbhgHIAMoBkJowkhlCmMKDmZpeGVkNjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwBUKDVNGaXhlZDMyUnVsZXMShgEKBWNvbnN0GAEgASgPQnfCSHQKcgoOc2ZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKNAQoCbHQYAiABKA9Cf8JIfAp6CgtzZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKfAQoDbHRlGAMgASgPQo8BwkiLAQqIAQoMc2ZpeGVkMzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKmBwoCZ3QYBCABKA9ClwfCSJMHCn0KC3NmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOc2ZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPc2ZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES8gcKA2d0ZRgFIAEoD0LiB8JI3gcKiwEKDHNmaXhlZDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9zZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBzZml4ZWQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKCAQoCaW4YBiADKA9CdsJIcwpxCgtzZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeQoGbm90X2luGAcgAygPQmnCSGYKZAoPc2ZpeGVkMzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLgoHZXhhbXBsZRgIIAMoD0IdwkgaChgKEHNmaXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQ2NFJ1bGVzEoYBCgVjb25zdBgBIAEoEEJ3wkh0CnIKDnNmaXhlZDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgQQn/CSHwKegoLc2ZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoEEKPAcJIiwEKiAEKDHNmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgQQpcHwkiTBwp9CgtzZml4ZWQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKBBC4gfCSN4HCosBCgxzZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkNjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkNjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygQQnbCSHMKcQoLc2ZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoEEJpwkhmCmQKD3NmaXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKBBCHcJIGgoYChBzZml4ZWQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLHAQoJQm9vbFJ1bGVzEoIBCgVjb25zdBgBIAEoCEJzwkhwCm4KCmJvb2wuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIiiDkKC1N0cmluZ1J1bGVzEoYBCgVjb25zdBgBIAEoCUJ3wkh0CnIKDHN0cmluZy5jb25zdBpidGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSfgoDbGVuGBMgASgEQnHCSG4KbAoKc3RyaW5nLmxlbhpedWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKZAQoHbWluX2xlbhgCIAEoBEKHAcJIgwEKgAEKDnN0cmluZy5taW5fbGVuGm51aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKXAQoHbWF4X2xlbhgDIAEoBEKFAcJIgQEKfwoOc3RyaW5nLm1heF9sZW4abXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSmwEKCWxlbl9ieXRlcxgUIAEoBEKHAcJIgwEKgAEKEHN0cmluZy5sZW5fYnl0ZXMabHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSAhPSBydWxlcy5sZW5fYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKjAQoJbWluX2J5dGVzGAQgASgEQo8BwkiLAQqIAQoQc3RyaW5nLm1pbl9ieXRlcxp0dWludChieXRlcyh0aGlzKS5zaXplKCkpIDwgcnVsZXMubWluX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSogEKCW1heF9ieXRlcxgFIAEoBEKOAcJIigEKhwEKEHN0cmluZy5tYXhfYnl0ZXMac3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9ieXRlc10pIDogJycSjQEKB3BhdHRlcm4YBiABKAlCfMJIeQp3Cg5zdHJpbmcucGF0dGVybhplIXRoaXMubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBkb2VzIG5vdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycShAEKBnByZWZpeBgHIAEoCUJ0wkhxCm8KDXN0cmluZy5wcmVmaXgaXiF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCBgJXNgJy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSggEKBnN1ZmZpeBgIIAEoCUJywkhvCm0KDXN0cmluZy5zdWZmaXgaXCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEpABCghjb250YWlucxgJIAEoCUJ+wkh7CnkKD3N0cmluZy5jb250YWlucxpmIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpgBCgxub3RfY29udGFpbnMYFyABKAlCgQHCSH4KfAoTc3RyaW5nLm5vdF9jb250YWlucxpldGhpcy5jb250YWlucyhydWxlcy5ub3RfY29udGFpbnMpID8gJ3ZhbHVlIGNvbnRhaW5zIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLm5vdF9jb250YWluc10pIDogJycSgAEKAmluGAogAygJQnTCSHEKbwoJc3RyaW5nLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YCyADKAlCZ8JIZApiCg1zdHJpbmcubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycS3wEKBWVtYWlsGAwgASgIQs0BwkjJAQphCgxzdHJpbmcuZW1haWwSI3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGiwhcnVsZXMuZW1haWwgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzRW1haWwoKQpkChJzdHJpbmcuZW1haWxfZW1wdHkSMnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGhohcnVsZXMuZW1haWwgfHwgdGhpcyAhPSAnJ0gAEucBCghob3N0bmFtZRgNIAEoCELSAcJIzgEKZQoPc3RyaW5nLmhvc3RuYW1lEh52YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdG5hbWUaMiFydWxlcy5ob3N0bmFtZSB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpCmUKFXN0cmluZy5ob3N0bmFtZV9lbXB0eRItdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lGh0hcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyAhPSAnJ0gAEscBCgJpcBgOIAEoCEK4AcJItAEKVQoJc3RyaW5nLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxomIXJ1bGVzLmlwIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKCkKWwoPc3RyaW5nLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxoXIXJ1bGVzLmlwIHx8IHRoaXMgIT0gJydIABLWAQoEaXB2NBgPIAEoCELFAcJIwQEKXAoLc3RyaW5nLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaKSFydWxlcy5pcHY0IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKDQpCmEKEXN0cmluZy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGhkhcnVsZXMuaXB2NCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjYYECABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY2EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzGikhcnVsZXMuaXB2NiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg2KQphChFzdHJpbmcuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxoZIXJ1bGVzLmlwdjYgfHwgdGhpcyAhPSAnJ0gAEr8BCgN1cmkYESABKAhCrwHCSKsBClEKCnN0cmluZy51cmkSGXZhbHVlIG11c3QgYmUgYSB2YWxpZCBVUkkaKCFydWxlcy51cmkgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzVXJpKCkKVgoQc3RyaW5nLnVyaV9lbXB0eRIodmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVSSRoYIXJ1bGVzLnVyaSB8fCB0aGlzICE9ICcnSAAScAoHdXJpX3JlZhgSIAEoCEJdwkhaClgKDnN0cmluZy51cmlfcmVmEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJIFJlZmVyZW5jZRohIXJ1bGVzLnVyaV9yZWYgfHwgdGhpcy5pc1VyaVJlZigpSAASkAIKB2FkZHJlc3MYFSABKAhC/AHCSPgBCoEBCg5zdHJpbmcuYWRkcmVzcxItdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKYAgoEdXVpZBgWIAEoCEKHAsJIgwIKpQEKC3N0cmluZy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS8AEKBXR1dWlkGCEgASgIQt4BwkjaAQpzCgxzdHJpbmcudHV1aWQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASlgIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvgBwkj0AQp4ChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEs8CChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQq8CwkirAgqTAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SNXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS8gEKCWlwX3ByZWZpeBgdIAEoCELcAcJI2AEKbAoQc3RyaW5nLmlwX3ByZWZpeBIfdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABKDAgoLaXB2NF9wcmVmaXgYHiABKAhC6wHCSOcBCnUKEnN0cmluZy5pcHY0X3ByZWZpeBIhdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjZfcHJlZml4GB8gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2Nl9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAErUCCg1ob3N0X2FuZF9wb3J0GCAgASgIQpsCwkiXAgqZAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSQXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEvUBCgR1bGlkGCMgASgIQuQBwkjgAQqCAQoLc3RyaW5nLnVsaWQSGnZhbHVlIG11c3QgYmUgYSB2YWxpZCBVTElEGlchcnVsZXMudWxpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kJykKWQoRc3RyaW5nLnVsaWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVTElEGhkhcnVsZXMudWxpZCB8fCB0aGlzICE9ICcnSAASqAUKEHdlbGxfa25vd25fcmVnZXgYGCABKA4yGC5idWYudmFsaWRhdGUuS25vd25SZWdleELxBMJI7QQK8AEKI3N0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lEiZ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRqgAXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMSB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXjo/WzAtOWEtekEtWiEjJCUmXCcqKy0uXl98flx4NjBdKyQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSskJykKjQEKKXN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lX2VtcHR5EjV2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRopcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgIT0gJycK5wEKJHN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl92YWx1ZRIndmFsdWUgbXVzdCBiZSBhIHZhbGlkIEhUVFAgaGVhZGVyIHZhbHVlGpUBcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAyIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXlteXHUwMDAwLVx1MDAwOFx1MDAwQS1cdTAwMUZcdTAwN0ZdKiQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSokJylIABIOCgZzdHJpY3QYGSABKAgSLAoHZXhhbXBsZRgiIAMoCUIbwkgYChYKDnN0cmluZy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLCEgoKQnl0ZXNSdWxlcxKAAQoFY29uc3QYASABKAxCccJIbgpsCgtieXRlcy5jb25zdBpddGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBiZSAleCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEngKA2xlbhgNIAEoBEJrwkhoCmYKCWJ5dGVzLmxlbhpZdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSkAEKB21pbl9sZW4YAiABKARCf8JIfAp6Cg1ieXRlcy5taW5fbGVuGml1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg1ieXRlcy5tYXhfbGVuGmF1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpABCgdwYXR0ZXJuGAQgASgJQn/CSHwKegoNYnl0ZXMucGF0dGVybhppIXN0cmluZyh0aGlzKS5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ3ZhbHVlIG11c3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoEBCgZwcmVmaXgYBSABKAxCccJIbgpsCgxieXRlcy5wcmVmaXgaXCF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCAleCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEn8KBnN1ZmZpeBgGIAEoDEJvwkhsCmoKDGJ5dGVzLnN1ZmZpeBpaIXRoaXMuZW5kc1dpdGgocnVsZXMuc3VmZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHN1ZmZpeCAleCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEoMBCghjb250YWlucxgHIAEoDEJxwkhuCmwKDmJ5dGVzLmNvbnRhaW5zGlohdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAndmFsdWUgZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSpwEKAmluGAggAygMQpoBwkiWAQqTAQoIYnl0ZXMuaW4ahgFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YCSADKAxCZsJIYwphCgxieXRlcy5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLrAQoCaXAYCiABKAhC3AHCSNgBCnQKCGJ5dGVzLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5AEKBGlwdjQYCyABKAhC0wHCSM8BCmUKCmJ5dGVzLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5QEKBGlwdjYYDCABKAhC1AHCSNABCmYKCmJ5dGVzLmlwdjYSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEtUBCgR1dWlkGA8gASgIQsQBwkjAAQpeCgpieXRlcy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLUAwoJRW51bVJ1bGVzEoIBCgVjb25zdBgBIAEoBUJzwkhwCm4KCmVudW0uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIUCgxkZWZpbmVkX29ubHkYAiABKAgSfgoCaW4YAyADKAVCcsJIbwptCgdlbnVtLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ1CgZub3RfaW4YBCADKAVCZcJIYgpgCgtlbnVtLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEioKB2V4YW1wbGUYBSADKAVCGcJIFgoUCgxlbnVtLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAiL7AwoNUmVwZWF0ZWRSdWxlcxKeAQoJbWluX2l0ZW1zGAEgASgEQooBwkiGAQqDAQoScmVwZWF0ZWQubWluX2l0ZW1zGm11aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICd2YWx1ZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEqIBCgltYXhfaXRlbXMYAiABKARCjgHCSIoBCocBChJyZXBlYXRlZC5tYXhfaXRlbXMacXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIpkXCg1EdXJhdGlvblJ1bGVzEqEBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJ3wkh0CnIKDmR1cmF0aW9uLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSqAEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQn/CSHwKegoLZHVyYXRpb24ubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASugEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKPAcJIiwEKiAEKDGR1cmF0aW9uLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASwQcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQpcHwkiTBwp9CgtkdXJhdGlvbi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDmR1cmF0aW9uLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD2R1cmF0aW9uLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEo0ICgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25C4gfCSN4HCosBCgxkdXJhdGlvbi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPZHVyYXRpb24uZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQZHVyYXRpb24uZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESnQEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnbCSHMKcQoLZHVyYXRpb24uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEpQBCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CacJIZgpkCg9kdXJhdGlvbi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i/QUKDkZpZWxkTWFza1J1bGVzEr8BCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCkwHCSI8BCowBChBmaWVsZF9tYXNrLmNvbnN0Gnh0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICd2YWx1ZSBtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS2QEKAmluGAIgAygJQswBwkjIAQrFAQoNZmllbGRfbWFzay5pbhqzASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICd2YWx1ZSBtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEvMBCgZub3RfaW4YAyADKAlC4gHCSN4BCtsBChFmaWVsZF9tYXNrLm5vdF9pbhrFASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ3ZhbHVlIG11c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIikhgKDlRpbWVzdGFtcFJ1bGVzEqMBCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCeMJIdQpzCg90aW1lc3RhbXAuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKrAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQoABwkh9CnsKDHRpbWVzdGFtcC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK8AQoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKQAcJIjAEKiQEKDXRpbWVzdGFtcC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEmwKBmx0X25vdxgHIAEoCEJawkhXClUKEHRpbWVzdGFtcC5sdF9ub3caQShydWxlcy5sdF9ub3cgJiYgdGhpcyA+IG5vdykgPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbm93JyA6ICcnSAASxwcKAmd0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKcB8JImAcKfgoMdGltZXN0YW1wLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq3AQoPdGltZXN0YW1wLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq/AQoZdGltZXN0YW1wLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCscBChB0aW1lc3RhbXAuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrPAQoadGltZXN0YW1wLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEpMICgNndGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQucHwkjjBwqMAQoNdGltZXN0YW1wLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsYBChB0aW1lc3RhbXAuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs4BChp0aW1lc3RhbXAuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1gEKEXRpbWVzdGFtcC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt4BCht0aW1lc3RhbXAuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESbwoGZ3Rfbm93GAggASgIQl3CSFoKWAoQdGltZXN0YW1wLmd0X25vdxpEKHJ1bGVzLmd0X25vdyAmJiB0aGlzIDwgbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBub3cnIDogJydIARK4AQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQowBwkiIAQqFAQoQdGltZXN0YW1wLndpdGhpbhpxdGhpcyA8IG5vdy1ydWxlcy53aXRoaW4gfHwgdGhpcyA+IG5vdytydWxlcy53aXRoaW4gPyAndmFsdWUgbXVzdCBiZSB3aXRoaW4gJXMgb2Ygbm93Jy5mb3JtYXQoW3J1bGVzLndpdGhpbl0pIDogJycSSwoHZXhhbXBsZRgKIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCHsJIGwoZChF0aW1lc3RhbXAuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iOQoKVmlvbGF0aW9ucxIrCgp2aW9sYXRpb25zGAEgAygLMhcuYnVmLnZhbGlkYXRlLlZpb2xhdGlvbiKfAQoJVmlvbGF0aW9uEiYKBWZpZWxkGAUgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIlCgRydWxlGAYgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIPCgdydWxlX2lkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDwoHZm9yX2tleRgEIAEoCEoECAEQAlIKZmllbGRfcGF0aCI9CglGaWVsZFBhdGgSMAoIZWxlbWVudHMYASADKAsyHi5idWYudmFsaWRhdGUuRmllbGRQYXRoRWxlbWVudCLpAgoQRmllbGRQYXRoRWxlbWVudBIUCgxmaWVsZF9udW1iZXIYASABKAUSEgoKZmllbGRfbmFtZRgCIAEoCRI+CgpmaWVsZF90eXBlGAMgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPAoIa2V5X3R5cGUYBCABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI+Cgp2YWx1ZV90eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSDwoFaW5kZXgYBiABKARIABISCghib29sX2tleRgHIAEoCEgAEhEKB2ludF9rZXkYCCABKANIABISCgh1aW50X2tleRgJIAEoBEgAEhQKCnN0cmluZ19rZXkYCiABKAlIAEILCglzdWJzY3JpcHQqoQEKBklnbm9yZRIWChJJR05PUkVfVU5TUEVDSUZJRUQQABIYChRJR05PUkVfSUZfWkVST19WQUxVRRABEhEKDUlHTk9SRV9BTFdBWVMQAyIECAIQAioMSUdOT1JFX0VNUFRZKg5JR05PUkVfREVGQVVMVCoXSUdOT1JFX0lGX0RFRkFVTFRfVkFMVUUqFUlHTk9SRV9JRl9VTlBPUFVMQVRFRCpuCgpLbm93blJlZ2V4EhsKF0tOT1dOX1JFR0VYX1VOU1BFQ0lGSUVEEAASIAocS05PV05fUkVHRVhfSFRUUF9IRUFERVJfTkFNRRABEiEKHUtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX1ZBTFVFEAI6VgoHbWVzc2FnZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiHCSABKAsyGi5idWYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlOk4KBW9uZW9mEh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuT25lb2ZSdWxlc1IFb25lb2Y6TgoFZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVmaWVsZDpdCgpwcmVkZWZpbmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiICSABKAsyHS5idWYudmFsaWRhdGUuUHJlZGVmaW5lZFJ1bGVzUgpwcmVkZWZpbmVkQrsBChBjb20uYnVmLnZhbGlkYXRlQg1WYWxpZGF0ZVByb3RvUAFaR2J1Zi5idWlsZC9nZW4vZ28vYnVmYnVpbGQvcHJvdG92YWxpZGF0ZS9wcm90b2NvbGJ1ZmZlcnMvZ28vYnVmL3ZhbGlkYXRlogIDQlZYqgIMQnVmLlZhbGlkYXRlygIMQnVmXFZhbGlkYXRl4gIYQnVmXFZhbGlkYXRlXEdQQk1ldGFkYXRh6gINQnVmOjpWYWxpZGF0ZQ`,[p,m,h,g]),ce=d(`CiBmbHV4bGF5L2NvbnRhY3QvdjEvY29udGFjdC5wcm90bxISZmx1eGxheS5jb250YWN0LnYxIrUBChJTZW5kQ29udGFjdFJlcXVlc3QSPwoIY2F0ZWdvcnkYASABKA4yIy5mbHV4bGF5LmNvbnRhY3QudjEuQ29udGFjdENhdGVnb3J5Qgi6SAWCAQIgABIVCgRuYW1lGAIgASgJQge6SARyAhABEhYKBWVtYWlsGAMgASgJQge6SARyAmABEhgKB3N1YmplY3QYBCABKAlCB7pIBHICEAESFQoEYm9keRgFIAEoCUIHukgEcgIQASIVChNTZW5kQ29udGFjdFJlc3BvbnNlKsMCCg9Db250YWN0Q2F0ZWdvcnkSIAocQ09OVEFDVF9DQVRFR09SWV9VTlNQRUNJRklFRBAAEh8KG0NPTlRBQ1RfQ0FURUdPUllfQlVHX1JFUE9SVBABEiQKIENPTlRBQ1RfQ0FURUdPUllfRkVBVFVSRV9SRVFVRVNUEAISIgoeQ09OVEFDVF9DQVRFR09SWV9BQ0NPVU5UX0lTU1VFEAMSHgoaQ09OVEFDVF9DQVRFR09SWV9DT1BZUklHSFQQBBIaChZDT05UQUNUX0NBVEVHT1JZX09USEVSEAUSHAoYQ09OVEFDVF9DQVRFR09SWV9SRVZFTlVFEAYSIwofQ09OVEFDVF9DQVRFR09SWV9DT05URU5UX1JFVklFVxAHEiQKIENPTlRBQ1RfQ0FURUdPUllfQ1JFQVRPUl9QUk9HUkFNEAhC1QEKFmNvbS5mbHV4bGF5LmNvbnRhY3QudjFCDENvbnRhY3RQcm90b1ABWkNnaXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L2NvbnRhY3QvdjE7Y29udGFjdHYxogIDRkNYqgISRmx1eGxheS5Db250YWN0LlYxygISRmx1eGxheVxDb250YWN0XFYx4gIeRmx1eGxheVxDb250YWN0XFYxXEdQQk1ldGFkYXRh6gIURmx1eGxheTo6Q29udGFjdDo6VjFiBnByb3RvMw`,[A]),le=d(`CiZmbHV4bGF5L21vZGVyYXRpb24vdjEvbW9kZXJhdGlvbi5wcm90bxIVZmx1eGxheS5tb2RlcmF0aW9uLnYxIqEBChBBaVJlY29tbWVuZGF0aW9uEjMKBmFjdGlvbhgBIAEoDjIjLmZsdXhsYXkubW9kZXJhdGlvbi52MS5SZXZpZXdBY3Rpb24SEwoLcmVhc29uX2NvZGUYAiABKAkSMwoGdGFyZ2V0GAMgASgOMiMuZmx1eGxheS5tb2RlcmF0aW9uLnYxLlJldmlld1RhcmdldBIOCgZyZWFzb24YBCABKAkijwIKDURlY2lzaW9uRW50cnkSJgoCYXQYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhUKDWFjdG9yX3VzZXJfaWQYAiABKAkSDQoFZXZlbnQYAyABKAkSEgoFbW9kZWwYBCABKAlIAIgBARIbCg5wcm9tcHRfdmVyc2lvbhgFIAEoCUgBiAEBEhIKBXNjb3JlGAYgASgFSAKIAQESFgoJdGhyZXNob2xkGAcgASgFSAOIAQESEwoGZGV0YWlsGAggASgJSASIAQFCCAoGX21vZGVsQhEKD19wcm9tcHRfdmVyc2lvbkIICgZfc2NvcmVCDAoKX3RocmVzaG9sZEIJCgdfZGV0YWlsIoICCg1QcmV2aWV3U2lnbmFsEhIKCnByZXZpZXdfaWQYASABKAkSOgoFYWR1bHQYAiABKA4yKy5mbHV4bGF5Lm1vZGVyYXRpb24udjEuU2FmZVNlYXJjaExpa2VsaWhvb2QSOQoEcmFjeRgDIAEoDjIrLmZsdXhsYXkubW9kZXJhdGlvbi52MS5TYWZlU2VhcmNoTGlrZWxpaG9vZBITCgt3ZWJfbWF0Y2hlcxgEIAEoBRISCgptYXRjaF91cmxzGAUgAygJEhQKDHdlYl9lbnRpdGllcxgGIAMoCRIRCglpbWFnZV91cmwYByABKAkSFAoMY29udGVudF90eXBlGAggASgJIjQKEEV4dGVybmFsRW5kcG9pbnQSDgoGZG9tYWluGAEgASgJEhAKCGRlY2xhcmVkGAIgASgIImQKC0NvZGVTaWduYWxzEkMKEmV4dGVybmFsX2VuZHBvaW50cxgBIAMoCzInLmZsdXhsYXkubW9kZXJhdGlvbi52MS5FeHRlcm5hbEVuZHBvaW50EhAKCGZpbmRpbmdzGAIgAygJIkEKDlJldmlld01ldGFkYXRhEgwKBG5hbWUYASABKAkSEwoLZGVzY3JpcHRpb24YAiABKAkSDAoEdGFncxgDIAMoCSLPAQoGQXBwZWFsEgoKAmlkGAEgASgJEjMKBnN0YXR1cxgCIAEoDjIjLmZsdXhsYXkubW9kZXJhdGlvbi52MS5BcHBlYWxTdGF0dXMSDAoEYm9keRgDIAEoCRIwCgxzdWJtaXR0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjQKC3Jlc29sdmVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBQg4KDF9yZXNvbHZlZF9hdCJuCg5QcmlvclJlamVjdGlvbhIPCgd2ZXJzaW9uGAEgASgJEhMKC3JlYXNvbl9jb2RlGAIgASgJEg4KBnJlYXNvbhgDIAEoCRImCgJhdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAijgcKC1Jldmlld0V2ZW50EgoKAmlkGAEgASgJEhQKDHdhbGxwYXBlcl9pZBgCIAEoCRIWCg53YWxscGFwZXJfbmFtZRgDIAEoCRIWCg5jcmVhdG9yX2hhbmRsZRgEIAEoCRISCgp2ZXJzaW9uX2lkGAUgASgJEg8KB3ZlcnNpb24YBiABKAkSOgoKZXZlbnRfdHlwZRgHIAEoDjImLmZsdXhsYXkubW9kZXJhdGlvbi52MS5SZXZpZXdFdmVudFR5cGUSMwoGc3RhdHVzGAggASgOMiMuZmx1eGxheS5tb2RlcmF0aW9uLnYxLlJldmlld1N0YXR1cxIVCghhaV9zY29yZRgJIAEoBUgAiAEBEjMKAmFpGAogASgLMicuZmx1eGxheS5tb2RlcmF0aW9uLnYxLkFpUmVjb21tZW5kYXRpb24SMAoIYWlfc3RhdGUYCyABKA4yHi5mbHV4bGF5Lm1vZGVyYXRpb24udjEuQWlTdGF0ZRI3CghtZXRhZGF0YRgMIAEoCzIlLmZsdXhsYXkubW9kZXJhdGlvbi52MS5SZXZpZXdNZXRhZGF0YRISCgphc3NldF9pbmZvGA0gASgJEj0KD3ByZXZpZXdfc2lnbmFscxgOIAMoCzIkLmZsdXhsYXkubW9kZXJhdGlvbi52MS5QcmV2aWV3U2lnbmFsEjgKDGNvZGVfc2lnbmFscxgPIAEoCzIiLmZsdXhsYXkubW9kZXJhdGlvbi52MS5Db2RlU2lnbmFscxI6CgxkZWNpc2lvbl9sb2cYECADKAsyJC5mbHV4bGF5Lm1vZGVyYXRpb24udjEuRGVjaXNpb25FbnRyeRIyCgZhcHBlYWwYESABKAsyHS5mbHV4bGF5Lm1vZGVyYXRpb24udjEuQXBwZWFsSAGIAQESQwoPcHJpb3JfcmVqZWN0aW9uGBIgASgLMiUuZmx1eGxheS5tb2RlcmF0aW9uLnYxLlByaW9yUmVqZWN0aW9uSAKIAQESLgoKY3JlYXRlZF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMwoKZGVjaWRlZF9hdBgUIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIA4gBAUILCglfYWlfc2NvcmVCCQoHX2FwcGVhbEISChBfcHJpb3JfcmVqZWN0aW9uQg0KC19kZWNpZGVkX2F0In0KFkxpc3RSZXZpZXdRdWV1ZVJlcXVlc3QSMwoGc3RhdHVzGAEgASgOMiMuZmx1eGxheS5tb2RlcmF0aW9uLnYxLlJldmlld1N0YXR1cxIaCglwYWdlX3NpemUYAiABKAVCB7pIBBoCIAASEgoKcGFnZV90b2tlbhgDIAEoCSKYAQoXTGlzdFJldmlld1F1ZXVlUmVzcG9uc2USMgoGZXZlbnRzGAEgAygLMiIuZmx1eGxheS5tb2RlcmF0aW9uLnYxLlJldmlld0V2ZW50EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRIVCg1wZW5kaW5nX2NvdW50GAMgASgFEhkKEW9wZW5fYXBwZWFsX2NvdW50GAQgASgFIigKEEdldFJldmlld1JlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIkYKEUdldFJldmlld1Jlc3BvbnNlEjEKBWV2ZW50GAEgASgLMiIuZmx1eGxheS5tb2RlcmF0aW9uLnYxLlJldmlld0V2ZW50IsYBChNEZWNpZGVSZXZpZXdSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABARI/CgZhY3Rpb24YAiABKA4yIy5mbHV4bGF5Lm1vZGVyYXRpb24udjEuUmV2aWV3QWN0aW9uQgq6SAeCAQQYARgCEhMKC3JlYXNvbl9jb2RlGAMgASgJEjMKBnRhcmdldBgEIAEoDjIjLmZsdXhsYXkubW9kZXJhdGlvbi52MS5SZXZpZXdUYXJnZXQSDgoGcmVhc29uGAUgASgJIkkKFERlY2lkZVJldmlld1Jlc3BvbnNlEjEKBWV2ZW50GAEgASgLMiIuZmx1eGxheS5tb2RlcmF0aW9uLnYxLlJldmlld0V2ZW50IkQKEkxpc3RBcHBlYWxzUmVxdWVzdBIaCglwYWdlX3NpemUYASABKAVCB7pIBBoCIAASEgoKcGFnZV90b2tlbhgCIAEoCSJiChNMaXN0QXBwZWFsc1Jlc3BvbnNlEjIKBmV2ZW50cxgBIAMoCzIiLmZsdXhsYXkubW9kZXJhdGlvbi52MS5SZXZpZXdFdmVudBIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkiSQoUUmVzb2x2ZUFwcGVhbFJlcXVlc3QSIQoPcmV2aWV3X2V2ZW50X2lkGAEgASgJQgi6SAVyA7ABARIOCgZhY2NlcHQYAiABKAgiSgoVUmVzb2x2ZUFwcGVhbFJlc3BvbnNlEjEKBWV2ZW50GAEgASgLMiIuZmx1eGxheS5tb2RlcmF0aW9uLnYxLlJldmlld0V2ZW50IlIKE1N1Ym1pdEFwcGVhbFJlcXVlc3QSIQoPcmV2aWV3X2V2ZW50X2lkGAEgASgJQgi6SAVyA7ABARIYCgRib2R5GAIgASgJQgq6SAdyBRABGNAPIhYKFFN1Ym1pdEFwcGVhbFJlc3BvbnNlKqgBCg9SZXZpZXdFdmVudFR5cGUSIQodUkVWSUVXX0VWRU5UX1RZUEVfVU5TUEVDSUZJRUQQABIlCiFSRVZJRVdfRVZFTlRfVFlQRV9JTklUSUFMX1BVQkxJU0gQARIkCiBSRVZJRVdfRVZFTlRfVFlQRV9WRVJTSU9OX1VQREFURRACEiUKIVJFVklFV19FVkVOVF9UWVBFX01FVEFEQVRBX1VQREFURRADKqEBCgxSZXZpZXdTdGF0dXMSHQoZUkVWSUVXX1NUQVRVU19VTlNQRUNJRklFRBAAEhkKFVJFVklFV19TVEFUVVNfUEVORElORxABEhoKFlJFVklFV19TVEFUVVNfQVBQUk9WRUQQAhIfChtSRVZJRVdfU1RBVFVTX0FVVE9fQVBQUk9WRUQQAxIaChZSRVZJRVdfU1RBVFVTX1JFSkVDVEVEEAQqYgoMUmV2aWV3QWN0aW9uEh0KGVJFVklFV19BQ1RJT05fVU5TUEVDSUZJRUQQABIZChVSRVZJRVdfQUNUSU9OX0FQUFJPVkUQARIYChRSRVZJRVdfQUNUSU9OX1JFSkVDVBACKmQKDFJldmlld1RhcmdldBIdChlSRVZJRVdfVEFSR0VUX1VOU1BFQ0lGSUVEEAASGgoWUkVWSUVXX1RBUkdFVF9NRVRBREFUQRABEhkKFVJFVklFV19UQVJHRVRfVkVSU0lPThACKkkKB0FpU3RhdGUSGAoUQUlfU1RBVEVfVU5TUEVDSUZJRUQQABIPCgtBSV9TVEFURV9PSxABEhMKD0FJX1NUQVRFX0ZBSUxFRBACKn0KDEFwcGVhbFN0YXR1cxIdChlBUFBFQUxfU1RBVFVTX1VOU1BFQ0lGSUVEEAASFgoSQVBQRUFMX1NUQVRVU19PUEVOEAESGgoWQVBQRUFMX1NUQVRVU19BQ0NFUFRFRBACEhoKFkFQUEVBTF9TVEFUVVNfUkVKRUNURUQQAyr9AQoUU2FmZVNlYXJjaExpa2VsaWhvb2QSJgoiU0FGRV9TRUFSQ0hfTElLRUxJSE9PRF9VTlNQRUNJRklFRBAAEigKJFNBRkVfU0VBUkNIX0xJS0VMSUhPT0RfVkVSWV9VTkxJS0VMWRABEiMKH1NBRkVfU0VBUkNIX0xJS0VMSUhPT0RfVU5MSUtFTFkQAhIjCh9TQUZFX1NFQVJDSF9MSUtFTElIT09EX1BPU1NJQkxFEAMSIQodU0FGRV9TRUFSQ0hfTElLRUxJSE9PRF9MSUtFTFkQBBImCiJTQUZFX1NFQVJDSF9MSUtFTElIT09EX1ZFUllfTElLRUxZEAVC7QEKGWNvbS5mbHV4bGF5Lm1vZGVyYXRpb24udjFCD01vZGVyYXRpb25Qcm90b1ABWklnaXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L21vZGVyYXRpb24vdjE7bW9kZXJhdGlvbnYxogIDRk1YqgIVRmx1eGxheS5Nb2RlcmF0aW9uLlYxygIVRmx1eGxheVxNb2RlcmF0aW9uXFYx4gIhRmx1eGxheVxNb2RlcmF0aW9uXFYxXEdQQk1ldGFkYXRh6gIXRmx1eGxheTo6TW9kZXJhdGlvbjo6VjFiBnByb3RvMw`,[A,g]),ue=d(`CipmbHV4bGF5L25vdGlmaWNhdGlvbi92MS9ub3RpZmljYXRpb24ucHJvdG8SF2ZsdXhsYXkubm90aWZpY2F0aW9uLnYxIncKDE5vdGlmaWNhdGlvbhIKCgJpZBgBIAEoCRIMCgRraW5kGAIgASgJEg8KB3BheWxvYWQYAyABKAkSDAoEcmVhZBgEIAEoCBIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJMChhMaXN0Tm90aWZpY2F0aW9uc1JlcXVlc3QSHAoJcGFnZV9zaXplGAEgASgFQgm6SAYaBBhkKAASEgoKcGFnZV90b2tlbhgCIAEoCSJyChlMaXN0Tm90aWZpY2F0aW9uc1Jlc3BvbnNlEjwKDW5vdGlmaWNhdGlvbnMYASADKAsyJS5mbHV4bGF5Lm5vdGlmaWNhdGlvbi52MS5Ob3RpZmljYXRpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIiMKIUdldFVucmVhZE5vdGlmaWNhdGlvbkNvdW50UmVxdWVzdCIzCiJHZXRVbnJlYWROb3RpZmljYXRpb25Db3VudFJlc3BvbnNlEg0KBWNvdW50GAEgASgFIkAKG01hcmtOb3RpZmljYXRpb25SZWFkUmVxdWVzdBIhCg9ub3RpZmljYXRpb25faWQYASABKAlCCLpIBXIDsAEBIh4KHE1hcmtOb3RpZmljYXRpb25SZWFkUmVzcG9uc2UiIQofTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVxdWVzdCIiCiBNYXJrQWxsTm90aWZpY2F0aW9uc1JlYWRSZXNwb25zZUL9AQobY29tLmZsdXhsYXkubm90aWZpY2F0aW9uLnYxQhFOb3RpZmljYXRpb25Qcm90b1ABWk1naXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L25vdGlmaWNhdGlvbi92MTtub3RpZmljYXRpb252MaICA0ZOWKoCF0ZsdXhsYXkuTm90aWZpY2F0aW9uLlYxygIXRmx1eGxheVxOb3RpZmljYXRpb25cVjHiAiNGbHV4bGF5XE5vdGlmaWNhdGlvblxWMVxHUEJNZXRhZGF0YeoCGUZsdXhsYXk6Ok5vdGlmaWNhdGlvbjo6VjFiBnByb3RvMw`,[A,g]),de=d(`ChxmbHV4bGF5L3N0YXRzL3YxL3N0YXRzLnByb3RvEhBmbHV4bGF5LnN0YXRzLnYxIhcKFUdldFB1YmxpY1N0YXRzUmVxdWVzdCJsChZHZXRQdWJsaWNTdGF0c1Jlc3BvbnNlEh4KFnB1YmxpY193YWxscGFwZXJfY291bnQYASABKAUSFQoNY3JlYXRvcl9jb3VudBgCIAEoBRIbChN0b3RhbF9saWNlbnNlX2NvdW50GAMgASgDQsUBChRjb20uZmx1eGxheS5zdGF0cy52MUIKU3RhdHNQcm90b1ABWj9naXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L3N0YXRzL3YxO3N0YXRzdjGiAgNGU1iqAhBGbHV4bGF5LlN0YXRzLlYxygIQRmx1eGxheVxTdGF0c1xWMeICHEZsdXhsYXlcU3RhdHNcVjFcR1BCTWV0YWRhdGHqAhJGbHV4bGF5OjpTdGF0czo6VjFiBnByb3RvMw`),fe=d(`Ch5mbHV4bGF5L3N0cmlwZS92MS9zdHJpcGUucHJvdG8SEWZsdXhsYXkuc3RyaXBlLnYxIhYKFENyZWF0ZUFjY291bnRSZXF1ZXN0IlAKFUNyZWF0ZUFjY291bnRSZXNwb25zZRIZChFzdHJpcGVfYWNjb3VudF9pZBgBIAEoCRIcChRvbmJvYXJkaW5nX2NvbXBsZXRlZBgCIAEoCCIdChtDcmVhdGVBY2NvdW50U2Vzc2lvblJlcXVlc3QiNQocQ3JlYXRlQWNjb3VudFNlc3Npb25SZXNwb25zZRIVCg1jbGllbnRfc2VjcmV0GAEgASgJIhkKF0dldEFjY291bnRTdGF0dXNSZXF1ZXN0Iq0BChhHZXRBY2NvdW50U3RhdHVzUmVzcG9uc2USEwoLaGFzX2FjY291bnQYASABKAgSHAoUb25ib2FyZGluZ19jb21wbGV0ZWQYAiABKAgSHAoUcGVuZGluZ192ZXJpZmljYXRpb24YAyADKAkSFQoNY3VycmVudGx5X2R1ZRgEIAMoCRIQCghwYXN0X2R1ZRgFIAMoCRIXCg9kaXNhYmxlZF9yZWFzb24YBiABKAlCzQEKFWNvbS5mbHV4bGF5LnN0cmlwZS52MUILU3RyaXBlUHJvdG9QAVpBZ2l0aHViLmNvbS9rZW4xMDkvZmx1eGxheS1wcm90by9nZW4vZ28vZmx1eGxheS9zdHJpcGUvdjE7c3RyaXBldjGiAgNGU1iqAhFGbHV4bGF5LlN0cmlwZS5WMcoCEUZsdXhsYXlcU3RyaXBlXFYx4gIdRmx1eGxheVxTdHJpcGVcVjFcR1BCTWV0YWRhdGHqAhNGbHV4bGF5OjpTdHJpcGU6OlYxYgZwcm90bzM`),j=d(`CiVmbHV4bGF5L2NvbW1vbi92MS9idWNrZXRfb2JqZWN0LnByb3RvEhFmbHV4bGF5LmNvbW1vbi52MSI5ChBCdWNrZXRPYmplY3RNZXRhEg8KB3VzZXJfaWQYASABKAkSFAoMd2FsbHBhcGVyX2lkGAIgASgJIoYBCgxCdWNrZXRPYmplY3QSEwoLb2JqZWN0X3R5cGUYASABKAkSFAoMY29udGVudF90eXBlGAIgASgJEgoKAmlkGAMgASgJEgwKBG5hbWUYBCABKAkSMQoEbWV0YRgFIAEoCzIjLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdE1ldGFC0wEKFWNvbS5mbHV4bGF5LmNvbW1vbi52MUIRQnVja2V0T2JqZWN0UHJvdG9QAVpBZ2l0aHViLmNvbS9rZW4xMDkvZmx1eGxheS1wcm90by9nZW4vZ28vZmx1eGxheS9jb21tb24vdjE7Y29tbW9udjGiAgNGQ1iqAhFGbHV4bGF5LkNvbW1vbi5WMcoCEUZsdXhsYXlcQ29tbW9uXFYx4gIdRmx1eGxheVxDb21tb25cVjFcR1BCTWV0YWRhdGHqAhNGbHV4bGF5OjpDb21tb246OlYxYgZwcm90bzM`),M=d(`ChhmbHV4bGF5L3YxL3NlcnZpY2UucHJvdG8SCmZsdXhsYXkudjEy0gcKC1VzZXJTZXJ2aWNlEmYKDkdldEN1cnJlbnRVc2VyEiYuZmx1eGxheS51c2VyLnYxLkdldEN1cnJlbnRVc2VyUmVxdWVzdBonLmZsdXhsYXkudXNlci52MS5HZXRDdXJyZW50VXNlclJlc3BvbnNlIgOQAgESUQoHR2V0VXNlchIfLmZsdXhsYXkudXNlci52MS5HZXRVc2VyUmVxdWVzdBogLmZsdXhsYXkudXNlci52MS5HZXRVc2VyUmVzcG9uc2UiA5ACARJ/ChhVcGRhdGVDdXJyZW50VXNlclByb2ZpbGUSMC5mbHV4bGF5LnVzZXIudjEuVXBkYXRlQ3VycmVudFVzZXJQcm9maWxlUmVxdWVzdBoxLmZsdXhsYXkudXNlci52MS5VcGRhdGVDdXJyZW50VXNlclByb2ZpbGVSZXNwb25zZRJtChJVcGRhdGVQcm9maWxlSW1hZ2USKi5mbHV4bGF5LnVzZXIudjEuVXBkYXRlUHJvZmlsZUltYWdlUmVxdWVzdBorLmZsdXhsYXkudXNlci52MS5VcGRhdGVQcm9maWxlSW1hZ2VSZXNwb25zZRJ5ChZDcmVhdGVQcm9maWxlVXBsb2FkVVJMEi4uZmx1eGxheS51c2VyLnYxLkNyZWF0ZVByb2ZpbGVVcGxvYWRVUkxSZXF1ZXN0Gi8uZmx1eGxheS51c2VyLnYxLkNyZWF0ZVByb2ZpbGVVcGxvYWRVUkxSZXNwb25zZRJ1ChNHZXRPbmJvYXJkaW5nU3RhdHVzEisuZmx1eGxheS51c2VyLnYxLkdldE9uYm9hcmRpbmdTdGF0dXNSZXF1ZXN0GiwuZmx1eGxheS51c2VyLnYxLkdldE9uYm9hcmRpbmdTdGF0dXNSZXNwb25zZSIDkAIBEm0KEkNvbXBsZXRlT25ib2FyZGluZxIqLmZsdXhsYXkudXNlci52MS5Db21wbGV0ZU9uYm9hcmRpbmdSZXF1ZXN0GisuZmx1eGxheS51c2VyLnYxLkNvbXBsZXRlT25ib2FyZGluZ1Jlc3BvbnNlElcKCUxpc3RVc2VycxIhLmZsdXhsYXkudXNlci52MS5MaXN0VXNlcnNSZXF1ZXN0GiIuZmx1eGxheS51c2VyLnYxLkxpc3RVc2Vyc1Jlc3BvbnNlIgOQAgESXgoNRGVsZXRlQWNjb3VudBIlLmZsdXhsYXkudXNlci52MS5EZWxldGVBY2NvdW50UmVxdWVzdBomLmZsdXhsYXkudXNlci52MS5EZWxldGVBY2NvdW50UmVzcG9uc2UyYAoMQWRtaW5TZXJ2aWNlElAKBldob2FtaRIfLmZsdXhsYXkuYWRtaW4udjEuV2hvYW1pUmVxdWVzdBogLmZsdXhsYXkuYWRtaW4udjEuV2hvYW1pUmVzcG9uc2UiA5ACATKvBAoRTW9kZXJhdGlvblNlcnZpY2USdQoPTGlzdFJldmlld1F1ZXVlEi0uZmx1eGxheS5tb2RlcmF0aW9uLnYxLkxpc3RSZXZpZXdRdWV1ZVJlcXVlc3QaLi5mbHV4bGF5Lm1vZGVyYXRpb24udjEuTGlzdFJldmlld1F1ZXVlUmVzcG9uc2UiA5ACARJjCglHZXRSZXZpZXcSJy5mbHV4bGF5Lm1vZGVyYXRpb24udjEuR2V0UmV2aWV3UmVxdWVzdBooLmZsdXhsYXkubW9kZXJhdGlvbi52MS5HZXRSZXZpZXdSZXNwb25zZSIDkAIBEmcKDERlY2lkZVJldmlldxIqLmZsdXhsYXkubW9kZXJhdGlvbi52MS5EZWNpZGVSZXZpZXdSZXF1ZXN0GisuZmx1eGxheS5tb2RlcmF0aW9uLnYxLkRlY2lkZVJldmlld1Jlc3BvbnNlEmkKC0xpc3RBcHBlYWxzEikuZmx1eGxheS5tb2RlcmF0aW9uLnYxLkxpc3RBcHBlYWxzUmVxdWVzdBoqLmZsdXhsYXkubW9kZXJhdGlvbi52MS5MaXN0QXBwZWFsc1Jlc3BvbnNlIgOQAgESagoNUmVzb2x2ZUFwcGVhbBIrLmZsdXhsYXkubW9kZXJhdGlvbi52MS5SZXNvbHZlQXBwZWFsUmVxdWVzdBosLmZsdXhsYXkubW9kZXJhdGlvbi52MS5SZXNvbHZlQXBwZWFsUmVzcG9uc2UyeAoNQXBwZWFsU2VydmljZRJnCgxTdWJtaXRBcHBlYWwSKi5mbHV4bGF5Lm1vZGVyYXRpb24udjEuU3VibWl0QXBwZWFsUmVxdWVzdBorLmZsdXhsYXkubW9kZXJhdGlvbi52MS5TdWJtaXRBcHBlYWxSZXNwb25zZTK8AgoLQXV0aFNlcnZpY2USZwoQQ3JlYXRlRGV2aWNlQ29kZRIoLmZsdXhsYXkuYXV0aC52MS5DcmVhdGVEZXZpY2VDb2RlUmVxdWVzdBopLmZsdXhsYXkuYXV0aC52MS5DcmVhdGVEZXZpY2VDb2RlUmVzcG9uc2USZAoPUG9sbERldmljZVRva2VuEicuZmx1eGxheS5hdXRoLnYxLlBvbGxEZXZpY2VUb2tlblJlcXVlc3QaKC5mbHV4bGF5LmF1dGgudjEuUG9sbERldmljZVRva2VuUmVzcG9uc2USXgoNQXBwcm92ZURldmljZRIlLmZsdXhsYXkuYXV0aC52MS5BcHByb3ZlRGV2aWNlUmVxdWVzdBomLmZsdXhsYXkuYXV0aC52MS5BcHByb3ZlRGV2aWNlUmVzcG9uc2UyywQKE05vdGlmaWNhdGlvblNlcnZpY2USfwoRTGlzdE5vdGlmaWNhdGlvbnMSMS5mbHV4bGF5Lm5vdGlmaWNhdGlvbi52MS5MaXN0Tm90aWZpY2F0aW9uc1JlcXVlc3QaMi5mbHV4bGF5Lm5vdGlmaWNhdGlvbi52MS5MaXN0Tm90aWZpY2F0aW9uc1Jlc3BvbnNlIgOQAgESmgEKGkdldFVucmVhZE5vdGlmaWNhdGlvbkNvdW50EjouZmx1eGxheS5ub3RpZmljYXRpb24udjEuR2V0VW5yZWFkTm90aWZpY2F0aW9uQ291bnRSZXF1ZXN0GjsuZmx1eGxheS5ub3RpZmljYXRpb24udjEuR2V0VW5yZWFkTm90aWZpY2F0aW9uQ291bnRSZXNwb25zZSIDkAIBEoMBChRNYXJrTm90aWZpY2F0aW9uUmVhZBI0LmZsdXhsYXkubm90aWZpY2F0aW9uLnYxLk1hcmtOb3RpZmljYXRpb25SZWFkUmVxdWVzdBo1LmZsdXhsYXkubm90aWZpY2F0aW9uLnYxLk1hcmtOb3RpZmljYXRpb25SZWFkUmVzcG9uc2USjwEKGE1hcmtBbGxOb3RpZmljYXRpb25zUmVhZBI4LmZsdXhsYXkubm90aWZpY2F0aW9uLnYxLk1hcmtBbGxOb3RpZmljYXRpb25zUmVhZFJlcXVlc3QaOS5mbHV4bGF5Lm5vdGlmaWNhdGlvbi52MS5NYXJrQWxsTm90aWZpY2F0aW9uc1JlYWRSZXNwb25zZTJwCg5Db250YWN0U2VydmljZRJeCgtTZW5kQ29udGFjdBImLmZsdXhsYXkuY29udGFjdC52MS5TZW5kQ29udGFjdFJlcXVlc3QaJy5mbHV4bGF5LmNvbnRhY3QudjEuU2VuZENvbnRhY3RSZXNwb25zZTJ4CgxTdGF0c1NlcnZpY2USaAoOR2V0UHVibGljU3RhdHMSJy5mbHV4bGF5LnN0YXRzLnYxLkdldFB1YmxpY1N0YXRzUmVxdWVzdBooLmZsdXhsYXkuc3RhdHMudjEuR2V0UHVibGljU3RhdHNSZXNwb25zZSIDkAIBMuUCChRTdHJpcGVDb25uZWN0U2VydmljZRJiCg1DcmVhdGVBY2NvdW50EicuZmx1eGxheS5zdHJpcGUudjEuQ3JlYXRlQWNjb3VudFJlcXVlc3QaKC5mbHV4bGF5LnN0cmlwZS52MS5DcmVhdGVBY2NvdW50UmVzcG9uc2USdwoUQ3JlYXRlQWNjb3VudFNlc3Npb24SLi5mbHV4bGF5LnN0cmlwZS52MS5DcmVhdGVBY2NvdW50U2Vzc2lvblJlcXVlc3QaLy5mbHV4bGF5LnN0cmlwZS52MS5DcmVhdGVBY2NvdW50U2Vzc2lvblJlc3BvbnNlEnAKEEdldEFjY291bnRTdGF0dXMSKi5mbHV4bGF5LnN0cmlwZS52MS5HZXRBY2NvdW50U3RhdHVzUmVxdWVzdBorLmZsdXhsYXkuc3RyaXBlLnYxLkdldEFjY291bnRTdGF0dXNSZXNwb25zZSIDkAIBMosBCg9DaGVja291dFNlcnZpY2USeAoTQ3JlYXRlUGF5bWVudEludGVudBIvLmZsdXhsYXkuY2hlY2tvdXQudjEuQ3JlYXRlUGF5bWVudEludGVudFJlcXVlc3QaMC5mbHV4bGF5LmNoZWNrb3V0LnYxLkNyZWF0ZVBheW1lbnRJbnRlbnRSZXNwb25zZTKfGQoQV2FsbHBhcGVyU2VydmljZRJwCg5MaXN0V2FsbHBhcGVycxIrLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RXYWxscGFwZXJzUmVxdWVzdBosLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RXYWxscGFwZXJzUmVzcG9uc2UiA5ACARJqCgxHZXRXYWxscGFwZXISKS5mbHV4bGF5LndhbGxwYXBlci52MS5HZXRXYWxscGFwZXJSZXF1ZXN0GiouZmx1eGxheS53YWxscGFwZXIudjEuR2V0V2FsbHBhcGVyUmVzcG9uc2UiA5ACARJ2ChBTZWFyY2hXYWxscGFwZXJzEi0uZmx1eGxheS53YWxscGFwZXIudjEuU2VhcmNoV2FsbHBhcGVyc1JlcXVlc3QaLi5mbHV4bGF5LndhbGxwYXBlci52MS5TZWFyY2hXYWxscGFwZXJzUmVzcG9uc2UiA5ACARKIAQoWTGlzdEZlYXR1cmVkV2FsbHBhcGVycxIzLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RGZWF0dXJlZFdhbGxwYXBlcnNSZXF1ZXN0GjQuZmx1eGxheS53YWxscGFwZXIudjEuTGlzdEZlYXR1cmVkV2FsbHBhcGVyc1Jlc3BvbnNlIgOQAgEShQEKFUxpc3RSZWxhdGVkV2FsbHBhcGVycxIyLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RSZWxhdGVkV2FsbHBhcGVyc1JlcXVlc3QaMy5mbHV4bGF5LndhbGxwYXBlci52MS5MaXN0UmVsYXRlZFdhbGxwYXBlcnNSZXNwb25zZSIDkAIBEnEKEEFjcXVpcmVXYWxscGFwZXISLS5mbHV4bGF5LndhbGxwYXBlci52MS5BY3F1aXJlV2FsbHBhcGVyUmVxdWVzdBouLmZsdXhsYXkud2FsbHBhcGVyLnYxLkFjcXVpcmVXYWxscGFwZXJSZXNwb25zZRJ/ChNMaXN0T3duZWRXYWxscGFwZXJzEjAuZmx1eGxheS53YWxscGFwZXIudjEuTGlzdE93bmVkV2FsbHBhcGVyc1JlcXVlc3QaMS5mbHV4bGF5LndhbGxwYXBlci52MS5MaXN0T3duZWRXYWxscGFwZXJzUmVzcG9uc2UiA5ACARJlCgxQaW5XYWxscGFwZXISKS5mbHV4bGF5LndhbGxwYXBlci52MS5QaW5XYWxscGFwZXJSZXF1ZXN0GiouZmx1eGxheS53YWxscGFwZXIudjEuUGluV2FsbHBhcGVyUmVzcG9uc2USawoOVW5waW5XYWxscGFwZXISKy5mbHV4bGF5LndhbGxwYXBlci52MS5VbnBpbldhbGxwYXBlclJlcXVlc3QaLC5mbHV4bGF5LndhbGxwYXBlci52MS5VbnBpbldhbGxwYXBlclJlc3BvbnNlEnwKEkxpc3RVc2VyV2FsbHBhcGVycxIvLmZsdXhsYXkud2FsbHBhcGVyLnYxLkxpc3RVc2VyV2FsbHBhcGVyc1JlcXVlc3QaMC5mbHV4bGF5LndhbGxwYXBlci52MS5MaXN0VXNlcldhbGxwYXBlcnNSZXNwb25zZSIDkAIBEnoKE1JlY29yZFdhbGxwYXBlclZpZXcSMC5mbHV4bGF5LndhbGxwYXBlci52MS5SZWNvcmRXYWxscGFwZXJWaWV3UmVxdWVzdBoxLmZsdXhsYXkud2FsbHBhcGVyLnYxLlJlY29yZFdhbGxwYXBlclZpZXdSZXNwb25zZRKaAQocR2V0Q3JlYXRvclBlcmZvcm1hbmNlU3VtbWFyeRI5LmZsdXhsYXkud2FsbHBhcGVyLnYxLkdldENyZWF0b3JQZXJmb3JtYW5jZVN1bW1hcnlSZXF1ZXN0GjouZmx1eGxheS53YWxscGFwZXIudjEuR2V0Q3JlYXRvclBlcmZvcm1hbmNlU3VtbWFyeVJlc3BvbnNlIgOQAgEShgEKF1VwZGF0ZVdhbGxwYXBlck1ldGFkYXRhEjQuZmx1eGxheS53YWxscGFwZXIudjEuVXBkYXRlV2FsbHBhcGVyTWV0YWRhdGFSZXF1ZXN0GjUuZmx1eGxheS53YWxscGFwZXIudjEuVXBkYXRlV2FsbHBhcGVyTWV0YWRhdGFSZXNwb25zZRKDAQoWQ3JlYXRlUHJldmlld1VwbG9hZFVSTBIzLmZsdXhsYXkud2FsbHBhcGVyLnYxLkNyZWF0ZVByZXZpZXdVcGxvYWRVUkxSZXF1ZXN0GjQuZmx1eGxheS53YWxscGFwZXIudjEuQ3JlYXRlUHJldmlld1VwbG9hZFVSTFJlc3BvbnNlEm4KD0FkZFByZXZpZXdJbWFnZRIsLmZsdXhsYXkud2FsbHBhcGVyLnYxLkFkZFByZXZpZXdJbWFnZVJlcXVlc3QaLS5mbHV4bGF5LndhbGxwYXBlci52MS5BZGRQcmV2aWV3SW1hZ2VSZXNwb25zZRJ3ChJEZWxldGVQcmV2aWV3SW1hZ2USLy5mbHV4bGF5LndhbGxwYXBlci52MS5EZWxldGVQcmV2aWV3SW1hZ2VSZXF1ZXN0GjAuZmx1eGxheS53YWxscGFwZXIudjEuRGVsZXRlUHJldmlld0ltYWdlUmVzcG9uc2UScQoQUHVibGlzaFdhbGxwYXBlchItLmZsdXhsYXkud2FsbHBhcGVyLnYxLlB1Ymxpc2hXYWxscGFwZXJSZXF1ZXN0Gi4uZmx1eGxheS53YWxscGFwZXIudjEuUHVibGlzaFdhbGxwYXBlclJlc3BvbnNlEncKElVucHVibGlzaFdhbGxwYXBlchIvLmZsdXhsYXkud2FsbHBhcGVyLnYxLlVucHVibGlzaFdhbGxwYXBlclJlcXVlc3QaMC5mbHV4bGF5LndhbGxwYXBlci52MS5VbnB1Ymxpc2hXYWxscGFwZXJSZXNwb25zZRJuCg9EZWxldGVXYWxscGFwZXISLC5mbHV4bGF5LndhbGxwYXBlci52MS5EZWxldGVXYWxscGFwZXJSZXF1ZXN0Gi0uZmx1eGxheS53YWxscGFwZXIudjEuRGVsZXRlV2FsbHBhcGVyUmVzcG9uc2USbgoPR2V0RGV2ZWxvcGVyS2V5EiwuZmx1eGxheS53YWxscGFwZXIudjEuR2V0RGV2ZWxvcGVyS2V5UmVxdWVzdBotLmZsdXhsYXkud2FsbHBhcGVyLnYxLkdldERldmVsb3BlcktleVJlc3BvbnNlEnQKEVJlZ2lzdGVyV2FsbHBhcGVyEi4uZmx1eGxheS53YWxscGFwZXIudjEuUmVnaXN0ZXJXYWxscGFwZXJSZXF1ZXN0Gi8uZmx1eGxheS53YWxscGFwZXIudjEuUmVnaXN0ZXJXYWxscGFwZXJSZXNwb25zZRJoCg1HZXRDb250ZW50S2V5EiouZmx1eGxheS53YWxscGFwZXIudjEuR2V0Q29udGVudEtleVJlcXVlc3QaKy5mbHV4bGF5LndhbGxwYXBlci52MS5HZXRDb250ZW50S2V5UmVzcG9uc2USaAoNQ29uZmlybVVwbG9hZBIqLmZsdXhsYXkud2FsbHBhcGVyLnYxLkNvbmZpcm1VcGxvYWRSZXF1ZXN0GisuZmx1eGxheS53YWxscGFwZXIudjEuQ29uZmlybVVwbG9hZFJlc3BvbnNlEmUKDENhbmNlbFVwbG9hZBIpLmZsdXhsYXkud2FsbHBhcGVyLnYxLkNhbmNlbFVwbG9hZFJlcXVlc3QaKi5mbHV4bGF5LndhbGxwYXBlci52MS5DYW5jZWxVcGxvYWRSZXNwb25zZRJ0ChFTZXRXYWxscGFwZXJQcmljZRIuLmZsdXhsYXkud2FsbHBhcGVyLnYxLlNldFdhbGxwYXBlclByaWNlUmVxdWVzdBovLmZsdXhsYXkud2FsbHBhcGVyLnYxLlNldFdhbGxwYXBlclByaWNlUmVzcG9uc2USdAoRUmVnaXN0ZXJEZXZpY2VLZXkSLi5mbHV4bGF5LndhbGxwYXBlci52MS5SZWdpc3RlckRldmljZUtleVJlcXVlc3QaLy5mbHV4bGF5LndhbGxwYXBlci52MS5SZWdpc3RlckRldmljZUtleVJlc3BvbnNlEmIKC0dldEtleUVwb2NoEiguZmx1eGxheS53YWxscGFwZXIudjEuR2V0S2V5RXBvY2hSZXF1ZXN0GikuZmx1eGxheS53YWxscGFwZXIudjEuR2V0S2V5RXBvY2hSZXNwb25zZUKkAQoOY29tLmZsdXhsYXkudjFCDFNlcnZpY2VQcm90b1ABWjtnaXRodWIuY29tL2tlbjEwOS9mbHV4bGF5LXByb3RvL2dlbi9nby9mbHV4bGF5L3YxO2ZsdXhsYXl2MaICA0ZYWKoCCkZsdXhsYXkuVjHKAgpGbHV4bGF5XFYx4gIWRmx1eGxheVxWMVxHUEJNZXRhZGF0YeoCC0ZsdXhsYXk6OlYxYgZwcm90bzM`,[O,k,se,ce,le,ue,de,fe,d(`ChpmbHV4bGF5L3VzZXIvdjEvdXNlci5wcm90bxIPZmx1eGxheS51c2VyLnYxIrICCgdQcm9maWxlEg4KBmhhbmRsZRgBIAEoCRIMCgRuYW1lGAIgASgJEi8KBmF2YXRhchgDIAEoCzIfLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdBIvCgZoZWFkZXIYBCABKAsyHy5mbHV4bGF5LmNvbW1vbi52MS5CdWNrZXRPYmplY3QSCwoDYmlvGAUgASgJEhMKC3dlYnNpdGVfdXJsGAYgASgJEgwKBHhfaWQYByABKAkSFAoMaW5zdGFncmFtX2lkGAggASgJEhEKCWdpdGh1Yl9pZBgJIAEoCRIQCghsb2NhdGlvbhgKIAEoCRIMCgR0YWdzGAsgAygJEi4KCnVwZGF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIqIBCgRVc2VyEg8KB3VzZXJfaWQYASABKAkSKQoHcHJvZmlsZRgCIAEoCzIYLmZsdXhsYXkudXNlci52MS5Qcm9maWxlEi4KCmNyZWF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIhcKFUdldEN1cnJlbnRVc2VyUmVxdWVzdCJXChZHZXRDdXJyZW50VXNlclJlc3BvbnNlEiMKBHVzZXIYASABKAsyFS5mbHV4bGF5LnVzZXIudjEuVXNlchIYChBwcmVmZXJyZWRfbG9jYWxlGAIgASgJIk0KDkdldFVzZXJSZXF1ZXN0EhsKB3VzZXJfaWQYASABKAlCCLpIBXIDsAEBSAASEAoGaGFuZGxlGAIgASgJSABCDAoKaWRlbnRpZmllciI2Cg9HZXRVc2VyUmVzcG9uc2USIwoEdXNlchgBIAEoCzIVLmZsdXhsYXkudXNlci52MS5Vc2VyIpMECh9VcGRhdGVDdXJyZW50VXNlclByb2ZpbGVSZXF1ZXN0Ei8KBmhhbmRsZRgBIAEoCUIaukgXyAEBchIyEF5bYS16QS1aMC05Xy1dKyRIAIgBARIRCgRuYW1lGAIgASgJSAGIAQESNAoGYXZhdGFyGAMgASgLMh8uZmx1eGxheS5jb21tb24udjEuQnVja2V0T2JqZWN0SAKIAQESNAoGaGVhZGVyGAQgASgLMh8uZmx1eGxheS5jb21tb24udjEuQnVja2V0T2JqZWN0SAOIAQESEAoDYmlvGAUgASgJSASIAQESGAoLd2Vic2l0ZV91cmwYBiABKAlIBYgBARIRCgR4X2lkGAcgASgJSAaIAQESGQoMaW5zdGFncmFtX2lkGAggASgJSAeIAQESFgoJZ2l0aHViX2lkGAkgASgJSAiIAQESFQoIbG9jYXRpb24YCiABKAlICYgBARIMCgR0YWdzGAsgAygJEh0KEHByZWZlcnJlZF9sb2NhbGUYDCABKAlICogBAUIJCgdfaGFuZGxlQgcKBV9uYW1lQgkKB19hdmF0YXJCCQoHX2hlYWRlckIGCgRfYmlvQg4KDF93ZWJzaXRlX3VybEIHCgVfeF9pZEIPCg1faW5zdGFncmFtX2lkQgwKCl9naXRodWJfaWRCCwoJX2xvY2F0aW9uQhMKEV9wcmVmZXJyZWRfbG9jYWxlIk0KIFVwZGF0ZUN1cnJlbnRVc2VyUHJvZmlsZVJlc3BvbnNlEikKB3Byb2ZpbGUYASABKAsyGC5mbHV4bGF5LnVzZXIudjEuUHJvZmlsZSLaAQodQ3JlYXRlUHJvZmlsZVVwbG9hZFVSTFJlcXVlc3QSFAoMY29udGVudF90eXBlGAEgASgJEkwKCmFzc2V0X3R5cGUYAiABKA4yOC5mbHV4bGF5LnVzZXIudjEuQ3JlYXRlUHJvZmlsZVVwbG9hZFVSTFJlcXVlc3QuQXNzZXRUeXBlIlUKCUFzc2V0VHlwZRIaChZBU1NFVF9UWVBFX1VOU1BFQ0lGSUVEEAASFQoRQVNTRVRfVFlQRV9BVkFUQVIQARIVChFBU1NFVF9UWVBFX0hFQURFUhACImUKHkNyZWF0ZVByb2ZpbGVVcGxvYWRVUkxSZXNwb25zZRISCgp1cGxvYWRfdXJsGAEgASgJEi8KBm9iamVjdBgCIAEoCzIfLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdCLnAQoZVXBkYXRlUHJvZmlsZUltYWdlUmVxdWVzdBJCCgR0eXBlGAEgASgOMjQuZmx1eGxheS51c2VyLnYxLlVwZGF0ZVByb2ZpbGVJbWFnZVJlcXVlc3QuSW1hZ2VUeXBlEi8KBm9iamVjdBgCIAEoCzIfLmZsdXhsYXkuY29tbW9uLnYxLkJ1Y2tldE9iamVjdCJVCglJbWFnZVR5cGUSGgoWSU1BR0VfVFlQRV9VTlNQRUNJRklFRBAAEhUKEUlNQUdFX1RZUEVfQVZBVEFSEAESFQoRSU1BR0VfVFlQRV9IRUFERVIQAiJHChpVcGRhdGVQcm9maWxlSW1hZ2VSZXNwb25zZRIpCgdwcm9maWxlGAEgASgLMhguZmx1eGxheS51c2VyLnYxLlByb2ZpbGUiHAoaR2V0T25ib2FyZGluZ1N0YXR1c1JlcXVlc3QiZgobR2V0T25ib2FyZGluZ1N0YXR1c1Jlc3BvbnNlEhQKDHRlcm1zX2FncmVlZBgBIAEoCBIZChFoYW5kbGVfY29uZmlndXJlZBgCIAEoCBIWCg5jdXJyZW50X2hhbmRsZRgDIAEoCSJ+ChlDb21wbGV0ZU9uYm9hcmRpbmdSZXF1ZXN0Eg4KBmhhbmRsZRgBIAEoCRIWCg50ZXJtc19hY2NlcHRlZBgCIAEoCBIfChdtYXJrZXRpbmdfZW1haWxfY29uc2VudBgDIAEoCBIYChBwcmVmZXJyZWRfbG9jYWxlGAQgASgJIhwKGkNvbXBsZXRlT25ib2FyZGluZ1Jlc3BvbnNlIl4KEExpc3RVc2Vyc1JlcXVlc3QSGgoJcGFnZV9zaXplGAEgASgFQge6SAQaAiAAEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoEcGFnZRgDIAEoBUgAiAEBQgcKBV9wYWdlIm0KEUxpc3RVc2Vyc1Jlc3BvbnNlEioKCHByb2ZpbGVzGAEgAygLMhguZmx1eGxheS51c2VyLnYxLlByb2ZpbGUSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgFIhYKFERlbGV0ZUFjY291bnRSZXF1ZXN0IhcKFURlbGV0ZUFjY291bnRSZXNwb25zZUK9AQoTY29tLmZsdXhsYXkudXNlci52MUIJVXNlclByb3RvUAFaPWdpdGh1Yi5jb20va2VuMTA5L2ZsdXhsYXktcHJvdG8vZ2VuL2dvL2ZsdXhsYXkvdXNlci92MTt1c2VydjGiAgNGVViqAg9GbHV4bGF5LlVzZXIuVjHKAg9GbHV4bGF5XFVzZXJcVjHiAhtGbHV4bGF5XFVzZXJcVjFcR1BCTWV0YWRhdGHqAhFGbHV4bGF5OjpVc2VyOjpWMWIGcHJvdG8z`,[A,j,g]),d(`CiRmbHV4bGF5L3dhbGxwYXBlci92MS93YWxscGFwZXIucHJvdG8SFGZsdXhsYXkud2FsbHBhcGVyLnYxIlcKBkF1dGhvchIOCgZoYW5kbGUYASABKAkSDAoEbmFtZRgCIAEoCRIvCgZhdmF0YXIYAyABKAsyHy5mbHV4bGF5LmNvbW1vbi52MS5CdWNrZXRPYmplY3Qi5QYKCVdhbGxwYXBlchIKCgJpZBgBIAEoCRIMCgRzbHVnGA0gASgJEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YBSABKAkSFQoNdGh1bWJuYWlsX3VybBgGIAEoCRIRCgllbnRyeV91cmwYByABKAkSDAoEdGFncxgIIAMoCRI4CghwcmV2aWV3cxgJIAMoCzImLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlclByZXZpZXcSNQoGc3RhdHVzGAogASgOMiUuZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyU3RhdHVzEi4KCmNyZWF0ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhAKCGlzX293bmVkGA4gASgIEhIKCmxpY2Vuc2VfaWQYDyABKAkSDwoHdXNlcl9pZBgQIAEoCRIZChFsYXRlc3RfdmVyc2lvbl9pZBgRIAEoCRI0Cg5hdXRob3JfcHJvZmlsZRgSIAEoCzIcLmZsdXhsYXkud2FsbHBhcGVyLnYxLkF1dGhvchIzCgVwcmljZRgTIAEoCzIkLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlclByaWNlEjQKBnByaWNlcxgUIAMoCzIkLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlclByaWNlEjUKDHB1Ymxpc2hlZF9hdBgVIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARI0CgduZXR3b3JrGBYgAygLMiMuZmx1eGxheS53YWxscGFwZXIudjEuTmV0d29ya09yaWdpbhIRCglpc19waW5uZWQYFyABKAgSEgoKdmlld19jb3VudBgYIAEoAxJHCg1jcmVhdG9yX3N0YXRzGBkgASgLMisuZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyQ3JlYXRvclN0YXRzSAGIAQESEAoIcmV2aXNpb24YGiABKAVCDwoNX3B1Ymxpc2hlZF9hdEIQCg5fY3JlYXRvcl9zdGF0c0oECAMQBFIHdmVyc2lvbiJxChVXYWxscGFwZXJDcmVhdG9yU3RhdHMSFQoNbGljZW5zZV9jb3VudBgBIAEoAxIRCgl2aWV3c18zMGQYAiABKAMSFAoMbGljZW5zZXNfMzBkGAMgASgDEhgKEHZpZXdfZ3Jvd3RoX3JhdGUYBCABKAEiMgoOV2FsbHBhcGVyUHJpY2USEAoIY3VycmVuY3kYASABKAkSDgoGYW1vdW50GAIgASgDIi8KDU5ldHdvcmtPcmlnaW4SDgoGb3JpZ2luGAEgASgJEg4KBnJlYXNvbhgCIAEoCSLQAQoQV2FsbHBhcGVyUHJldmlldxIKCgJpZBgBIAEoCRIvCgZvYmplY3QYAiABKAsyHy5mbHV4bGF5LmNvbW1vbi52MS5CdWNrZXRPYmplY3QSDQoFb3JkZXIYAyABKAUSEgoFd2lkdGgYBCABKAVIAIgBARITCgZoZWlnaHQYBSABKAVIAYgBARIdChBkdXJhdGlvbl9zZWNvbmRzGAYgASgFSAKIAQFCCAoGX3dpZHRoQgkKB19oZWlnaHRCEwoRX2R1cmF0aW9uX3NlY29uZHMiOQoXQWNxdWlyZVdhbGxwYXBlclJlcXVlc3QSHgoMd2FsbHBhcGVyX2lkGAEgASgJQgi6SAVyA7ABASIaChhBY3F1aXJlV2FsbHBhcGVyUmVzcG9uc2UiTAoaTGlzdE93bmVkV2FsbHBhcGVyc1JlcXVlc3QSGgoJcGFnZV9zaXplGAEgASgFQge6SAQaAiAAEhIKCnBhZ2VfdG9rZW4YAiABKAkiawobTGlzdE93bmVkV2FsbHBhcGVyc1Jlc3BvbnNlEjMKCndhbGxwYXBlcnMYASADKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIjUKE1BpbldhbGxwYXBlclJlcXVlc3QSHgoMd2FsbHBhcGVyX2lkGAEgASgJQgi6SAVyA7ABASIWChRQaW5XYWxscGFwZXJSZXNwb25zZSI3ChVVbnBpbldhbGxwYXBlclJlcXVlc3QSHgoMd2FsbHBhcGVyX2lkGAEgASgJQgi6SAVyA7ABASIYChZVbnBpbldhbGxwYXBlclJlc3BvbnNlIsEBChlMaXN0VXNlcldhbGxwYXBlcnNSZXF1ZXN0EhoKCXBhZ2Vfc2l6ZRgBIAEoBUIHukgEGgIgABISCgpwYWdlX3Rva2VuGAIgASgJEjYKB3NvcnRfYnkYAyABKA4yJS5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXJTb3J0QnkSPAoNc3RhdHVzX2ZpbHRlchgEIAEoDjIlLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlclN0YXR1cyJqChpMaXN0VXNlcldhbGxwYXBlcnNSZXNwb25zZRIzCgp3YWxscGFwZXJzGAEgAygLMh8uZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSKWAQoeVXBkYXRlV2FsbHBhcGVyTWV0YWRhdGFSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABARIdCgRuYW1lGAIgASgJQgq6SAfIAQFyAhABSACIAQESGAoLZGVzY3JpcHRpb24YAyABKAlIAYgBARIMCgR0YWdzGAQgAygJQgcKBV9uYW1lQg4KDF9kZXNjcmlwdGlvbiJVCh9VcGRhdGVXYWxscGFwZXJNZXRhZGF0YVJlc3BvbnNlEjIKCXdhbGxwYXBlchgBIAEoCzIfLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlciKMAQodQ3JlYXRlUHJldmlld1VwbG9hZFVSTFJlcXVlc3QSHgoMd2FsbHBhcGVyX2lkGAEgASgJQgi6SAVyA7ABARJLCgxjb250ZW50X3R5cGUYAiABKAlCNbpIMnIwMi5eKGltYWdlLyhwbmd8anBlZ3x3ZWJwfGdpZil8dmlkZW8vKG1wNHx3ZWJtKSkkIkgKHkNyZWF0ZVByZXZpZXdVcGxvYWRVUkxSZXNwb25zZRISCgpwcmV2aWV3X2lkGAEgASgJEhIKCnVwbG9hZF91cmwYAiABKAkibAoWQWRkUHJldmlld0ltYWdlUmVxdWVzdBIeCgx3YWxscGFwZXJfaWQYASABKAlCCLpIBXIDsAEBEhwKCnByZXZpZXdfaWQYAiABKAlCCLpIBXIDsAEBEhQKDGNvbnRlbnRfdHlwZRgDIAEoCSJSChdBZGRQcmV2aWV3SW1hZ2VSZXNwb25zZRI3CgdwcmV2aWV3GAEgASgLMiYuZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyUHJldmlldyIxChlEZWxldGVQcmV2aWV3SW1hZ2VSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASIcChpEZWxldGVQcmV2aWV3SW1hZ2VSZXNwb25zZSIvChdQdWJsaXNoV2FsbHBhcGVyUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQEiTgoYUHVibGlzaFdhbGxwYXBlclJlc3BvbnNlEjIKCXdhbGxwYXBlchgBIAEoCzIfLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlciIxChlVbnB1Ymxpc2hXYWxscGFwZXJSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASJQChpVbnB1Ymxpc2hXYWxscGFwZXJSZXNwb25zZRIyCgl3YWxscGFwZXIYASABKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXIiLgoWRGVsZXRlV2FsbHBhcGVyUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQEiGQoXRGVsZXRlV2FsbHBhcGVyUmVzcG9uc2UivQEKFUxpc3RXYWxscGFwZXJzUmVxdWVzdBIaCglwYWdlX3NpemUYASABKAVCB7pIBBoCIAASEgoKcGFnZV90b2tlbhgCIAEoCRIUCgd1c2VyX2lkGAMgASgJSACIAQESEQoEcGFnZRgEIAEoBUgBiAEBEjYKB3NvcnRfYnkYBSABKA4yJS5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXJTb3J0QnlCCgoIX3VzZXJfaWRCBwoFX3BhZ2UiewoWTGlzdFdhbGxwYXBlcnNSZXNwb25zZRIzCgp3YWxscGFwZXJzGAEgAygLMh8uZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoBSJuChdTZWFyY2hXYWxscGFwZXJzUmVxdWVzdBINCgVxdWVyeRgBIAEoCRIMCgR0YWdzGAIgAygJEhoKCXBhZ2Vfc2l6ZRgDIAEoBUIHukgEGgIgABIRCgRwYWdlGAQgASgFSACIAQFCBwoFX3BhZ2UiTwoYU2VhcmNoV2FsbHBhcGVyc1Jlc3BvbnNlEjMKCndhbGxwYXBlcnMYASADKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXIiOQodTGlzdEZlYXR1cmVkV2FsbHBhcGVyc1JlcXVlc3QSGAoFbGltaXQYASABKAVCCbpIBhoEGBQgACJVCh5MaXN0RmVhdHVyZWRXYWxscGFwZXJzUmVzcG9uc2USMwoKd2FsbHBhcGVycxgBIAMoCzIfLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlciJcChxMaXN0UmVsYXRlZFdhbGxwYXBlcnNSZXF1ZXN0Eh4KDHdhbGxwYXBlcl9pZBgBIAEoCUIIukgFcgOwAQESEgoFbGltaXQYAiABKAVIAIgBAUIICgZfbGltaXQiVAodTGlzdFJlbGF0ZWRXYWxscGFwZXJzUmVzcG9uc2USMwoKd2FsbHBhcGVycxgBIAMoCzIfLmZsdXhsYXkud2FsbHBhcGVyLnYxLldhbGxwYXBlciIqCgpIYW5kbGVTbHVnEg4KBmhhbmRsZRgBIAEoCRIMCgRzbHVnGAIgASgJIo8BChNHZXRXYWxscGFwZXJSZXF1ZXN0EgwKAmlkGAEgASgJSAASDgoEc2x1ZxgCIAEoCUgAEjcKC2hhbmRsZV9zbHVnGAMgASgLMiAuZmx1eGxheS53YWxscGFwZXIudjEuSGFuZGxlU2x1Z0gAEhMKC2FjdGl2ZV9vbmx5GAQgASgIQgwKCmlkZW50aWZpZXIiSgoUR2V0V2FsbHBhcGVyUmVzcG9uc2USMgoJd2FsbHBhcGVyGAEgASgLMh8uZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyIm0KFkdldERldmVsb3BlcktleVJlcXVlc3QSFQoEc2FsdBgBIAEoDEIHukgEegJoIBIYChBwcm90b2NvbF92ZXJzaW9uGAIgASgNEiIKEWRldmljZV9wdWJsaWNfa2V5GAMgASgMQge6SAR6AmggInIKF0dldERldmVsb3BlcktleVJlc3BvbnNlEhUKDWRldmVsb3Blcl9rZXkYASABKAwSEgoKZXhwaXJlc19hdBgCIAEoAxIZChFzZXJ2ZXJfcHVibGljX2tleRgDIAEoDBIRCglrZXlfZXBvY2gYBCABKAMiqwEKGFJlZ2lzdGVyV2FsbHBhcGVyUmVxdWVzdBIVCgRzbHVnGAEgASgJQge6SARyAhABEhUKBG5hbWUYAiABKAlCB7pIBHICEAESHAoLY29udGVudF9rZXkYBCABKAxCB7pIBHoCaCASNAoHbmV0d29yaxgFIAMoCzIjLmZsdXhsYXkud2FsbHBhcGVyLnYxLk5ldHdvcmtPcmlnaW5KBAgDEARSB3ZlcnNpb24iawoZUmVnaXN0ZXJXYWxscGFwZXJSZXNwb25zZRIUCgx3YWxscGFwZXJfaWQYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRISCgp1cGxvYWRfdXJsGAMgASgJEhAKCHJldmlzaW9uGAQgASgFIokBChRHZXRDb250ZW50S2V5UmVxdWVzdBIcCgp2ZXJzaW9uX2lkGAEgASgJQgi6SAVyA7ABARIVCgRzYWx0GAIgASgMQge6SAR6AmggEhgKEHByb3RvY29sX3ZlcnNpb24YAyABKA0SIgoRZGV2aWNlX3B1YmxpY19rZXkYBCABKAxCB7pIBHoCaCAibgoVR2V0Q29udGVudEtleVJlc3BvbnNlEhMKC2NvbnRlbnRfa2V5GAEgASgMEhIKCmV4cGlyZXNfYXQYAiABKAMSGQoRc2VydmVyX3B1YmxpY19rZXkYAyABKAwSEQoJa2V5X2Vwb2NoGAQgASgDIloKGFJlZ2lzdGVyRGV2aWNlS2V5UmVxdWVzdBIaCglkZXZpY2VfaWQYASABKAlCB7pIBHICEAESIgoRZGV2aWNlX3B1YmxpY19rZXkYAiABKAxCB7pIBHoCaCAiGwoZUmVnaXN0ZXJEZXZpY2VLZXlSZXNwb25zZSIUChJHZXRLZXlFcG9jaFJlcXVlc3QiKAoTR2V0S2V5RXBvY2hSZXNwb25zZRIRCglrZXlfZXBvY2gYASABKAMiMwoUQ29uZmlybVVwbG9hZFJlcXVlc3QSGwoKdmVyc2lvbl9pZBgBIAEoCUIHukgEcgIQASIXChVDb25maXJtVXBsb2FkUmVzcG9uc2UiMgoTQ2FuY2VsVXBsb2FkUmVxdWVzdBIbCgp2ZXJzaW9uX2lkGAEgASgJQge6SARyAhABIhYKFENhbmNlbFVwbG9hZFJlc3BvbnNlIi4KClByaWNlRW50cnkSEAoIY3VycmVuY3kYASABKAkSDgoGYW1vdW50GAIgASgDImwKGFNldFdhbGxwYXBlclByaWNlUmVxdWVzdBIeCgx3YWxscGFwZXJfaWQYASABKAlCCLpIBXIDsAEBEjAKBnByaWNlcxgCIAMoCzIgLmZsdXhsYXkud2FsbHBhcGVyLnYxLlByaWNlRW50cnkiTwoZU2V0V2FsbHBhcGVyUHJpY2VSZXNwb25zZRIyCgl3YWxscGFwZXIYASABKAsyHy5mbHV4bGF5LndhbGxwYXBlci52MS5XYWxscGFwZXIiPAoaUmVjb3JkV2FsbHBhcGVyVmlld1JlcXVlc3QSHgoMd2FsbHBhcGVyX2lkGAEgASgJQgi6SAVyA7ABASIdChtSZWNvcmRXYWxscGFwZXJWaWV3UmVzcG9uc2UiJQojR2V0Q3JlYXRvclBlcmZvcm1hbmNlU3VtbWFyeVJlcXVlc3QiiAEKJEdldENyZWF0b3JQZXJmb3JtYW5jZVN1bW1hcnlSZXNwb25zZRIRCgl2aWV3c18zMGQYASABKAMSFAoMbGljZW5zZXNfMzBkGAIgASgDEjcKDnRvcF93YWxscGFwZXJzGAMgAygLMh8uZmx1eGxheS53YWxscGFwZXIudjEuV2FsbHBhcGVyKu8BCg9XYWxscGFwZXJTdGF0dXMSIAocV0FMTFBBUEVSX1NUQVRVU19VTlNQRUNJRklFRBAAEh4KGldBTExQQVBFUl9TVEFUVVNfVVBMT0FESU5HEAESGgoWV0FMTFBBUEVSX1NUQVRVU19EUkFGVBACEhsKF1dBTExQQVBFUl9TVEFUVVNfQUNUSVZFEAMSHwobV0FMTFBBUEVSX1NUQVRVU19QVUJMSVNISU5HEAQSIQodV0FMTFBBUEVSX1NUQVRVU19VTkRFUl9SRVZJRVcQBRIdChlXQUxMUEFQRVJfU1RBVFVTX1JFSkVDVEVEEAYqnQEKD1dhbGxwYXBlclNvcnRCeRIhCh1XQUxMUEFQRVJfU09SVF9CWV9VTlNQRUNJRklFRBAAEiAKHFdBTExQQVBFUl9TT1JUX0JZX0NSRUFURURfQVQQARIjCh9XQUxMUEFQRVJfU09SVF9CWV9MSUNFTlNFX0NPVU5UEAISIAocV0FMTFBBUEVSX1NPUlRfQllfVklFV19DT1VOVBADQuUBChhjb20uZmx1eGxheS53YWxscGFwZXIudjFCDldhbGxwYXBlclByb3RvUAFaR2dpdGh1Yi5jb20va2VuMTA5L2ZsdXhsYXktcHJvdG8vZ2VuL2dvL2ZsdXhsYXkvd2FsbHBhcGVyL3YxO3dhbGxwYXBlcnYxogIDRldYqgIURmx1eGxheS5XYWxscGFwZXIuVjHKAhRGbHV4bGF5XFdhbGxwYXBlclxWMeICIEZsdXhsYXlcV2FsbHBhcGVyXFYxXEdQQk1ldGFkYXRh6gIWRmx1eGxheTo6V2FsbHBhcGVyOjpWMWIGcHJvdG8z`,[A,j,g])]),pe=f(M,4),N=f(M,10),P=_(`com.fluxlay.core`,{suffix:``});var F=class e{static filePath=o.join(P.data,`auth.json`);static async saveSession(t){await v.ensureDir(P.data),await v.writeJson(e.filePath,t,{spaces:2}),await v.chmod(e.filePath,384)}static async getSession(){if(!await v.pathExists(e.filePath))return null;try{return await v.readJson(e.filePath)}catch{return null}}static async clearSession(){await v.pathExists(e.filePath)&&await v.remove(e.filePath)}static async getValidSession(){let t=await e.getSession();if(!t)return null;let n=t.access_token.split(`.`)[1];return JSON.parse(Buffer.from(n,`base64`).toString(`utf8`)).exp*1e3<Date.now()?(await e.clearSession(),null):t}};const I=e=>process.env[e]||{FLUXLAY_API_URL:`https://api.fluxlay.com`,FLUXLAY_APP_URL:`https://fluxlay.com`,FLUXLAY_SUPABASE_URL:`https://bfyrfypcnrfqiqtnhksg.supabase.co`,FLUXLAY_SUPABASE_KEY:`sb_publishable_UE64XbixbCKCdNP20YLmqg_S1_Zchd6`}[e],L={API_URL:I(`FLUXLAY_API_URL`),APP_URL:I(`FLUXLAY_APP_URL`),SUPABASE_URL:I(`FLUXLAY_SUPABASE_URL`),SUPABASE_ANON_KEY:I(`FLUXLAY_SUPABASE_KEY`)},R=L.API_URL||`http://localhost:8080`,z=u({baseUrl:R,httpVersion:`1.1`}),B=u({baseUrl:R,httpVersion:`1.1`,interceptors:[e=>async t=>{let n=await F.getValidSession();return n?.access_token&&t.header.set(`Authorization`,`Bearer ${n.access_token}`),e(t)}]}),V=l(pe,z),H=l(N,B),me=new Set([`mp4`,`webm`]),he=new Set([`png`,`jpg`,`jpeg`,`webp`,`gif`]);function U(e){if(e!==`web`&&e!==`video`&&e!==`image`)throw Error(`fluxlay.yaml の kind は "web" / "video" / "image" のいずれかが必須です(実際: ${JSON.stringify(e)})`)}function ge(e,t){let n=o.extname(t).slice(1).toLowerCase();if(e===`video`&&!me.has(n))throw Error(`kind: video には mp4/webm を指定してください(実際: .${n})`);if(e===`image`&&!he.has(n))throw Error(`kind: image には png/jpg/jpeg/webp/gif を指定してください(実際: .${n})`)}function _e(e,t,n){let r=o.extname(n).slice(1).toLowerCase(),i=a.mkdtempSync(o.join(y.tmpdir(),`fluxlay-bundle-`));a.copyFileSync(n,o.join(i,`media.${r}`));let s=[`name: ${t.name}`,`slug: ${t.slug}`,`kind: ${e}`].join(`
5
5
  `);return a.writeFileSync(o.join(i,`fluxlay.yaml`),s+`
6
- `),i}async function U(e,t,n){if(e===`web`)return await ee({root:t,configFile:o.resolve(t,`vite.config.ts`),build:{outDir:`dist`},logLevel:`error`}),{packSrcDir:o.join(t,`dist`),cleanup:()=>{}};if(!n.source)throw Error(`kind: ${e} では fluxlay.yaml に source を指定してください`);let r=o.isAbsolute(n.source)?n.source:o.resolve(t,n.source);if(!a.existsSync(r))throw Error(`メディアファイルが見つかりません: ${r}`);pe(e,r);let i=me(e,n,r);return{packSrcDir:i,cleanup:()=>{a.existsSync(i)&&a.rmSync(i,{recursive:!0,force:!0})}}}const W=_(`com.fluxlay.core`,{suffix:``});var he=class e{static filePath=o.join(W.data,`device.json`);static async loadOrCreate(){if(await v.pathExists(e.filePath))try{let t=await v.readJson(e.filePath);return{deviceId:t.deviceId,privateRaw:Buffer.from(t.privateKey,`base64`),publicRaw:Buffer.from(t.publicKey,`base64`)}}catch{}let{privateKey:t,publicKey:n}=i.generateKeyPairSync(`x25519`),r=t.export({format:`jwk`}),a=n.export({format:`jwk`}),o=Buffer.from(r.d,`base64url`),s=Buffer.from(a.x,`base64url`),c=i.randomUUID();return await v.ensureDir(W.data),await v.writeJson(e.filePath,{deviceId:c,privateKey:o.toString(`base64`),publicKey:s.toString(`base64`)},{spaces:2}),await v.chmod(e.filePath,384),{deviceId:c,privateRaw:o,publicRaw:s}}};function ge(e,t,n){let r=i.hkdfSync(`sha256`,n,t,Buffer.from(`KeyWrapping`),32),a=Buffer.alloc(12),o=Buffer.from(e),s=o.subarray(o.length-16),c=o.subarray(0,o.length-16),l=i.createDecipheriv(`aes-256-gcm`,Buffer.from(r),a,{authTagLength:16});l.setAuthTag(s);let u=Buffer.concat([l.update(c),l.final()]);return new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}var G=class{static async saveDeveloperKey(e){try{return ae(e),!0}catch(e){return console.error(`[KeyStore] Failed to cache developer key: ${String(e)}`),!1}}static async getDeveloperKey(){try{return await ie()||null}catch(e){return console.error(`[KeyStore] Error getting developer key: ${String(e)}`),null}}};const _e=Buffer.from(`FLX2`);Buffer.from(`FLX3`);function ve(e){try{let t=a.openSync(e,`r`);try{let e=Buffer.alloc(4);return a.readSync(t,e,0,4,0)===4?e:null}finally{a.closeSync(t)}}catch{return null}}function ye(e){let t=ve(e);return t!==null&&t.equals(_e)}function be(e){let t;try{t=a.readdirSync(e)}catch{return!1}return t.filter(e=>e.endsWith(`.fluxlay`)).some(t=>ye(o.join(e,t)))}const K=Buffer.from(`fluxlay-ikm-v2`);function xe(){return i.createHash(`sha256`).update(K).digest()}function Se(e,t,n,r,a){let o=i.createPrivateKey({format:`jwk`,key:{kty:`OKP`,crv:`X25519`,d:Buffer.from(e).toString(`base64url`),x:Buffer.from(t).toString(`base64url`)}}),s=i.createPublicKey({format:`jwk`,key:{kty:`OKP`,crv:`X25519`,x:Buffer.from(n).toString(`base64url`)}}),c=i.diffieHellman({privateKey:o,publicKey:s}),l=Buffer.concat([c,Buffer.from(a)]);return Buffer.from(i.hkdfSync(`sha256`,l,r,K,32))}function Ce(e){return Buffer.from(e.replace(/-/g,``),`hex`)}function we(e){let t=e.split(`.`)[1];if(!t)throw Error(`malformed JWT`);let n=JSON.parse(Buffer.from(t,`base64`).toString(`utf8`));if(typeof n.sub!=`string`)throw Error(`JWT missing sub claim`);return n.sub}async function q(e,r){let c=await M.getSession();c||(t.log.error(n.red("You must be logged in to build. Run `fluxlay login`.")),process.exit(1));let l=o.resolve(process.cwd(),e),u=o.join(l,`fluxlay.yaml`);be(l)&&t.log.warn(n.yellow("旧 FLX2 形式の .fluxlay を検出しました。新しい app では再生できないため、`fluxlay rebuild` で FLX3 に作り直してください。")),a.existsSync(u)||(t.log.error(n.red(`fluxlay.yaml is required in the project root.`)),process.exit(1));let d=t.spinner();d.start(n.yellow(`Validating manifest...`));let f;try{let e=a.readFileSync(u,`utf-8`);w(e),f=s.load(e),d.stop(`${n.green(`✔`)} Manifest validated.`)}catch(e){d.stop(n.red(`Manifest validation failed`)),t.log.error(e.message),process.exit(1)}H(f.kind);let p=f.kind,m=o.resolve(l,r.output),h=null;try{d.start(`Preparing ${p} bundle in ${n.cyan(l)}...`);let e=await U(p,l,f);h=e.cleanup,d.stop(`${n.green(`✔`)} ${p===`web`?`Component built`:`${p} bundle prepared`}.`),d.start(n.yellow(`Fetching developer key...`));let r;try{let e=await G.getDeveloperKey();if(e)r=Buffer.from(e).toString(`hex`),d.stop(`${n.green(`✔`)} Using cached developer key.`);else{let e=await he.loadOrCreate();await z.registerDeviceKey({deviceId:e.deviceId,devicePublicKey:e.publicRaw});let a=we(c.access_token),o=i.randomBytes(32),{developerKey:s,serverPublicKey:l}=await z.getDeveloperKey({salt:o,protocolVersion:2,devicePublicKey:e.publicRaw}),u=ge(s,o,Se(e.privateRaw,e.publicRaw,l,xe(),Ce(a)));r=Buffer.from(u).toString(`hex`),d.stop(`${n.green(`✔`)} Developer key fetched from API.`),await G.saveDeveloperKey(u)||t.log.warn(n.yellow(`Could not cache developer key in ${process.platform===`darwin`?`Keychain`:`Credential Manager`}. Build will continue.`))}}catch(e){throw d.stop(n.red(`Failed to fetch developer key`)),t.log.error(`${e.message} (platform: ${process.platform})`),e}d.start(n.yellow(`Packaging with DRM...`)),await T(e.packSrcDir,m,r,0,p),d.stop(`${n.green(`✔`)} Packaging completed.`),t.note(`Output: ${n.underline.cyan(m)}`,`Success!`)}catch(e){throw d.stop(n.red(`Build failed`)),t.log.error(e.message),e}finally{h&&h()}}function Te(){let e=Date.now();return{name:`fluxlay-dev-server`,configureServer(t){t.watcher.on(`change`,()=>{e=Date.now()}),t.middlewares.use(`/version`,(t,n)=>{n.setHeader(`Content-Type`,`application/json`),n.setHeader(`Access-Control-Allow-Origin`,`*`),n.end(JSON.stringify({version:e}))})}}}async function Ee(e){let r=o.resolve(process.cwd(),e),i=o.join(r,`fluxlay.yaml`);a.existsSync(i)||(t.log.error(n.red(`fluxlay.yaml is required in the project root.`)),process.exit(1));try{w(a.readFileSync(i,`utf-8`))}catch(e){t.log.error(`Manifest Validation Error: ${e.message}`),process.exit(1)}let s=await J(3e3),c=t.spinner();c.start(n.yellow(`Starting server on port ${s}...`)),await(await b({root:r,configFile:o.resolve(r,`vite.config.ts`),plugins:[Te()],server:{port:s,strictPort:!0,cors:!0,host:`127.0.0.1`},logLevel:`error`})).listen(),c.stop(`${n.green(`✔`)} Server started on port ${s}.`);let l=`http://127.0.0.1:${s}`;t.log.info(`Wallpaper server running at ${n.underline.cyan(l)}`);let u=_(`com.fluxlay.core`,{suffix:``}).data,d=o.join(u,`dev.json`),f=()=>{if(a.existsSync(d))try{a.unlinkSync(d)}catch{}};a.existsSync(u)||a.mkdirSync(u,{recursive:!0}),a.writeFileSync(d,JSON.stringify({url:l,root:r},null,2)),process.on(`SIGINT`,()=>{f(),process.exit()}),process.on(`SIGTERM`,()=>{f(),process.exit()}),process.on(`exit`,f),t.note(`Root: ${n.gray(r)}\nWatching for changes...`,`Dev Server Active`)}async function J(e){return new Promise((t,n)=>{let r=te.createServer();r.unref(),r.on(`error`,r=>{r.code===`EADDRINUSE`?t(J(e+1)):n(r)}),r.listen(e,()=>{r.close(()=>t(e))})})}async function De(e,t){let n=Date.now()+9e5;for(;Date.now()<n;){await new Promise(e=>setTimeout(e,t*1e3));let n=await R.pollDeviceToken({deviceCode:e});if(n.status===2&&n.session)return n.session;if(n.status===3||n.status===4)return null}return null}const Oe=async()=>{let e=t.spinner();try{let{deviceCode:r,userCode:i,verificationUri:a,interval:o}=await R.createDeviceCode({});t.log.message(`ブラウザで以下を開いてください: ${n.underline.cyan(a)}`),t.log.message(`認証コード: ${n.bold.yellow(i)}`),await ne(`${a}?user_code=${encodeURIComponent(i)}`),e.start(n.yellow(`認証を待っています...`));let s=await De(r,o||5);s||(e.stop(n.red(`認証がタイムアウトまたはキャンセルされました`)),process.exit(1)),await M.saveSession({access_token:s.accessToken,refresh_token:s.refreshToken,token_type:s.tokenType||`bearer`,expires_at:Number(s.expiresAt),expires_in:3600,user:{email:s.email,id:``,aud:``,role:``,email_confirmed_at:``,phone:``,confirmed_at:``,last_sign_in_at:``,app_metadata:{},user_metadata:{},created_at:``,updated_at:``,is_anonymous:!1}}),e.stop(`${n.green(`✔`)} ${n.cyan(s.email)} としてログインしました`)}catch(r){e.stop(n.red(`認証に失敗しました`)),t.log.error(r instanceof Error?r.message:String(r)),process.exit(1)}},ke=async()=>{await M.clearSession(),t.log.success(n.green(`Logged out successfully.`))};async function Y(e){await M.getSession()||(t.log.error(n.red("You must be logged in to publish. Run `fluxlay login`.")),process.exit(1));let r=o.resolve(process.cwd(),e),c=o.join(r,`fluxlay.yaml`);a.existsSync(c)||(t.log.error(n.red(`fluxlay.yaml is required in the project root.`)),process.exit(1));let l=t.spinner();l.start(n.yellow(`Validating manifest...`));let u;try{let e=a.readFileSync(c,`utf-8`);w(e),u=s.load(e),l.stop(`${n.green(`✔`)} Manifest validated: ${n.cyan(u.name)} (v${u.version})`)}catch(e){l.stop(n.red(`Manifest validation failed`)),t.log.error(e.message),process.exit(1)}let d=i.randomBytes(32),f=d.toString(`hex`);l.start(n.yellow(`Registering wallpaper with API...`));let p,m,h;try{let e=await z.registerWallpaper({slug:u.slug,name:u.name,version:u.version,contentKey:d,network:(u.network??[]).map(e=>({origin:e.origin,reason:e.reason}))});p=e.wallpaperId,m=e.versionId,h=e.uploadUrl,l.stop(`${n.green(`✔`)} Wallpaper registered.`)}catch(e){l.stop(n.red(`Registration failed`)),t.log.error(e.message),process.exit(1)}H(u.kind);let g=u.kind,_=o.join(r,`.fluxlay-${m}.tmp`),v=null;try{l.start(n.yellow(g===`web`?`Building component with Vite...`:`Preparing ${g} bundle...`));let e=await U(g,r,u);v=e.cleanup,l.stop(`${n.green(`✔`)} ${g===`web`?`Component built`:`${g} bundle prepared`}.`),l.start(n.yellow(`Packaging with Content Key...`)),await T(e.packSrcDir,_,f,1,g),l.stop(`${n.green(`✔`)} Package created.`),l.start(n.yellow(`Uploading to storage...`));let i=a.readFileSync(_),o=await fetch(h,{method:`PUT`,body:i,headers:{"Content-Type":`application/octet-stream`,"Cache-Control":`public, max-age=31536000, immutable`}});if(!o.ok)throw Error(`Upload failed: ${o.statusText}`);if(l.stop(`${n.green(`✔`)} Upload completed.`),l.start(n.yellow(`Confirming upload with API...`)),await z.confirmUpload({versionId:m}),l.stop(`${n.green(`✔`)} Upload confirmed.`),u.description){l.start(n.yellow(`Updating metadata...`));try{await z.updateWallpaperMetadata({id:p,name:u.name,description:u.description}),l.stop(`${n.green(`✔`)} Metadata updated.`)}catch(e){l.stop(n.yellow(`⚠ メタデータの更新に失敗(壁紙のアップロードは成功)`)),t.log.warn(e.message)}}t.note(`Wallpaper ID: ${n.cyan(m)}`,`Success!`)}catch(e){l.stop(n.red(`Publishing process failed`)),t.log.error(e.message),t.log.warn(n.yellow(`Cancelling upload...`));try{await z.cancelUpload({versionId:m})}catch(e){t.log.error(`Failed to cancel upload: ${e.message}`)}throw e}finally{a.existsSync(_)&&a.unlinkSync(_),v&&v()}}async function Ae(e,r){t.log.info(n.cyan(`Rebuilding preview asset in FLX3 format...`)),await q(e,r)}const je=P.SUPABASE_URL||`https://your-project.supabase.co`,Me=P.SUPABASE_ANON_KEY||`your-anon-key`,Ne=async()=>{let e=await M.getValidSession(),t=x(je,Me,{auth:{persistSession:!1,autoRefreshToken:!1,detectSessionInUrl:!1}});if(e){let{error:n}=await t.auth.setSession({access_token:e.access_token,refresh_token:e.refresh_token});n&&console.error(`[Fluxlay] Error setting session:`,n.message)}return t},Pe=async()=>{let{data:{user:e},error:r}=await(await Ne()).auth.getUser();if(r||!e){r&&t.log.error(`Auth error: ${r.message}`),t.log.warn(`Not logged in.`);return}t.log.info(`Logged in as: ${n.green(e.email??`unknown`)}`)},X=`2.0.0`;let Z=!1;function Fe(){let e=process.env.FLUXLAY_TELEMETRY;if(e&&(e===`0`||e.toLowerCase()===`false`))return!0;let t=process.env.DO_NOT_TRACK;return!!(t&&(t===`1`||t.toLowerCase()===`true`))}function Ie(){Z||Fe()||(S.init({dsn:`https://6889e8a4b3ba33afde93a276b7c288ad@o4511289442566144.ingest.us.sentry.io/4511440417652736`,release:`fluxlay-cli@${X}`,environment:process.env.NODE_ENV??`production`,tracesSampleRate:0,serverName:``}),S.setTags({"cli.version":X,"os.platform":process.platform,"os.release":y.release(),"node.version":process.version}),Z=!0)}async function Le(e,t){Z&&(t?.command&&S.setTag(`cli.command`,t.command),S.captureException(e),await S.flush(2e3).catch(()=>{}))}Ie();async function Q(e,r,i){await Le(e,{command:r}),t.cancel(n.red(`${i}: ${String(e)}`)),process.exit(1)}const $=new r;$.name(`fluxlay`).description(`Fluxlay CLI for building and managing wallpapers`).version(`0.1.0`),$.command(`login`).description(`Login to Supabase`).action(async()=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Oe(),t.outro(n.green(`Login process completed.`))}catch(e){await Q(e,`login`,`Login failed`)}}),$.command(`logout`).description(`Logout from Supabase`).action(async()=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await ke(),t.outro(n.green(`Logged out successfully.`))}catch(e){await Q(e,`logout`,`Logout failed`)}}),$.command(`whoami`).description(`Show current logged in user`).action(async()=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Pe(),t.outro(n.green(`Done.`))}catch(e){await Q(e,`whoami`,`Failed to get user info`)}}),$.command(`build`).description(`Build a Fluxlay wallpaper`).argument(`[dir]`,`Directory to build`,`.`).option(`-o, --output <name>`,`Output filename`,`wallpaper.fluxlay`).action(async(e,r)=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await q(e,r),t.outro(n.green(`Build completed.`))}catch(e){await Q(e,`build`,`Build failed`)}}),$.command(`rebuild`).description(`Rebuild a preview asset in the FLX3 format (re-pack from source)`).argument(`[dir]`,`Directory to rebuild`,`.`).option(`-o, --output <name>`,`Output filename`,`wallpaper.fluxlay`).action(async(e,r)=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Ae(e,r),t.outro(n.green(`Rebuild completed.`))}catch(e){await Q(e,`rebuild`,`Rebuild failed`)}}),$.command(`publish`).description(`Publish a Fluxlay wallpaper to the store`).argument(`[dir]`,`Directory to publish`,`.`).action(async e=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Y(e),t.outro(n.green(`Published successfully.`))}catch(e){await Q(e,`publish`,`Publish failed`)}}),$.command(`dev`).description(`Start development server for a Fluxlay wallpaper`).argument(`[dir]`,`Directory to watch`,`.`).action(async e=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Ee(e)}catch(e){await Q(e,`dev`,`Dev server failed`)}}),$.parse();export{};
6
+ `),i}async function W(e,t,n){if(e===`web`)return await ee({root:t,configFile:o.resolve(t,`vite.config.ts`),build:{outDir:`dist`},logLevel:`error`}),{packSrcDir:o.join(t,`dist`),cleanup:()=>{}};if(!n.source)throw Error(`kind: ${e} では fluxlay.yaml に source を指定してください`);let r=o.isAbsolute(n.source)?n.source:o.resolve(t,n.source);if(!a.existsSync(r))throw Error(`メディアファイルが見つかりません: ${r}`);ge(e,r);let i=_e(e,n,r);return{packSrcDir:i,cleanup:()=>{a.existsSync(i)&&a.rmSync(i,{recursive:!0,force:!0})}}}const G=_(`com.fluxlay.core`,{suffix:``});var ve=class e{static filePath=o.join(G.data,`device.json`);static async loadOrCreate(){if(await v.pathExists(e.filePath))try{let t=await v.readJson(e.filePath);return{deviceId:t.deviceId,privateRaw:Buffer.from(t.privateKey,`base64`),publicRaw:Buffer.from(t.publicKey,`base64`)}}catch{}let{privateKey:t,publicKey:n}=i.generateKeyPairSync(`x25519`),r=t.export({format:`jwk`}),a=n.export({format:`jwk`}),o=Buffer.from(r.d,`base64url`),s=Buffer.from(a.x,`base64url`),c=i.randomUUID();return await v.ensureDir(G.data),await v.writeJson(e.filePath,{deviceId:c,privateKey:o.toString(`base64`),publicKey:s.toString(`base64`)},{spaces:2}),await v.chmod(e.filePath,384),{deviceId:c,privateRaw:o,publicRaw:s}}};function ye(e,t,n){let r=i.hkdfSync(`sha256`,n,t,Buffer.from(`KeyWrapping`),32),a=Buffer.alloc(12),o=Buffer.from(e),s=o.subarray(o.length-16),c=o.subarray(0,o.length-16),l=i.createDecipheriv(`aes-256-gcm`,Buffer.from(r),a,{authTagLength:16});l.setAuthTag(s);let u=Buffer.concat([l.update(c),l.final()]);return new Uint8Array(u.buffer,u.byteOffset,u.byteLength)}var K=class{static async saveDeveloperKey(e){try{return re(e),!0}catch(e){return console.error(`[KeyStore] Failed to cache developer key: ${String(e)}`),!1}}static async getDeveloperKey(){try{return await ne()||null}catch(e){return console.error(`[KeyStore] Error getting developer key: ${String(e)}`),null}}};const be=Buffer.from(`FLX2`);Buffer.from(`FLX3`);function xe(e){try{let t=a.openSync(e,`r`);try{let e=Buffer.alloc(4);return a.readSync(t,e,0,4,0)===4?e:null}finally{a.closeSync(t)}}catch{return null}}function Se(e){let t=xe(e);return t!==null&&t.equals(be)}function Ce(e){let t;try{t=a.readdirSync(e)}catch{return!1}return t.filter(e=>e.endsWith(`.fluxlay`)).some(t=>Se(o.join(e,t)))}const q=Buffer.from(`fluxlay-ikm-v2`);function we(){return i.createHash(`sha256`).update(q).digest()}function Te(e,t,n,r,a){let o=i.createPrivateKey({format:`jwk`,key:{kty:`OKP`,crv:`X25519`,d:Buffer.from(e).toString(`base64url`),x:Buffer.from(t).toString(`base64url`)}}),s=i.createPublicKey({format:`jwk`,key:{kty:`OKP`,crv:`X25519`,x:Buffer.from(n).toString(`base64url`)}}),c=i.diffieHellman({privateKey:o,publicKey:s}),l=Buffer.concat([c,Buffer.from(a)]);return Buffer.from(i.hkdfSync(`sha256`,l,r,q,32))}function Ee(e){return Buffer.from(e.replace(/-/g,``),`hex`)}function De(e){let t=e.split(`.`)[1];if(!t)throw Error(`malformed JWT`);let n=JSON.parse(Buffer.from(t,`base64`).toString(`utf8`));if(typeof n.sub!=`string`)throw Error(`JWT missing sub claim`);return n.sub}async function J(e,r){let c=await F.getSession();c||(t.log.error(n.red("You must be logged in to build. Run `fluxlay login`.")),process.exit(1));let l=o.resolve(process.cwd(),e),u=o.join(l,`fluxlay.yaml`);Ce(l)&&t.log.warn(n.yellow("旧 FLX2 形式の .fluxlay を検出しました。新しい app では再生できないため、`fluxlay rebuild` で FLX3 に作り直してください。")),a.existsSync(u)||(t.log.error(n.red(`fluxlay.yaml is required in the project root.`)),process.exit(1));let d=t.spinner();d.start(n.yellow(`Validating manifest...`));let f;try{let e=a.readFileSync(u,`utf-8`);E(e),f=s.load(e),d.stop(`${n.green(`✔`)} Manifest validated.`)}catch(e){d.stop(n.red(`Manifest validation failed`)),t.log.error(e.message),process.exit(1)}U(f.kind);let p=f.kind,m=o.resolve(l,r.output),h=null;try{d.start(`Preparing ${p} bundle in ${n.cyan(l)}...`);let e=await W(p,l,f);h=e.cleanup,d.stop(`${n.green(`✔`)} ${p===`web`?`Component built`:`${p} bundle prepared`}.`),d.start(n.yellow(`Fetching developer key...`));let r;try{let e=await K.getDeveloperKey();if(e)r=Buffer.from(e).toString(`hex`),d.stop(`${n.green(`✔`)} Using cached developer key.`);else{let e=await ve.loadOrCreate();await H.registerDeviceKey({deviceId:e.deviceId,devicePublicKey:e.publicRaw});let a=De(c.access_token),o=i.randomBytes(32),{developerKey:s,serverPublicKey:l}=await H.getDeveloperKey({salt:o,protocolVersion:2,devicePublicKey:e.publicRaw}),u=ye(s,o,Te(e.privateRaw,e.publicRaw,l,we(),Ee(a)));r=Buffer.from(u).toString(`hex`),d.stop(`${n.green(`✔`)} Developer key fetched from API.`),await K.saveDeveloperKey(u)||t.log.warn(n.yellow(`Could not cache developer key in ${process.platform===`darwin`?`Keychain`:`Credential Manager`}. Build will continue.`))}}catch(e){throw d.stop(n.red(`Failed to fetch developer key`)),t.log.error(`${e.message} (platform: ${process.platform})`),e}d.start(n.yellow(`Packaging with DRM...`)),await D(e.packSrcDir,m,r,0,p),d.stop(`${n.green(`✔`)} Packaging completed.`),t.note(`Output: ${n.underline.cyan(m)}`,`Success!`)}catch(e){throw d.stop(n.red(`Build failed`)),t.log.error(e.message),e}finally{h&&h()}}function Oe(){let e=Date.now();return{name:`fluxlay-dev-server`,configureServer(t){t.watcher.on(`change`,()=>{e=Date.now()}),t.middlewares.use(`/version`,(t,n)=>{n.setHeader(`Content-Type`,`application/json`),n.setHeader(`Access-Control-Allow-Origin`,`*`),n.end(JSON.stringify({version:e}))})}}}async function ke(e){let r=o.resolve(process.cwd(),e),i=o.join(r,`fluxlay.yaml`);a.existsSync(i)||(t.log.error(n.red(`fluxlay.yaml is required in the project root.`)),process.exit(1));try{E(a.readFileSync(i,`utf-8`))}catch(e){t.log.error(`Manifest Validation Error: ${e.message}`),process.exit(1)}let s=await Y(3e3),c=t.spinner();c.start(n.yellow(`Starting server on port ${s}...`)),await(await te({root:r,configFile:o.resolve(r,`vite.config.ts`),plugins:[Oe()],server:{port:s,strictPort:!0,cors:!0,host:`127.0.0.1`},logLevel:`error`})).listen(),c.stop(`${n.green(`✔`)} Server started on port ${s}.`);let l=`http://127.0.0.1:${s}`;t.log.info(`Wallpaper server running at ${n.underline.cyan(l)}`);let u=_(`com.fluxlay.core`,{suffix:``}).data,d=o.join(u,`dev.json`),f=()=>{if(a.existsSync(d))try{a.unlinkSync(d)}catch{}};a.existsSync(u)||a.mkdirSync(u,{recursive:!0}),a.writeFileSync(d,JSON.stringify({url:l,root:r},null,2)),process.on(`SIGINT`,()=>{f(),process.exit()}),process.on(`SIGTERM`,()=>{f(),process.exit()}),process.on(`exit`,f),t.note(`Root: ${n.gray(r)}\nWatching for changes...`,`Dev Server Active`)}async function Y(e){return new Promise((t,n)=>{let r=b.createServer();r.unref(),r.on(`error`,r=>{r.code===`EADDRINUSE`?t(Y(e+1)):n(r)}),r.listen(e,()=>{r.close(()=>t(e))})})}async function Ae(e,t){let n=Date.now()+9e5;for(;Date.now()<n;){await new Promise(e=>setTimeout(e,t*1e3));let n=await V.pollDeviceToken({deviceCode:e});if(n.status===2&&n.session)return n.session;if(n.status===3||n.status===4)return null}return null}const je=async()=>{let e=t.spinner();try{let{deviceCode:r,userCode:i,verificationUri:a,interval:o}=await V.createDeviceCode({client:`cli`});t.log.message(`ブラウザで以下を開いてください: ${n.underline.cyan(a)}`),t.log.message(`認証コード: ${n.bold.yellow(i)}`),await x(`${a}?user_code=${encodeURIComponent(i)}`),e.start(n.yellow(`認証を待っています...`));let s=await Ae(r,o||5);s||(e.stop(n.red(`認証がタイムアウトまたはキャンセルされました`)),process.exit(1)),await F.saveSession({access_token:s.accessToken,refresh_token:s.refreshToken,token_type:s.tokenType||`bearer`,expires_at:Number(s.expiresAt),expires_in:3600,user:{email:s.email,id:``,aud:``,role:``,email_confirmed_at:``,phone:``,confirmed_at:``,last_sign_in_at:``,app_metadata:{},user_metadata:{},created_at:``,updated_at:``,is_anonymous:!1}}),e.stop(`${n.green(`✔`)} ${n.cyan(s.email)} としてログインしました`)}catch(r){e.stop(n.red(`認証に失敗しました`)),t.log.error(r instanceof Error?r.message:String(r)),process.exit(1)}},Me=async()=>{await F.clearSession(),t.log.success(n.green(`Logged out successfully.`))};async function Ne(e){await F.getSession()||(t.log.error(n.red("You must be logged in to publish. Run `fluxlay login`.")),process.exit(1));let r=o.resolve(process.cwd(),e),c=o.join(r,`fluxlay.yaml`);a.existsSync(c)||(t.log.error(n.red(`fluxlay.yaml is required in the project root.`)),process.exit(1));let l=t.spinner();l.start(n.yellow(`Validating manifest...`));let u;try{let e=a.readFileSync(c,`utf-8`);E(e),u=s.load(e),l.stop(`${n.green(`✔`)} Manifest validated: ${n.cyan(u.name)}`)}catch(e){l.stop(n.red(`Manifest validation failed`)),t.log.error(e.message),process.exit(1)}let d=i.randomBytes(32),f=d.toString(`hex`);l.start(n.yellow(`Registering wallpaper with API...`));let p,m,h;try{let e=await H.registerWallpaper({slug:u.slug,name:u.name,contentKey:d,network:(u.network??[]).map(e=>({origin:e.origin,reason:e.reason}))});p=e.wallpaperId,m=e.versionId,h=e.uploadUrl,l.stop(`${n.green(`✔`)} Wallpaper registered.`)}catch(e){l.stop(n.red(`Registration failed`)),t.log.error(e.message),process.exit(1)}U(u.kind);let g=u.kind,_=o.join(r,`.fluxlay-${m}.tmp`),v=null;try{l.start(n.yellow(g===`web`?`Building component with Vite...`:`Preparing ${g} bundle...`));let e=await W(g,r,u);v=e.cleanup,l.stop(`${n.green(`✔`)} ${g===`web`?`Component built`:`${g} bundle prepared`}.`),l.start(n.yellow(`Packaging with Content Key...`)),await D(e.packSrcDir,_,f,1,g),l.stop(`${n.green(`✔`)} Package created.`),l.start(n.yellow(`Uploading to storage...`));let i=a.readFileSync(_),o=await fetch(h,{method:`PUT`,body:i,headers:{"Content-Type":`application/octet-stream`,"Cache-Control":`public, max-age=31536000, immutable`}});if(!o.ok)throw Error(`Upload failed: ${o.statusText}`);if(l.stop(`${n.green(`✔`)} Upload completed.`),l.start(n.yellow(`Confirming upload with API...`)),await H.confirmUpload({versionId:m}),l.stop(`${n.green(`✔`)} Upload confirmed.`),u.description){l.start(n.yellow(`Updating metadata...`));try{await H.updateWallpaperMetadata({id:p,name:u.name,description:u.description}),l.stop(`${n.green(`✔`)} Metadata updated.`)}catch(e){l.stop(n.yellow(`⚠ メタデータの更新に失敗(壁紙のアップロードは成功)`)),t.log.warn(e.message)}}t.note(`Wallpaper ID: ${n.cyan(m)}`,`Success!`)}catch(e){l.stop(n.red(`Publishing process failed`)),t.log.error(e.message),t.log.warn(n.yellow(`Cancelling upload...`));try{await H.cancelUpload({versionId:m})}catch(e){t.log.error(`Failed to cancel upload: ${e.message}`)}throw e}finally{a.existsSync(_)&&a.unlinkSync(_),v&&v()}}async function Pe(e,r){t.log.info(n.cyan(`Rebuilding preview asset in FLX3 format...`)),await J(e,r)}const Fe=L.SUPABASE_URL||`https://your-project.supabase.co`,Ie=L.SUPABASE_ANON_KEY||`your-anon-key`,Le=async()=>{let e=await F.getValidSession(),t=S(Fe,Ie,{auth:{persistSession:!1,autoRefreshToken:!1,detectSessionInUrl:!1}});if(e){let{error:n}=await t.auth.setSession({access_token:e.access_token,refresh_token:e.refresh_token});n&&console.error(`[Fluxlay] Error setting session:`,n.message)}return t},Re=async()=>{let{data:{user:e},error:r}=await(await Le()).auth.getUser();if(r||!e){r&&t.log.error(`Auth error: ${r.message}`),t.log.warn(`Not logged in.`);return}t.log.info(`Logged in as: ${n.green(e.email??`unknown`)}`)},X=`2.1.0`;let Z=!1;function ze(){let e=process.env.FLUXLAY_TELEMETRY;if(e&&(e===`0`||e.toLowerCase()===`false`))return!0;let t=process.env.DO_NOT_TRACK;return!!(t&&(t===`1`||t.toLowerCase()===`true`))}function Be(){Z||ze()||(C.init({dsn:`https://6889e8a4b3ba33afde93a276b7c288ad@o4511289442566144.ingest.us.sentry.io/4511440417652736`,release:`fluxlay-cli@${X}`,environment:process.env.NODE_ENV??`production`,tracesSampleRate:0,serverName:``}),C.setTags({"cli.version":X,"os.platform":process.platform,"os.release":y.release(),"node.version":process.version}),Z=!0)}async function Ve(e,t){Z&&(t?.command&&C.setTag(`cli.command`,t.command),C.captureException(e),await C.flush(2e3).catch(()=>{}))}Be();async function Q(e,r,i){await Ve(e,{command:r}),t.cancel(n.red(`${i}: ${String(e)}`)),process.exit(1)}const $=new r;$.name(`fluxlay`).description(`Fluxlay CLI for building and managing wallpapers`).version(`0.1.0`),$.command(`login`).description(`Login to Supabase`).action(async()=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await je(),t.outro(n.green(`Login process completed.`))}catch(e){await Q(e,`login`,`Login failed`)}}),$.command(`logout`).description(`Logout from Supabase`).action(async()=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Me(),t.outro(n.green(`Logged out successfully.`))}catch(e){await Q(e,`logout`,`Logout failed`)}}),$.command(`whoami`).description(`Show current logged in user`).action(async()=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Re(),t.outro(n.green(`Done.`))}catch(e){await Q(e,`whoami`,`Failed to get user info`)}}),$.command(`build`).description(`Build a Fluxlay wallpaper`).argument(`[dir]`,`Directory to build`,`.`).option(`-o, --output <name>`,`Output filename`,`wallpaper.fluxlay`).action(async(e,r)=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await J(e,r),t.outro(n.green(`Build completed.`))}catch(e){await Q(e,`build`,`Build failed`)}}),$.command(`rebuild`).description(`Rebuild a preview asset in the FLX3 format (re-pack from source)`).argument(`[dir]`,`Directory to rebuild`,`.`).option(`-o, --output <name>`,`Output filename`,`wallpaper.fluxlay`).action(async(e,r)=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Pe(e,r),t.outro(n.green(`Rebuild completed.`))}catch(e){await Q(e,`rebuild`,`Rebuild failed`)}}),$.command(`publish`).description(`Publish a Fluxlay wallpaper to the store`).argument(`[dir]`,`Directory to publish`,`.`).action(async e=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await Ne(e),t.outro(n.green(`Published successfully.`))}catch(e){await Q(e,`publish`,`Publish failed`)}}),$.command(`dev`).description(`Start development server for a Fluxlay wallpaper`).argument(`[dir]`,`Directory to watch`,`.`).action(async e=>{t.intro(n.bgCyan.black.bold(` Fluxlay CLI `));try{await ke(e)}catch(e){await Q(e,`dev`,`Dev server failed`)}}),$.parse();export{};
7
7
  //# sourceMappingURL=index.mjs.map
8
- //# debugId=f7101b13-4293-5c29-a48b-09e989865b9b
8
+ //# debugId=16bb9cc5-45ac-5bb6-89ae-0f2d85b72fa0