# adi_detritus v0.7 # Sweep up the rubbish # Adi Gilbert # http://www.greatoceanmedia.com.au/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMjp7czo0OiJuYW1lIjtzOjEyOiJhZGlfZGV0cml0dXMiO3M6NzoidmVyc2lvbiI7czoz OiIwLjciO3M6NjoiYXV0aG9yIjtzOjExOiJBZGkgR2lsYmVydCI7czoxMDoiYXV0aG9yX3Vy aSI7czozNDoiaHR0cDovL3d3dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1LyI7czoxMToiZGVz Y3JpcHRpb24iO3M6MjA6IlN3ZWVwIHVwIHRoZSBydWJiaXNoIjtzOjQ6InR5cGUiO2k6Mztz OjU6ImZsYWdzIjtpOjM7czo4OiJ0ZXh0cGFjayI7czozMTE1OiIjQG93bmVyIGdvbWVkaWEK I0BsYW5ndWFnZSBlbiwgZW4tZ2IsIGVuLXVzCiNAYWRtaW4tc2lkZQphZGlfYWRtaW5fcHJp dnMgPT4gQWRtaW4gcHJpdmlsZWdlczoKYWRpX2NhY2hlZCA9PiBDYWNoZWQKYWRpX2RldHJp dHVzX2FkbWluID0+IERldHJpdHVzCmFkaV9kZXRyaXR1c19leHRyYV9kaXJzID0+IEFkZGl0 aW9uYWwgZGlyZWN0b3JpZXMKYWRpX2RldHJpdHVzX2ZpbGVfc2l6ZSA9PiBGaWxlIHNpemUg d2FybmluZyB0aHJlc2hvbGQKYWRpX2RldHJpdHVzX2lnbm9yZV9maWxlX2l0ZW1zID0+IEln bm9yZSBmaWxlc3lzdGVtIGl0ZW1zCmFkaV9kZXRyaXR1c19pZ25vcmVfcGx1Z2lucyA9PiBJ Z25vcmUgcGx1Z2lucwphZGlfZGV0cml0dXNfaW1hZ2Vfc2l6ZSA9PiBJbWFnZSBzaXplIHdh cm5pbmcgdGhyZXNob2xkCmFkaV9kZXRyaXR1c19ub3RfZGlyID0+IE5vdCBhIGRpcmVjdG9y eQphZGlfZGV0cml0dXNfcG9zc19yZWR1bmRhbnQgPT4gUG9zc2libHkgcmVkdW5kYW50CmFk aV9kZXRyaXR1c19zdHlsZV9kaXJzID0+IFN0eWxlIGRpcmVjdG9yaWVzCmFkaV9kZXRyaXR1 c191bmxrZF9maWxlX2V4Y24gPT4gSWdub3JlIG5vbi1saW5rZWQgZmlsZXMKYWRpX2RldHJp dHVzX3VubGtkX2ZpbGVfdGhyZXNob2xkID0+IE5vbi1saW5rZWQgZmlsZSBjb3VudCB3YXJu aW5nIHRocmVzaG9sZAphZGlfZGV0cml0dXNfdW5sa2RfaW1nX2V4Y24gPT4gSWdub3JlIG5v bi1saW5rZWQgaW1hZ2VzCmFkaV9kZXRyaXR1c191bnVzdWFsX2NzcyA9PiBVbnVzdWFsIENT UyBmaWxlIHR5cGUKYWRpX2RpcmVjdG9yaWVzID0+IERpcmVjdG9yaWVzCmFkaV9lbXB0eSA9 PiBFbXB0eQphZGlfZXZlbnQgPT4gRXZlbnQKYWRpX2ZpbGVzX2ZvdW5kID0+IHtudW1iZXJ9 IGZpbGVzIGZvdW5kCmFkaV9maWxlc3lzdGVtID0+IEZpbGVzeXN0ZW0KYWRpX2dpdF9pdGVt ID0+IEdpdCBpdGVtCmFkaV9odG1sX2ZpbGUgPT4gSFRNTCBmaWxlCmFkaV9pbnN0YWxsX2Zh aWwgPT4gVW5hYmxlIHRvIGluc3RhbGwKYWRpX2luc3RhbGxlZCA9PiBJbnN0YWxsZWQKYWRp X2pzb25fZmlsZSA9PiBKU09OIGZpbGUKYWRpX2xhcmdlX2ZpbGUgPT4gTGFyZ2UgZmlsZQph ZGlfbGFyZ2VfaW1hZ2VfZmlsZSA9PiBMYXJnZSBpbWFnZSBmaWxlCmFkaV9sb2dmaWxlID0+ IExvZ2ZpbGUKYWRpX21hY29zX2ZpbGUgPT4gTWFjT1MgZmlsZQphZGlfbm9fd2FybmluZ3Mg PT4gTm8gd2FybmluZ3MKYWRpX25vbl9kYXRhYmFzZV9pbWFnZSA9PiBOb24tVFhQIGltYWdl IGZpbGVuYW1lCmFkaV9ub3RfYWN0aXZlID0+IE5vdCBhY3RpdmUKYWRpX25vdF9pbWFnZV9m aWxlID0+IE5vdCBhbiBpbWFnZSBmaWxlCmFkaV9ub3RfaW5zdGFsbGVkID0+IE5vdCBpbnN0 YWxsZWQKYWRpX25vdF9saW5rZWRfZGIgPT4gTm90IGxpbmtlZCB0byBkYXRhYmFzZQphZGlf bm90X3BsYWludGV4dCA9PiBOb3QgYSBwbGFpbiB0ZXh0IGZpbGUKYWRpX25vdF9yZWFkYWJs ZSA9PiBOb3QgcmVhZGFibGUKYWRpX25vdF9yZWNvZ25pc2VkID0+IE5vdCByZWNvZ25pc2Vk CmFkaV9ub3RfcmVmZXJlbmNlZCA9PiBOb3QgcmVmZXJlbmNlZAphZGlfbm90X3JlcXVpcmVk X2J5X2NvbmZpZyA9PiBOb3QgcmVxdWlyZWQgYnkgY29uZmlndXJhdGlvbgphZGlfbm90X3Vz ZWQgPT4gTm90IHVzZWQKYWRpX25vdF93cml0YWJsZSA9PiBOb3Qgd3JpdGFibGUKYWRpX25v dF94bWwgPT4gTm90IGFuIFhNTCBmaWxlCmFkaV9ub3RlcyA9PiBOb3RlcwphZGlfb2xkXzQ1 X2xpY2VuY2UgPT4gT2xkIFRYUCA0LjUgbGljZW5jZSBmaWxlCmFkaV9vbGRfNDVfc2NyaXB0 X2ZvbGRlciA9PiBPbGQgVFhQIDQuNSBzY3JpcHQgZm9sZGVyCmFkaV9vbGRfNDVfd2Fybmlu ZyA9PiBPbGQgVFhQIDQuNSB3YXJuaW5nIGZpbGUKYWRpX29sZF80Nl9saWNlbmNlID0+IE9s ZCBUWFAgNC42IGxpY2VuY2UgZmlsZQphZGlfb2xkX3ByZTQ2X2RpcmVjdG9yeSA9PiBPbGQg cHJlLVRYUCA0LjYgZGlyZWN0b3J5CmFkaV9vbGRfcHJlNDZfc2NyaXB0X2ZpbGUgPT4gT2xk IHByZS1UWFAgNC42IHNjcmlwdCBmaWxlCmFkaV9waHBfY29uZmlnX2ZpbGUgPT4gUEhQIGNv bmZpZ3VyYXRpb24gZmlsZQphZGlfcGhwX2Vycm9yX2xvZ2ZpbGUgPT4gUEhQIGVycm9yIGxv ZwphZGlfcGhwX2ZpbGUgPT4gUEhQIGZpbGUKYWRpX3BsdWdpbl9jb2RlX21pc21hdGNoID0+ IENvZGUgbWlzbWF0Y2gKYWRpX3BsdWdpbl9maWxlc19mb3VuZCA9PiBVbnVzZWQgcGx1Z2lu IGZpbGVzIGZvdW5kCmFkaV9wbHVnaW5fb3JkZXJfbWlzbWF0Y2ggPT4gT3JkZXIgbW9kaWZp ZWQKYWRpX3BsdWdpbl9wcml2cyA9PiBQbHVnaW4gcHJpdmlsZWdlczoKYWRpX3BsdWdpbl90 YWdzX3VucmVnaXN0ZXJlZCA9PiBObyByZWdpc3RlcmVkIHRhZ3MKYWRpX3BsdWdpbl90eXBl X21pc21hdGNoID0+IFR5cGUgbW9kaWZpZWQKYWRpX3JlbW92ZV9hZnRlcl9jb25maWcgPT4g UmVtb3ZlIGFmdGVyIGluc3RhbGxhdGlvbgphZGlfc2l0ZV9wYXRoID0+IFdlYnNpdGUgcm9v dCBwYXRoCmFkaV9zdWJ2ZXJzaW9uX2l0ZW0gPT4gU3VidmVyc2lvbiBpdGVtCmFkaV9zd2Zf ZmlsZSA9PiBTV0YgZmlsZQphZGlfdGV4dF9maWxlID0+IFRleHQgZmlsZQphZGlfdGV4dGls ZV9maWxlID0+IFRleHRpbGUgZmlsZQphZGlfdGV4dHBhY2tfZmFpbCA9PiBUZXh0cGFjayBp bnN0YWxsYXRpb24gZmFpbGVkCmFkaV90ZXh0cGFja19mZWVkYmFjayA9PiBUZXh0cGFjayBm ZWVkYmFjawphZGlfdGV4dHBhY2tfb25saW5lID0+IFRleHRwYWNrIGFsc28gYXZhaWxhYmxl IG9ubGluZQphZGlfdW5pbnN0YWxsID0+IFVuaW5zdGFsbAphZGlfdW5pbnN0YWxsX2ZhaWwg PT4gVW5hYmxlIHRvIHVuaW5zdGFsbAphZGlfdW5pbnN0YWxsZWQgPT4gVW5pbnN0YWxsZWQK YWRpX3Vuc3VwcG9ydGVkX2ltYWdlX3R5cGUgPT4gVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZQph ZGlfdXBkYXRlX3ByZWZzID0+IFVwZGF0ZSBwcmVmZXJlbmNlcwphZGlfdXBncmFkZV9mYWls ID0+IFVuYWJsZSB0byB1cGdyYWRlCmFkaV91cGdyYWRlX3JlcXVpcmVkID0+IFVwZ3JhZGUg cmVxdWlyZWQKYWRpX3VwZ3JhZGVkID0+IFVwZ3JhZGVkCmFkaV93YXJuaW5nc19mb3VuZCA9 PiB7bnVtYmVyfSB3YXJuaW5nKHMpIjtzOjQ6ImhlbHAiO3M6MTAyMTU6ImgxLiAqYWRpX2Rl dHJpdHVzKiAtIFN3ZWVwIHVwIHRoZSBydWJiaXNoCgpBZnRlciB5ZWFycyBvZiBkZXZlbG9w bWVudCwgbXVsdGlwbGUgZW5oYW5jZW1lbnRzLCBhIHN1Y2Nlc3Npb24gb2YgVGV4dHBhdHRl cm4gdXBncmFkZXMsIGVuZGxlc3MgZmlkZGxpbmcgLi4uIHdlYnNpdGUgaW5zdGFsbGF0aW9u cyBjYW4gZ2V0IGEgYml0IHVudGlkeS4gIFRoaXMgaXMgd2hlcmUgKmFkaV9kZXRyaXR1cyog Y29tZXMgaW4uIEl0J2xsIHNjb3VyIHlvdXIgd2Vic2l0ZSdzIGZpbGVzeXN0ZW0gYW5kIHBs dWdpbnMgZm9yIGl0ZW1zIHRoYXQgYXJlIHJlZHVuZGFudCwgc3VwZXJmbHVvdXMgb3IgZXZl biBhYnNlbnQuCgpIb3dldmVyLCBfbm8gY2hhbmdlcyBhcmUgbWFkZV8uICBJdCdzIHVwIHRv IHRoZSB3ZWJzaXRlIGFkbWluaXN0cmF0b3IgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0 aGUgaW5mb3JtYXRpb24gcHJlc2VudGVkLgoKaDIuICpVc2FnZSoKCkFmdGVyIGluc3RhbGxp bmcgJiBhY3RpdmF0aW5nIHRoZSBwbHVnaW4geW91J2xsIHNlZSBhIG5ldyBpdGVtIHVuZGVy IF9fQWRtaW5fXy4KClRoZSBEZXRyaXR1cyB0YWIgbGlzdHMgYSBudW1iZXIgb2Ygd2Fybmlu Z3MgcmVsYXRlZCB0byB0aGUgd2Vic2l0ZSdzIGZpbGVzeXN0ZW0sIHBsdWdpbnMgYW5kIHBy ZWZlcmVuY2VzLgoKaDIuICpXYXJuaW5ncyoKCkluIHNvbWUgY2FzZXMgdGhleSBtYXkgYmUg c2lnbmlmaWNhbnQsIGZvciBleGFtcGxlIGEgbWlzc2luZyBfXy5odGFjY2Vzc19fIGZpbGUu CgpJbiBvdGhlciBjYXNlcywgeW91IG1heSB2aWV3IHRoZW0gYXMgaW5jb25zZXF1ZW50aWFs IGJ1dCB1bnRpZHksIGUuZy4gYW4gb2xkIFJFQURNRSBvciBsaWNlbmNlIGZpbGUgbGVmdCBi ZWhpbmQgZnJvbSBhIHByZXZpb3VzIFRYUCB2ZXJzaW9uLgoKWW91IG1heSBldmVuIGNvbnNp ZGVyIHRoZW0gaXJyZWxldmFudCwgZS5nLiBhbiBlbXB0eSBkaXJlY3RvcnkuCgpUaGVyZSB3 aWxsIHVuZG91YnRlZGx5IGJlIHNvbWUgZmFsc2UgcG9zaXRpdmVzLCBzbyBiZSBwcmVwYXJl ZCB0byB1c2UgYSBwaW5jaCBvZiBzYWx0LiBZb3UncmUgdGhlIGJvc3MhCgpoMi4gKkZpbmUg dHVuZSB0aGUgcmVzdWx0cyoKCllvdSBjYW4gZWR1Y2F0ZSAqYWRpX2RldHJpdHVzKiBieSBz ZXR0aW5nIHNvbWUgcHJlZmVyZW5jZXMuCgoqICpJZ25vcmUgbm9uLWxpbmtlZCBmaWxlcyog LSB0aGUgRmlsZXMgZGlyZWN0b3J5IGlzIG9mdGVuIHVzZWQgZm9yIGl0ZW1zIG90aGVyIHRo YW4gdGhvc2UgbGlua2VkIHRvIHRoZSBkYXRhYmFzZSwgc3BlY2lmeSBhIGxpc3Qgb2YgZmls ZXMgdG8gaWdub3JlIChkZWZhdWx0ID0gKi5zcWwgKi5zcWwuZ3opCiogKklnbm9yZSBub24t bGlua2VkIGltYWdlcyogLSB5b3VyIEltYWdlcyBkaXJlY3RvcnkgbWF5IGNvbnRhaW4gaW1h Z2VzIG90aGVyIHRoYW4gdGhvc2UgbGlua2VkIHRvIHRoZSBkYXRhYmFzZSwgc3BlY2lmeSBh IGxpc3Qgb2YgZmlsZXMgdG8gaWdub3JlIChkZWZhdWx0ID0gKi5zdmcpCiogKklnbm9yZSBm aWxlc3lzdGVtIGl0ZW1zKiAtIGxpc3Qgb2Ygc3BlY2lmaWMgZGlyZWN0b3JpZXMgb3IgZmls ZXMgdG8gaWdub3JlIChkZWZhdWx0ID0gKi8uaHRhY2Nlc3MtZGlzdCkKKiAqU3R5bGUgZGly ZWN0b3JpZXMqIC0gbGlzdCB5b3VyIHN0eWxlIGRpcmVjdG9yaWVzIHNvIHRoYXQgKmFkaV9k ZXRyaXR1cyoga25vd3MgdGhleSBzaG91bGQgZXhpc3QgYW5kIGNhbiBjaGVjayB0aGVtIGZv ciBhbm9tYWxpZXMgKGRlZmF1bHQgPSBubyBzdHlsZSBkaXJlY3RvcmllcykKKiAqQWRkaXRp b25hbCBkaXJlY3RvcmllcyogLSBsaXN0IGFueSBvdGhlciBkaXJlY3RvcmllcyB0aGF0IGFy ZSBnZW51aW5lIGFuZCB3aG9zZSBjb250ZW50cyBzaG91bGQgYmUgY2hlY2tlZCBieSB0aGUg cGx1Z2luIChkZWZhdWx0ID0gbm8gYWRkaXRpb25hbCBkaXJlY3RvcmllcykKKiAqTm9uLWxp bmtlZCBmaWxlIGNvdW50IHRocmVzaG9sZCogLSBzcGVjaWZ5IHdoYXQncyBjb25zaWRlcmVk IGFuICJleGNlc3NpdmUgbnVtYmVyIiBvZiBub24tbGlua2VkIGZpbGVzIChkZWZhdWx0ID0g NSkKKiAqRmlsZSBzaXplIHRocmVzaG9sZCogLSBkZWZpbmUgd2hhdCB5b3UgY29uc2lkZXIg dG8gYmUgYSBsYXJnZSBmaWxlIC0gRmlsZXMgZGlyZWN0b3J5IG9ubHksIChkZWZhdWx0ID0g MU1CKQoqICpJbWFnZSBzaXplIHRocmVzaG9sZCogLSBkZWZpbmUgd2hhdCB5b3UgY29uc2lk ZXIgdG8gYmUgYSBsYXJnZSBpbWFnZSAtIEltYWdlcyBkaXJlY3Rvcnkgb25seSwgKGRlZmF1 bHQgPSA1MDBLQikKKiAqSWdub3JlIHBsdWdpbnMqIC0gbGlzdCBwbHVnaW5zIHRoYXQgbWF5 IGdlbmVyYXRlIHdhcm5pbmdzIGJ1dCBhcmUgYWN0dWFsbHkgZ2VudWluZSAoZGVmYXVsdCA9 IHBhcF9jb21jb25uZWN0KQoKTm90ZXM6CgoqIExpc3QgeW91ciBmaWxlcyBvciBkaXJlY3Rv cmllcyBvbiBzZXBhcmF0ZSBsaW5lcwoqIEZpbGUgc2l6ZXMgY2FuIGJlIGVudGVyZWQgMU1C IG9yIDEwNDg1NzYKKiBXaWxkY2FyZHMgbWF5IGJlIHVzZWQKKiBBbGwgZmlsZS9kaXJlY3Rv cmllcy93aWxkY2FyZHMgc3BlY2lmaWVkIGluIHByZWZlcmVuY2VzIGFyZSBjYXNlIHNlbnNp dGl2ZQoqIFBhdGhzIGZvciAiSWdub3JlIGZpbGVzeXN0ZW0gaXRlbXMiLCAiU3R5bGUgZGly ZWN0b3JpZXMiIGFuZCAiQWRkaXRpb25hbCBkaXJlY3RvcmllcyIgYXJlIHJlbGF0aXZlIHRv IHdlYnNpdGUgcm9vdAoqIFBhdGhzIGZvciB1bmxpbmtlZCBmaWxlcyBvciBpbWFnZXMgYXJl IHJlbGF0aXZlIHRvIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXMKCmgyLiAqV2hlcmUg YWRpX2RldHJpdHVzIGRvZXMgaXRzIHJ1bW1hZ2luZyoKCiogV2Vic2l0ZSByb290IGRpcmVj dG9yeQoqIFN0YW5kYXJkIFRYUCBkaXJlY3RvcmllczogX190ZXh0cGF0dGVybi9fXywgeW91 ciBmaWxlcyBkaXJlY3RvcnksIHlvdXIgaW1hZ2VzIGRpcmVjdG9yeSwgX190aGVtZXMvX18K KiBTdHlsZSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gKmFkaV9kZXRyaXR1cyogcHJlZmVy ZW5jZXMKKiBFeHRyYSBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4gKmFkaV9kZXRyaXR1cyog cHJlZmVyZW5jZXMKKiBJbnN0YWxsZWQgYW5kIGNhY2hlZCBwbHVnaW5zLCBhcyB3ZWxsIHRo ZSBwbHVnaW5zIGRpcmVjdG9yeQoqIFByZWZlcmVuY2VzCgpOb3RlIHRoYXQgc3ViZGlyZWN0 b3JpZXMgYXJlIG5vdCB0cmF2ZXJzZWQgYW55IGRlZXBlciB0aGFuIHRoZSBpbW1lZGlhdGUg bGV2ZWwuCgpoMi4gKkl0J3MgZ29vZCB0byBtb2FuKgoKRXhhbXBsZXMgb2YgcGVkYW50cnkg YXJlOgoKKiBFbXB0eSBkaXJlY3RvcmllcyBvciBmaWxlcy4KKiBIaWRkZW4gaXRlbXMgdGhh dCBhcmUgbm90IHJlY29nbmlzZWQuCiogSGlkZGVuIGl0ZW1zIHRoYXQgYXJlIHJlY29nbmlz ZWQgYnV0IGFyZSBwb3NzaWJseSBxdWVzdGlvbmFibGUgKGUuZy4gX18uRFNfU3RvcmVfXywg X18uc3ZuX18pLgoqIE1pc3NpbmcgaXRlbXMgdGhhdCBwcm9iYWJseSBzaG91bGQgZXhpc3Qg KGUuZy4gX18uaHRhY2Nlc3NfXykuCiogVW5yZWNvZ25pc2VkIEhUTUwsIEpTT04sIFBIUCwg VGV4dGlsZSwgdGV4dCBhbmQgbG9nIGZpbGVzIChleGNlcHRpb25zIGFyZSBzdGFuZGFyZCBm aWxlcyBsaWtlIF9faW5kZXgucGhwX18sIF9fUkVBRE1FLnR4dF9fIGV0YykuCiogX19lcnJv cl9sb2dfXyAtIFBIUCBzZXJ2ZXIgZXJyb3IgbG9nZmlsZS4KKiBfX3JwY19fIGRpcmVjdG9y eSAoaWYgbm90IHJlcXVpcmVkIGJ5IHlvdXIgY29uZmlndXJhdGlvbikuCiogT2xkIFRleHRw YXR0ZXJuIGxpY2VuY2UgZmlsZXMgKGUuZy4gX19MSUNFTlNFLUJTRC0zLnR4dF9fKS4KKiBP bGQgVGV4dHBhdHRlcm4gX2pzXyBzY3JpcHRzIGRpcmVjdG9yeSAmIGZpbGUuCiogTGFyZ2Ug ZmlsZXMgLSBvdmVyIHRoZSBmaWxlIHNpemUgdGhyZXNob2xkIHNwZWNpZmllZCBpbiBwcmVm ZXJlbmNlcy4KKiBMYXJnZSBpbWFnZSBmaWxlcyAtIG92ZXIgdGhlIGltYWdlIHNpemUgdGhy ZXNob2xkIHNwZWNpZmllZCBpbiBwcmVmZXJlbmNlcy4KKiBJbWFnZSB0aHVtYm5haWwgZmls ZSBwZXJtaXNzaW9ucyAtIGxhY2sgb2Ygd3JpdGFibGl0eSBjYW4gY2F1c2UgaXNzdWVzIGlu IFRYUCBJbWFnZSB0YWIuCiogVW5yZWFkYWJsZSBmaWxlcyBvciBkaXJlY3Rvcmllcy4KKiBF eGNlc3NpdmUgbnVtYmVycyBvZiBmaWxlcyAtIG92ZXItdGhyZXNob2xkIGNvdW50cyBvZiBu b24tbGlua2VkIGZpbGVzLgoqIFVudXN1YWwgZmlsZSBmb3JtYXRzIGluIHlvdXIgc3R5bGUg ZGlyZWN0b3JpZXMuCiogRmxhc2ggZmlsZXMgKCouc3dmKQoqIFNvbWUgb2YgdGhlIERpYWdu b3N0aWNzIHRhYiBjaGVja3MgYXJlIGR1cGxpY2F0ZWQgYXMgd2VsbCAtIHRoZSB3cml0YWJp bGl0eSBvZiBmaWxlcy9pbWFnZXMvdGhlbWVzL3BsdWdpbnMgZGlyZWN0b3JpZXMgYW5kIHRo ZSBwcmVzZW5jZSBvZiB0aGUgX190ZXh0cGF0dGVybi9zZXR1cF9fIGZvbGRlci4KKiBQbHVn aW5zIHRoYXQgaGF2ZSBmaWxlcyBpbiBfX3RleHRwYXR0ZXJuL3BsdWdpbnNfXyBidXQgYXJl IG5vdCBpbnN0YWxsZWQgaW4gdGhlIGRhdGFiYXNlIChUWFAgNC44KyBvbmx5KS4KKiBQdWJs aWMtc2lkZSBwbHVnaW5zIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGluIHRoZSBkYXRhYmFz ZSwgaGF2ZSBiZWVuIG1vZGlmaWVkLCBhcmUgaW5hY3RpdmUsIG9yIGhhdmUgdW5yZWdpc3Rl cmVkIHRhZ3MuCiogUHJlZmVyZW5jZXMgdGhhdCBhcmUgcGVyY2VpdmVkIHRvIGJlIHJlZHVu ZGFudCAtIHBlcmhhcHMgbGVmdCBiZWhpbmQgYWZ0ZXIgYSBwbHVnaW4gaGFzIGJlZW4gZGVs ZXRlZC4KCmgyLiAqSXMgdGhlcmUgYW55dGhpbmcgdGhhdCB3b24ndCBiZSBjb21wbGFpbmVk IGFib3V0PyoKCiogU3RhbmRhcmQgZmlsZXMgJiBkaXJlY3RvcmllcyBpbiB3ZWJzaXRlIHJv b3QsIGUuZy4gX19pbmRleC5waHBfXywgX19jc3MtcGhwX18sIF9fdGV4dHBhdHRlcm4vX18g ZXRjLgoqIF9fZmF2aWNvbi5pY29fXyBhbmQgYWxsIG90aGVyIGltYWdlIGZpbGVzIGluIHdl YnNpdGUgcm9vdC4KKiBfX3JvYm90cy50eHRfXyAmIF9fY2dpLWJpbi9fXyBpbiB3ZWJzaXRl IHJvb3QuCiogX19icm93c2VyY29uZmlnLnhtbF9fLCBfX3NpdGVtYXAueG1sX18gJiB3ZWJt YW5pZmVzdCBmaWxlcyBpbiB3ZWJzaXRlIHJvb3QgKGV4Y2VwdCB0aGV5IHdpbGwgc3RpbGwg YmUgdmFsaWRhdGVkIGZvciBhcHByb3ByaWF0ZSBmaWxlIHR5cGUpLgoqIEhpZGRlbiBmaWxl cyBfXy5odGFjY2Vzc19fLCBfXy5odGFjY2Vzcy1kaXN0X18sIF9fLmZ0cHF1b3RhX18sIF9f LndlbGwta25vd25fXy4KKiBJbWFnZSBmaWxlcyBpbiB5b3VyIGltYWdlcyBkaXJlY3Rvcnkg dGhhdCBhcmUgbGlua2VkIHRvIHRoZSBkYXRhYmFzZS4KKiBGaWxlcyBpbiB5b3VyIGZpbGVz IGRpcmVjdG9yeSB0aGF0IGFyZSBsaW5rZWQgdG8gdGhlIGRhdGFiYXNlLgoqIEFjdGl2ZSBh ZG1pbi1zaWRlIHBsdWdpbnMgLSBiZWNhdXNlLCBvZiBjb3Vyc2UsIHRoZXkgbXVzdCBiZSBp biB1c2UhCgpoMi4gKk1hbmlmZXN0YXRpb24gbWlzaG1hc2gqCgpBcyBvZiBUWFAgNC44LCBw bHVnaW5zIGFyZSBzdG9yZWQgaW4gdGhlIGZpbGVzeXN0ZW0gYXMgd2VsbCBhcyB0aGUgZGF0 YWJhc2UuIFRoaXMgbWVhbnMgdGhlcmUgaXMgcG90ZW50aWFsIGZvciBtaXNtYXRjaGVzLiAg KmFkaV9kZXRyaXR1cyogZmxhZ3MgcGx1Z2luczoKCiogdGhhdCBoYXZlIGhhZCB0aGVpciBj b2RlIG1vZGlmaWVkIChpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UpCiogd2hlcmUgdGhlIHBs dWdpbiBjb2RlIG9uIGZpbGUgZG9lc24ndCBtYXRjaCB0aGUgZGF0YWJhc2UgKHRoaXMgc2hv dWxkbid0IG5vcm1hbGx5IGhhcHBlbiwgdW5sZXNzIHBlcmhhcHMgdGhlcmUncyBiZWVuIGFu IEZUUCBoaWNjdXApCiogd2hlcmUgdGhlIHBsdWdpbidzIHR5cGUgb3IgbG9hZCBvcmRlciBp cyBkaWZmZXJlbnQgZnJvbSB0aGF0IHNwZWNpZmllZCBkdXJpbmcgaW5zdGFsbGF0aW9uCioq IHR5cGUgYW5kIGxvYWQgb3JkZXIgbWlzbWF0Y2ggZGV0ZWN0aW9uIGlzIGRlcGVuZGVudCBv biB0aGUgYXZhaWxhYmxpdHkgb2YgdGhlIHBsdWdpbidzIF9fbWFuaWZlc3QuanNvbl9fIGZp bGUKKiogX19tYW5pZmVzdC5qc29uX18gbWF5IG5vdCBhbHdheXMgYmUgcHJlc2VudCwgZm9y IGV4YW1wbGUsIGluIHdlYnNpdGVzIHRoYXQgaGF2ZSBiZWVuIG1pZ3JhdGVkIGZyb20gZWFy bGllciByZWxlYXNlcwoKTWlzc2luZyBtYW5pZmVzdCBmaWxlcyB3aWxsIGJlIGxpc3RlZC4g IFRoZSBsYWNrIG9mIGEgbWFuaWZlc3QgZmlsZSBfaXMgbm90IGFuIGlzc3VlIGZvciBwbHVn aW4gb3Igd2Vic2l0ZSBvcGVyYXRpb25fLgoKaDIuICpDU1MgLSB1bnVzdWFsIG9yIG1pc3Vu ZGVyc3Rvb2Q/KgoKUEhQIGlzIG5vdCBpbmZhbGxpYmxlIHdoZW4gZGV0ZXJtaW5pbmcgZmls ZSB0eXBlcy4gIEZyb20gdGVzdGluZywgQ1NTIGZpbGVzIGNhbiBhcHBlYXIgdG8gYmUgJ3Rl eHQvcGxhaW4nIChmYWlyIGVub3VnaCkgb3IgJ3RleHQveC1hc20nIChkbyB3aGF0PykuICBU aGVyZSBpcyBhICd0ZXh0L2NzcycgdHlwZSwgYnV0IEkgaGF2ZW4ndCBzZWVuIG9uZSB5ZXQh ICBIb3dldmVyLCBhbnl0aGluZyBlbHNlIGlzIGRlZW1lZCAidW51c3VhbCIgLSB3aGV0aGVy IHRoYXQncyBhIGJpZyBkZWFsIGFueXdheSwgSSdtIG5vdCBzdXJlLgoKaDIuICpRdWVzdGlv bmluZyB0aGUgcXVlcmllcyoKCiogX18uRFNfU3RvcmVfXyAtIE9LIGluIGEgbG9jYWwgTWFj IGRldmVsb3BtZW50IHNpdGUsIGJ1dCBubyBwb2ludCBoYXZpbmcgaXQgaW4gYSBsaXZlIHNl dHVwLgoqIF8uc3ZuXyAtIHN0aWxsIHJ1bm5pbmcgU3VidmVyc2lvbj8gVGhpcyBzdWJmb2xk ZXIgY2FuIHRha2UgdXAgYSBsb3Qgb2Ygc3BhY2UuCiogX18uZ2l0Kl9fIC0gdXNpbmcgR2l0 PyBUaGVzZSBjYW4gYWxzbyB0YWtlIHVwIGEgbG90IG9mIHNwYWNlLgoqIE1pc3NpbmcgX18u aHRhY2Nlc3NfXyAtIHdpdGhvdXQgdGhlbSwgdGhpcmQgcGFydGllcyBjYW4gZG8gZGlyZWN0 b3J5IGxpc3RpbmdzLiAgX190ZXh0cGF0dGVybi8uaHRhY2Nlc3NfXyBpcyBzdXBwbGllZCBi eSBkZWZhdWx0LCBhbmQgb3RoZXIgZGlyZWN0b3JpZXMgaGF2ZSBzZXJ2aW5nIHN1Z2dlc3Rp b25zIChfXy5odGFjY2Vzcy1kaXN0X18pLgoqIF9fanNfXyBzY3JpcHRzIGRpcmVjdG9yeSAt IHRoaXMgaGFzIG5vdCBiZWVuIHByZXNlbnQgaW4gVFhQIGRpc3RyaWJ1dGlvbnMgc2luY2Ug NC41LiAgQXMgbG9uZyBhcyB5b3UncmUgbm90IHVzaW5nIGl0IHlvdSBjYW4gYmluIGl0Lgoq IF9fanF1ZXJ5LmpzX18gZmlsZSAtIHRoaXMgaGFzIG5vdCBiZWVuIHByZXNlbnQgaW4gVFhQ IGRpc3RyaWJ1dGlvbnMgc2luY2UgNC42LiAgQXMgbG9uZyBhcyB5b3UncmUgbm90IHVzaW5n IGl0IHlvdSBjYW4gYmluIGl0LgoKaDIuICpXaGF0J3MgeW91ciBwcmVmZXJlbmNlPyoKClRo ZSBwbHVnaW4gd2lsbCBsb29rIGF0IHByZWZlcmVuY2VzIHN0b3JlZCBpbiB0aGUgZGF0YWJh c2UgYW5kIGF0dGVtcHQgdG8gZmxhZyB0aG9zZSB3aGljaCBhcmUgX3Bvc3NpYmx5IHJlZHVu ZGFudF8gLSBwZXJoYXBzIGR1ZSB0byBkZWxldGVkIHBsdWdpbnMgbm90IHRpZHlpbmcgdXAg YWZ0ZXIgdGhlbXNlbHZlcy4KClRoaXMgcHJvY2VzcyByZWxpZXMgb24gcGx1Z2lucyBzdG9y aW5nIHRoZWlyIHByZWZlcmVuY2VzIGFzc29jaWF0ZWQgd2l0aCByZWNvZ25pc2FibGUgZXZl bnRzLiAgVGhlc2UgZXZlbnRzIGFyZSB0YWtlbiBmcm9tIHRoZSBjYWxsYmFjayBsaXN0IGNy ZWF0ZWQgYnkgVFhQIEFkbWluIHdoaWNoIGlzIHBvcHVsYXRlZCB3aGVuIHBsdWdpbiBhdXRo b3JzIHVzZSBAcmVnaXN0ZXJfY2FsbGJhY2soJ3BsdWdpbl9mdW5jdGlvbicsICdwbHVnaW5f ZXZlbnQnKUAuICBTb21lIHBsdWdpbnMsIGVzcGVjaWFsbHkgdGhvc2Ugd2l0aG91dCB0aGVp ciBvd24gdGFicywgbWF5IGJlIGxpc3RlZCBlcnJvbmVvdXNseS4KCk5vdGUgdGhhdCBwcmVm ZXJlbmNlcyBiZWxvbmdpbmcgdG8gaW5hY3RpdmUgcGx1Z2lucyB3aWxsIGFsc28gYmUgZmxh Z2dlZC4KCkl0IHNob3VsZCBiZSBmYWlybHkgb2J2aW91cyB3aGljaCBwbHVnaW5zIHJlbGF0 ZSB0byB0aGUgcmVkdW5kYW50IHByZWZlcmVuY2VzIGxpc3RlZC4gIElmIHlvdSdyZSBzdXJl IHlvdSB3YW50IHRvIGRlbGV0ZSBwcmVmZXJlbmNlcywgdGhlbiB5b3UnbGwgbmVlZCB0byBt YW5pcHVsYXRlIHRoZSBkYXRhYmFzZSBkaXJlY3RseSAtIHVzaW5nIGZvciBleGFtcGxlOiAi c21kX3ByZWZhbGl6ZXIiOmh0dHBzOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3Bp Yy5waHA/aWQ9MzIyNzIsIE15U1FMIENMSSwgcGhwTXlBZG1pbiwgb3IgU2VxdWVsIFByby4K CmgyLiAqTGltaXRhdGlvbnMqCgoqIE11bHRpLXNpdGUgVFhQIGluc3RhbGxhdGlvbnMgYXJl IHdob2xlIG5ldyBrZXR0bGUgb2Ygd29ybXMuCiogTG93ZXIgbGV2ZWxzIG9mIHN1YmRpcmVj dG9yaWVzIGFyZSBub3QgZXhhbWluZWQuCiogTWFjIGFsaWFzZXMgYXJlIHNlZW4gYXMgdGV4 dCBmaWxlcy4KKiBHZW5lcmF0ZXMgZmFsc2Ugd2FybmluZ3MgZm9yIHNvbWUgcHVibGljLXNp ZGUgcGx1Z2lucyAoc2ltaWxhciB0byAqcGFwX2NvbWNvbm5lY3QqKSAtIGkuZS4gdGhvc2Ug d2l0aG91dCBhbnkgdGFncy4gWW91IGNhbiBhbHdheXMgYWRkIHRoZW0gdG8gdGhlICJJZ25v cmUgcGx1Z2luIiBwcmVmZXJlbmNlIGxpc3QuCiogTm90IHRlc3RlZCB3aXRoIG11bHRpLWJ5 dGUgY2hhcmFjdGVyIGZpbGVuYW1lcy4KKiBQcmVmZXJlbmNlcyBiZWxvbmdpbmcgdG8gaW5h Y3RpdmUgcGx1Z2lucyB3aWxsIGJlIGZsYWdnZWQgYXMgIlBvc3NpYmx5IHJlZHVuZGFudCIu CiogUHJlZmVyZW5jZXMgdGhhdCBhcmUgZ2VudWluZWx5IHJlZHVuZGFudCBidXQgYXJlIHN0 b3JlZCBpbiB0aGUgZGF0YWJhc2Ugd2l0aCBsaXZlIGV2ZW50cyAoZS5nLiAiYWRtaW4iKSB3 b24ndCBiZSBkZXRlY3RlZC4KCmgyLiAqUHJpdmlsZWdlcyoKCllvdSBjYW4gYWRqdXN0IHdo byBnZXRzIHRvIHVzZSB0aGUgcGx1Z2luIGJ5IHNldHRpbmcgdGhlIHByaXZpbGVnZXMgaW4g b3B0aW9ucy4gRGVmYXVsdCA9IFB1Ymxpc2hlciBvbmx5LgoKaDIuICpUZXh0cGFjayoKClRv IGluc3RhbGwgdGhlIFRleHRwYWNrLCBnbyB0byB0aGUgcGx1Z2luJ3MgT3B0aW9ucyB0YWIg YW5kIGNsaWNrIF9JbnN0YWxsIHRleHRwYWNrXy4gIFRoaXMgd2lsbCBjb3B5ICYgaW5zdGFs bCBpdCBmcm9tIGEgcmVtb3RlIHNlcnZlci4gVGhlIG51bWJlciBvZiBsYW5ndWFnZSBzdHJp bmdzIGluc3RhbGxlZCBmb3IgeW91ciBsYW5ndWFnZSB3aWxsIGJlIGRpc3BsYXllZC4KCklm IHRoZSBUZXh0cGFjayBpbnN0YWxsYXRpb24gZmFpbHMgKHBvc3NpYmx5IGR1ZSB0byBhbiBl cnJvciBhY2Nlc3NpbmcgdGhlIHJlbW90ZSBzaXRlKSwgdGhlIGFsdGVybmF0aXZlIGlzIHRv IGNsaWNrIHRoZSAiVGV4dHBhY2sgYWxzbyBhdmFpbGFibGUgb25saW5lIjpodHRwOi8vd3d3 LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUvdGV4dHBhY2sgbGluay4gIFRoaXMgd2lsbCB0YWtl IHlvdSB0byBhIHdlYnNpdGUgd2hlcmUgdGhlIFRleHRwYWNrIGNhbiBiZSBtYW51YWxseSBj b3BpZWQgJiBwYXN0ZWQgaW50byB0aGUgVFhQIEFkbWluIC0gTGFuZ3VhZ2UgdGFiLgoKQWRk aXRpb25zIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgVGV4dHBhY2sgYXJlIHdlbGNvbWUgLSBw bGVhc2UgdXNlIHRoZSAiVGV4dHBhY2sgZmVlZGJhY2siOmh0dHA6Ly93d3cuZ3JlYXRvY2Vh bm1lZGlhLmNvbS5hdS90ZXh0cGFjay8/cGx1Z2luPWFkaV9kZXRyaXR1cyBmb3JtLgoKaDIo YWRpX2V4dHJhcykuICpBZGRpdGlvbmFsIGluZm9ybWF0aW9uKgoKcChhZGlfZXh0cmFzKS4g U3VwcG9ydCBhbmQgZnVydGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSB0 aGUgIlRleHRwYXR0ZXJuIHN1cHBvcnQgZm9ydW0iOmh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVy bi5jb20vdmlld3RvcGljLnBocD9pZD01MTEyNy4gQSBjb3B5IG9mIHRoaXMgaGVscCBpcyBh bHNvIGF2YWlsYWJsZSAib25saW5lIjpodHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20u YXUvdHhwLz9wbHVnaW49YWRpX2RldHJpdHVzLiAgTW9yZSBhZGlfcGx1Z2lucyBjYW4gYmUg Zm91bmQgImhlcmUiOmh0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1lZGlhLmNvbS5hdS90eHAvLiI7 czo0OiJjb2RlIjtzOjc0MTEzOiIKLyoKCWFkaV9kZXRyaXR1cyAtIFN3ZWVwIHVwIHRoZSBy dWJiaXNoCgoJV3JpdHRlbiBieSBBZGkgR2lsYmVydAoKCVJlbGVhc2VkIHVuZGVyIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQoKCVZlcnNpb24gaGlzdG9yeToKCTAuNyAJLSBu ZXc6IHJlbW92ZWQgb2JqZWN0aW9ucyB0byBhbGwgLndlYm1hbmlmZXN0IGZpbGVzCgkJCS0g bmV3IG9iamVjdGlvbnMgeW91ciBob25vdXI6IHRleHRwYXR0ZXJuL2pxdWVyeS5qcywgdGV4 dHBhdHRlcm4vdHhwX2ltZyAoNC42KykKCQkJLSBuZXc6IGNoZWNrIHdyaXRhYmlsaXR5IG9m IGltYWdlIHRodW1ibmFpbHMKCQkJLSBuZXc6IFRYUCA0LjgrIHBsdWdpbiBmaWxlICYgbWFu aWZlc3QgY2hlY2tzIC0gdHlwZS9vcmRlci9jb2RlIG1pc21hdGNoZXMKCQkJLSBpbXByb3Zl ZDogc2xpZ2h0bHkgbGVzcyB3aGluZ2V5IGFib3V0IGltYWdlcwoJMC42CQktIGZpeDogcmVt b3ZlZCBvYmplY3Rpb24gdG8gSU5TVEFMTC50eHQgJiBVUEdSQURFLnR4dCAoZm9yIFRYUCA0 LjguNSkKCQkJLSBmaXg6ICJNaXNzaW5nIiBsYW5ndWFnZSBzdHJpbmcgbmFtZSBjaGFuZ2Ug KGZvciBUWFAgNC44KQoJCQktIGZpeDogaW1wcm92ZWQgZXZlbnQgZGlzY292ZXJ5CgkJCS0g bmV3OiB3YXJuaW5ncyBmb3IgdW5pbnN0YWxsZWQgcGx1Z2lucyB0aGF0IGhhdmUgZmlsZXMg aW4gdGV4dHBhdHRlcm4vcGx1Z2lucyBkaXIKCTAuNQkJLSBmaXg6IGRvdWJsZSBub3RpZmlj YXRpb25zIGZvciAubm9kZWxldGUKCQkJLSBmaXg6IHJlbW92ZWQgb2JqZWN0aW9uIHRvIHNp dGVtYXAueG1sICh0aGFua3MgYmljaSkKCQkJLSBuZXc6IGJyb3dzZXJjb25maWcueG1sICYg c2l0ZS53ZWJtYW5pZmVzdCBhd2FyZW5lc3MKCQkJLSBuZXc6IGNoZWNrIGZvciAuc3dmIGZp bGVzCgkJCS0gbmV3OiB0ZXh0cGF0dGVybi9wbHVnaW5zIGRpcmVjdG9yeSBjaGVja3MKCQkJ LSBtb3JlIE9TLWFnbm9zdGljaXNtCgkwLjQJCS0gT1MtYWdub3N0aWNpc20gKHRoYW5rcyBl dGMpCgkJCS0gbGVzcyByZWxpYW5jZSBvbiB0aGUgIkAiIGVycm9yLWNvbnRyb2wgb3BlcmF0 b3IgV1JUIFBIUCA4CgkwLjMJCS0gbW9yZSBvcnBoYW5zOiBpbWFnZXMvLm5vZGVsZXRlLCB0 ZXh0cGF0dGVybi9saWNlbnNlLnR4dCwgdGV4dHBhdHRlcm4vbGdwbC0yLjEudHh0IChub3Qg cHJlc2VudCBpbiBUWFAgNC42KykKCQkJLSBmaXg6IGluY29ycmVjdCBkZWZhdWx0IHByZWYg dmFsdWVzIGZvciB1bmxpbmtlZCBmaWxlIGV4Y2x1c2lvbnMKCQkJLSBmaXg6IHJlbW92ZSAi c3R5bGUiIGZyb20gZGVmYXVsdCBzdHlsZSBkaXJlY3RvcmllcyBsaXN0CgkJCS0gZml4OiBt aXNzaW5nIGxhbmd1YWdlIHN0cmluZ3MKCQkJLSBuZXc6IHJlZHVuZGFudCBwcmVmZXJlbmNl IGNoZWNrcwoJMC4yCQktIGFudGktY2FjaGluZyBtZWFzdXJlCgkJCS0gZml4IGZvciB1bmVz Y2FwZWQgcXVvdGVzIGluIGRiIHF1ZXJpZXMgKHRoYW5rcyBwZXRlcmopCgkwLjEJCS0gaW5p dGlhbCByZWxlYXNlCgoJTGltaXRhdGlvbnMKCS0gbm90IHRlc3RlZCBvbiBtdWx0aS1zaXRl CgktIGRvZXNuJ3QgdHJhdmVyc2UgbG93ZXIgbGV2ZWxzIG9mIHN1YmRpcmVjdG9yaWVzCgkt IHNlZXMgTWFjIGFsaWFzZXMgYXMgdGV4dCBmaWxlcwoJLSBvbmx5IHRlc3RlZCB0aG9yb3Vn aGx5IG9uIFVuaXgtbGlrZSBob3N0aW5nCiovCgovLz8/PyBDT0RFCgppZiAoQHR4cGludGVy ZmFjZSA9PSAnYWRtaW4nKSB7CglnbG9iYWwgJGFkaV9kZXRyaXR1c19kZWJ1ZzsKCgkkYWRp X2RldHJpdHVzX2RlYnVnID0gMDsKCglpZiAoIXZlcnNpb25fY29tcGFyZSh0eHBfdmVyc2lv biwgJzQuNycsICc+PScpKSByZXR1cm47CgoJYWRpX2RldHJpdHVzX2luaXQoKTsKfQoKZnVu Y3Rpb24gYWRpX2RldHJpdHVzX2luaXQoKSB7Ci8vIGluaXRpYWwgc2V0IHVwCglnbG9iYWwg JHByZWZzLCAkZXZlbnQsICRhZGlfZGV0cml0dXNfdGFiX2xpc3QsICRhZGlfZGV0cml0dXNf cHJlZnMsICRhZGlfZGV0cml0dXNfb3V0bGF3cywgJGFkaV9kZXRyaXR1c19vdXRsYXdzLCAk YWRpX2RldHJpdHVzX2RlYnVnLCAkYWRpX2RldHJpdHVzX3BsdWdpbl9zdGF0dXMsICRhZGlf ZGV0cml0dXNfdXJsLCAkYWRpX2RldHJpdHVzX2ZpbGVfa2l0LCAkYWRpX2RldHJpdHVzX3Bs dWdpbl9raXQsICRhZGlfZGV0cml0dXNfZmlsZV9mdW5jLCAkYWRpX2RldHJpdHVzX3BsdWdp bl9mdW5jLCAkYWRpX2RldHJpdHVzX2ZpbGVfZXhjZXB0aW9ucywgJGFkaV9kZXRyaXR1c19m aWxlX2RlcGVuZGVuY2llcywgJHBhdGhfdG9fc2l0ZSwgJHRlbXBkaXIsICRpbWdfZGlyLCAk ZmlsZV9iYXNlX3BhdGgsICRza2luX2RpciwgJGVuYWJsZV94bWxycGNfc2VydmVyLCAkcGx1 Z2luX2NhY2hlX2RpciwgJGFkaV9kZXRyaXR1c19maWxlX3NpemUsICRhZGlfZGV0cml0dXNf aW1hZ2Vfc2l6ZSwgJGFkaV9kZXRyaXR1c19hbGxfZmlsZXMsICRhZGlfZGV0cml0dXNfYWxs X2ltYWdlcywgJGFkaV9kZXRyaXR1c19saW5rZWRfZmlsZXMsICRhZGlfZGV0cml0dXNfbGlu a2VkX2ltYWdlcywgJGFkaV9kZXRyaXR1c191bmxpbmtlZF9maWxlcywgJGFkaV9kZXRyaXR1 c191bmxpbmtlZF9pbWFnZXMsICRhZGlfZGV0cml0dXNfYWxsX3R4cF9pbWFnZXMsICRhZGlf ZGV0cml0dXNfbWlzc2luZ19pbWdfZmlsZXMsICRhZGlfZGV0cml0dXNfdW5saW5rZWRfdHhw X2ltYWdlcywgJGFkaV9kZXRyaXR1c19ub25fdHhwX2ltYWdlcywgJGFkaV9kZXRyaXR1c19m aWxlX2RpcnMsICRhZGlfZGV0cml0dXNfaW1hZ2VfZGlycywgJGFkaV9kZXRyaXR1c19sYW5n X3N0cl9taXNzaW5nLCAkYWRpX2RldHJpdHVzX3R4cDQ4MDsKCgkkYWRpX2RldHJpdHVzX3R4 cDQ4MCA9ICh2ZXJzaW9uX2NvbXBhcmUodHhwX3ZlcnNpb24sICc0LjgnLCAnPj0nKSk7CgoJ Ly8gZGVmYXVsdCBwcmVmZXJlbmNlcwoJLy8gdmVyc2lvbnMgMC4xICYgMC4yIGhhZCBlcnJv bmVvdXMgZGVmYXVsdCB2YWx1ZXMgZm9yIGFkaV9kZXRyaXR1c191bmxrZF9maWxlX2V4Y24g KGZpbGVzLyouc3FsXG5maWxlcy8qLnNxbC5neiAtLT4gKi5zcWxcbiouc3FsLmd6KSBhbmQg YWRpX2RldHJpdHVzX3N0eWxlX2RpcnMgKHN0eWxlLyogLS0+IHN0eWxlKSwgYWxzbyByZW1v dmVkICdzdHlsZScgZnJvbSBhZGlfZGV0cml0dXNfc3R5bGVfZGlycwoJJGFkaV9kZXRyaXR1 c19wcmVmcyA9IGFycmF5KAoJCSdhZGlfZGV0cml0dXNfcHJpdnMnID0+IGFycmF5KCd2YWx1 ZSc9PicxJywgJ2JsYW5rJz0+MSwgJ3ByaXZhdGUnPT4wLCAnaW5wdXQnPT4nY3VzdG9tJywg J2xhYmVsJz0+J2FkaV9hZG1pbl9wcml2cycsICd0YWInPT4nb3B0aW9ucycpLCAvLyBhZG1p biB0YWIgYWxsb3dlZCAocHVibGlzaGVyICYgInNlbGYiIGVuZm9yY2VkKQoJCSdhZGlfZGV0 cml0dXNfdW5sa2RfZmlsZV9leGNuJyA9PiBhcnJheSgndmFsdWUnPT4iKi5zcWxcbiouc3Fs Lmd6IiwgJ2JsYW5rJz0+MSwgJ3ByaXZhdGUnPT4xLCAnaW5wdXQnPT4ndGV4dF9hcmVhJywg J2xhYmVsJz0+J2FkaV9kZXRyaXR1c191bmxrZF9maWxlX2V4Y24nLCAndGFiJz0+J2FkbWlu JyksCgkJJ2FkaV9kZXRyaXR1c191bmxrZF9pbWdfZXhjbicgPT4gYXJyYXkoJ3ZhbHVlJz0+ Iiouc3ZnIiwgJ2JsYW5rJz0+MSwgJ3ByaXZhdGUnPT4xLCAnaW5wdXQnPT4ndGV4dF9hcmVh JywgJ2xhYmVsJz0+J2FkaV9kZXRyaXR1c191bmxrZF9pbWdfZXhjbicsICd0YWInPT4nYWRt aW4nKSwKCQknYWRpX2RldHJpdHVzX2lnbm9yZV9maWxlX2l0ZW1zJyA9PiBhcnJheSgndmFs dWUnPT4iKi8uaHRhY2Nlc3MtZGlzdCIsICdibGFuayc9PjEsICdwcml2YXRlJz0+MSwgJ2lu cHV0Jz0+J3RleHRfYXJlYScsICdsYWJlbCc9PidhZGlfZGV0cml0dXNfaWdub3JlX2ZpbGVf aXRlbXMnLCAndGFiJz0+J2FkbWluJyksCgkJJ2FkaV9kZXRyaXR1c19zdHlsZV9kaXJzJyA9 PiBhcnJheSgndmFsdWUnPT4nJywgJ2JsYW5rJz0+MSwgJ3ByaXZhdGUnPT4xLCAnaW5wdXQn PT4ndGV4dF9hcmVhJywgJ2xhYmVsJz0+J2FkaV9kZXRyaXR1c19zdHlsZV9kaXJzJywgJ3Rh Yic9PidhZG1pbicpLAoJCSdhZGlfZGV0cml0dXNfZXh0cmFfZGlycycgPT4gYXJyYXkoJ3Zh bHVlJz0+JycsICdibGFuayc9PjEsICdwcml2YXRlJz0+MSwgJ2lucHV0Jz0+J3RleHRfYXJl YScsICdsYWJlbCc9PidhZGlfZGV0cml0dXNfZXh0cmFfZGlycycsICd0YWInPT4nYWRtaW4n KSwKCQknYWRpX2RldHJpdHVzX3VubGtkX2ZpbGVfdGhyZXNob2xkJyA9PiBhcnJheSgndmFs dWUnPT4nNScsICdibGFuayc9PjEsICdwcml2YXRlJz0+MSwgJ2lucHV0Jz0+J3RleHRfaW5w dXQnLCAnbGFiZWwnPT4nYWRpX2RldHJpdHVzX3VubGtkX2ZpbGVfdGhyZXNob2xkJywgJ3Rh Yic9PidhZG1pbicpLAoJCSdhZGlfZGV0cml0dXNfZmlsZV9zaXplJyA9PiBhcnJheSgndmFs dWUnPT4nMU1CJywgJ2JsYW5rJz0+MSwgJ3ByaXZhdGUnPT4xLCAnaW5wdXQnPT4ndGV4dF9p bnB1dCcsICdsYWJlbCc9PidhZGlfZGV0cml0dXNfZmlsZV9zaXplJywgJ3RhYic9PidhZG1p bicpLAoJCSdhZGlfZGV0cml0dXNfaW1hZ2Vfc2l6ZScgPT4gYXJyYXkoJ3ZhbHVlJz0+JzUx MktCJywgJ2JsYW5rJz0+MSwgJ3ByaXZhdGUnPT4xLCAnaW5wdXQnPT4ndGV4dF9pbnB1dCcs ICdsYWJlbCc9PidhZGlfZGV0cml0dXNfaW1hZ2Vfc2l6ZScsICd0YWInPT4nYWRtaW4nKSwK CQknYWRpX2RldHJpdHVzX2lnbm9yZV9wbHVnaW5zJyA9PiBhcnJheSgndmFsdWUnPT4icGFw X2NvbWNvbm5lY3QiLCAnYmxhbmsnPT4xLCAncHJpdmF0ZSc9PjEsICdpbnB1dCc9Pid0ZXh0 X2FyZWEnLCAnbGFiZWwnPT4nYWRpX2RldHJpdHVzX2lnbm9yZV9wbHVnaW5zJywgJ3RhYic9 PidhZG1pbicpLAoJKTsKCgkvLyBwcml2cyB0byBiZSBleGNsdWRlZCAobGlzdCBvZiBncm91 cCBpZHMpCgkkYWRpX2RldHJpdHVzX291dGxhd3MgPSBhcnJheSgwKTsKCSRhZGlfZGV0cml0 dXNfb3V0bGF3cyA9IGFycmF5KDAsIDUpOwoKCS8vIFRleHRwYWNrCgkkYWRpX2RldHJpdHVz X3VybCA9IGFycmF5KAoJCSd0ZXh0cGFjaycgPT4gJ2h0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1l ZGlhLmNvbS5hdS9maWxlcy9hZGlfdGV4dHBhY2sudHh0JywKCQkndGV4dHBhY2tfZG93bmxv YWQnID0+ICdodHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUvdGV4dHBhY2svZG93 bmxvYWQnLAoJCSd0ZXh0cGFja19mZWVkYmFjaycgPT4gJ2h0dHA6Ly93d3cuZ3JlYXRvY2Vh bm1lZGlhLmNvbS5hdS90ZXh0cGFjay8/cGx1Z2luPWFkaV9kZXRyaXR1cycsCgkpOwoJaWYg KHN0cnBvcygkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXSwgJ2FkaScpICE9PSBGQUxTRSkg Ly8gdXNlIEFkaSdzIGxvY2FsIHZlcnNpb24KCQkkYWRpX2RldHJpdHVzX3VybFsndGV4dHBh Y2snXSA9ICRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLicvYWRpX3RleHRwYWNrLnR4dCc7 CgoJLy8gZ2V0IGhvbGQgb2YgbGFuZ3VhZ2Ugc3RyaW5ncyBoaWRkZW4gYmVoaW5kIGV2ZW50 IHdhbGwKCWlmIChpbl9hcnJheSgkZXZlbnQsIGFycmF5KCdhZGlfZGV0cml0dXNfYWRtaW4n LCAncGx1Z2luX3ByZWZzLmFkaV9kZXRyaXR1cycsICdhZGlfZGV0cml0dXNfb3B0aW9ucycp KSkKCQkvLyBwcmUtNC44ICdmaWxlX3N0YXR1c19taXNzaW5nJyBiZWxvbmdzIHRvIGZpbGUg ZXZlbnQsIDQuOCsgJ3N0YXR1c19taXNzaW5nJyBpcyBjb21tb24gKHN0cmluZyBzZWxlY3Rl ZCBsYXRlcikKCQlhZGlfZGV0cml0dXNfbG9hZF9sYW5nKCdpbnN0YWxsX3RleHRwYWNrLCBw dWJsaXNoZXIsIG1hbmFnaW5nX2VkaXRvciwgY29weV9lZGl0b3IsIHN0YWZmX3dyaXRlciwg ZnJlZWxhbmNlciwgZGVzaWduZXIsIGZpbGVfc3RhdHVzX21pc3NpbmcsIG1pc3NpbmdfZmls ZXMnKTsKCgkvLyBsYW5ndWFnZSBzdHJpbmcgbmFtZSBjaGFuZ2VzCgkkYWRpX2RldHJpdHVz X2xhbmdfc3RyX21pc3NpbmcgPSAoJGFkaV9kZXRyaXR1c190eHA0ODAgPyAnc3RhdHVzX21p c3NpbmcnIDogJ2ZpbGVfc3RhdHVzX21pc3NpbmcnKTsKCgkvLyBwbHVnaW4gbGlmZWN5Y2xl CglyZWdpc3Rlcl9jYWxsYmFjaygnYWRpX2RldHJpdHVzX2xpZmVjeWNsZScsICdwbHVnaW5f bGlmZWN5Y2xlLmFkaV9kZXRyaXR1cycpOwoKCS8vIGFkaV9kZXRyaXR1cyBBZG1pbiB0YWIK CWFkZF9wcml2cygnYWRpX2RldHJpdHVzX2FkbWluJywgYWRpX2RldHJpdHVzX3ByZWYoJ2Fk aV9kZXRyaXR1c19wcml2cycpKTsKCXJlZ2lzdGVyX3RhYignYWRtaW4nLCAnYWRpX2RldHJp dHVzX2FkbWluJywgZ1R4dCgnYWRpX2RldHJpdHVzX2FkbWluJykpOwoJcmVnaXN0ZXJfY2Fs bGJhY2soJ2FkaV9kZXRyaXR1c19hZG1pbicsICdhZGlfZGV0cml0dXNfYWRtaW4nKTsKCgkv LyBzdHlsZQoJaWYgKCRldmVudCA9PSAnYWRpX2RldHJpdHVzX2FkbWluJykKCQlyZWdpc3Rl cl9jYWxsYmFjaygnYWRpX2RldHJpdHVzX3N0eWxlJywgJ2FkbWluX3NpZGUnLCAnaGVhZF9l bmQnKTsKCgkvLyBwbHVnaW4gb3B0aW9ucwoJJGFkaV9kZXRyaXR1c19wbHVnaW5fc3RhdHVz ID0gZmV0Y2goJ3N0YXR1cycsICd0eHBfcGx1Z2luJywgJ25hbWUnLCAnYWRpX2RldHJpdHVz Jyk7CglpZiAoJGFkaV9kZXRyaXR1c19wbHVnaW5fc3RhdHVzKSB7IC8vIHByb3BlciBpbnN0 YWxsIC0gb3B0aW9ucyB1bmRlciBQbHVnaW5zIHRhYgoJCWFkZF9wcml2cygncGx1Z2luX3By ZWZzLmFkaV9kZXRyaXR1cycpOyAvLyBkZWZhdWx0cyB0byBwcml2ICcxJyBvbmx5CgkJcmVn aXN0ZXJfY2FsbGJhY2soJ2FkaV9kZXRyaXR1c19vcHRpb25zJywgJ3BsdWdpbl9wcmVmcy5h ZGlfZGV0cml0dXMnKTsKCX0KCWVsc2UgeyAvLyB0eHBkZXYgLSBvcHRpb25zIHVuZGVyIEV4 dGVuc2lvbnMgdGFiCgkJYWRkX3ByaXZzKCdhZGlfZGV0cml0dXNfb3B0aW9ucycpOyAvLyBk ZWZhdWx0cyB0byBwcml2ICcxJyBvbmx5CgkJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywg J2FkaV9kZXRyaXR1c19vcHRpb25zJywgJ2FkaV9kZXRyaXR1cyBvcHRpb25zJyk7CgkJcmVn aXN0ZXJfY2FsbGJhY2soJ2FkaV9kZXRyaXR1c19vcHRpb25zJywgJ2FkaV9kZXRyaXR1c19v cHRpb25zJyk7Cgl9CgoJLy8/Pz8gR0VORVJBVEUgTElTVFMgT0YgRklMRVMvRElSUwoJJGFk aV9kZXRyaXR1c19hbGxfZmlsZXMgPSBhZGlfZGV0cml0dXNfZ2V0X2ZpbGVzKCRmaWxlX2Jh c2VfcGF0aCk7IC8vIGZpbGVzIGluIGZpbGVzIGRpcgoJJGFkaV9kZXRyaXR1c19maWxlX2Rp cnMgPSBhZGlfZGV0cml0dXNfZ2V0X2RpcnMoJGZpbGVfYmFzZV9wYXRoKTsgLy8gc3ViZGly cyBpbiBmaWxlcyBkaXIKCSRhZGlfZGV0cml0dXNfbGlua2VkX2ZpbGVzID0gYWRpX2RldHJp dHVzX2dldF9saW5rZWRfZmlsZXMoJ3R4cF9maWxlJywgJGZpbGVfYmFzZV9wYXRoKTsgLy8g ZmlsZXMgbGlua2VkIHRvIGRiCgkkYWRpX2RldHJpdHVzX3VubGlua2VkX2ZpbGVzID0gYXJy YXlfZGlmZigkYWRpX2RldHJpdHVzX2FsbF9maWxlcywgJGFkaV9kZXRyaXR1c19saW5rZWRf ZmlsZXMpOyAvLyBmaWxlcyAob2YgYW55IHR5cGUpIG5vdCBsaW5rZWQgdG8gZGIKCSRhZGlf ZGV0cml0dXNfYWxsX2ltYWdlcyA9IGFkaV9kZXRyaXR1c19nZXRfZmlsZXMoJHBhdGhfdG9f c2l0ZS5EUy4kaW1nX2Rpcik7IC8vIGZpbGVzIGluIGltYWdlcyBkaXIKCSRhZGlfZGV0cml0 dXNfaW1hZ2VfZGlycyA9IGFkaV9kZXRyaXR1c19nZXRfZGlycygkcGF0aF90b19zaXRlLkRT LiRpbWdfZGlyKTsgLy8gc3ViZGlycyBpbiBpbWFnZXMgZGlyCgkkYWRpX2RldHJpdHVzX2xp bmtlZF9pbWFnZXMgPSBhZGlfZGV0cml0dXNfZ2V0X2xpbmtlZF9maWxlcygndHhwX2ltYWdl JywgJHBhdGhfdG9fc2l0ZS5EUy4kaW1nX2Rpcik7IC8vIGltYWdlcyBsaW5rZWQgdG8gZGIK CSRhZGlfZGV0cml0dXNfdW5saW5rZWRfaW1hZ2VzID0gYXJyYXlfZGlmZigkYWRpX2RldHJp dHVzX2FsbF9pbWFnZXMsICRhZGlfZGV0cml0dXNfbGlua2VkX2ltYWdlcyk7IC8vIGltYWdl cyAob2YgYW55IHR5cGUgb3IgZmlsZW5hbWUgZm9ybWF0KSBub3QgbGlua2VkIHRvIGRiCgkk YWRpX2RldHJpdHVzX2FsbF90eHBfaW1hZ2VzID0gYWRpX2RldHJpdHVzX2dldF9maWxlcygk cGF0aF90b19zaXRlLkRTLiRpbWdfZGlyLCAnYWRpX2RldHJpdHVzX2lzX3R4cF9pbWFnZV9m b3JtYXQnKTsgLy8gYWxsIFRYUCBpbWFnZSBmaWxlbmFtZSBmb3JtYXQgZmlsZXMgaW4gaW1h Z2VzIGRpcgoJJGFkaV9kZXRyaXR1c191bmxpbmtlZF90eHBfaW1hZ2VzID0gYXJyYXlfZGlm ZigkYWRpX2RldHJpdHVzX2FsbF90eHBfaW1hZ2VzLCAkYWRpX2RldHJpdHVzX2xpbmtlZF9p bWFnZXMpOyAvLyB1bmxpbmtlZCBUWFAgaW1hZ2UgZmlsZW5hbWUgZm9ybWF0IGZpbGVzIGlu IGltYWdlcyBkaXIKCSRhZGlfZGV0cml0dXNfbm9uX3R4cF9pbWFnZXMgPSBhcnJheV9kaWZm KCRhZGlfZGV0cml0dXNfYWxsX2ltYWdlcywgJGFkaV9kZXRyaXR1c19hbGxfdHhwX2ltYWdl cyk7IC8vIG5vbi1UWFAgaW1hZ2UgZmlsZW5hbWUgZm9ybWF0IGZpbGVzIGluIGltYWdlcyBk aXIKCgkvLz8/PyBGSUxFU1lTVEVNIEtJVAoJLy8gZGVmaW5lIGxpc3Qgb2YgdGVzdHMsIFRY UCB2ZXJzaW9ucywgdGVzdCBzdWJqZWN0cyAmIHdhcm5pbmcgbGFuZ3VhZ2Ugc3RyaW5ncwoJ Ly8gYXJyYXkoInRlc3QgdHlwZSIgPT4gYXJyYXkoInR4cCB2ZXJzaW9uIiA9PiBhcnJheSgi ZmlsZXN5c3RlbSBpdGVtL3dpbGRjYXJkIiwgIndhcm5pbmdfbGFuZ19zdHJpbmciKSkpCgkv LyAiZmlsZXN5c3RlbSBpdGVtIiAtIGl0ZW0gcGF0aHMgd2lsbCBiZSBjaGVja2VkIGZvciBj b21wbGV0ZW5lc3MgbGF0ZXIgKGluIGFkaV9kZXRyaXR1c19zd2VlcCgpKQoJLy8ge3BsYWNl aG9sZGVyc30gcmVwbGFjZWQgaW4gYWRpX2RldHJpdHVzX2FkbWluKCkKCSRhZGlfZGV0cml0 dXNfZmlsZV9raXQgPQoJCWFycmF5KAoJCQknZW1wdHknID0+IGFycmF5KAoJCQkJJyonID0+ IAkJYXJyYXkoCgkJCQkJCQkJJyonID0+ICdhZGlfZW1wdHknLAoJCQkJCQkJCScuKicgPT4g J2FkaV9lbXB0eScsIC8vIGhpZGRlbiBmaWxlcwoJCQkJCQkJCSIkcGx1Z2luX2NhY2hlX2Rp ciIgPT4gJ2FkaV9lbXB0eScsCgkJCQkJCQkpLAoJCQkpLAoJCQknZXhjZXNzJyA9PiBhcnJh eSgKCQkJCScqJyA9PiAJCWFycmF5KAoJCQkJCQkJCSIkZmlsZV9iYXNlX3BhdGgiID0+ICdh ZGlfZmlsZXNfZm91bmQnLAoJCQkJCQkJKSwKCQkJKSwKCQkJJ2ZvdW5kJyA9PiBhcnJheSgK CQkJCScqJyA9PiAJCWFycmF5KAoJCQkJCQkJCScuZ2l0KicgPT4gJ2FkaV9naXRfaXRlbScs CgkJCQkJCQkJJ3RleHRwYXR0ZXJuJy5EUy4nLmdpdCcgPT4gJ2FkaV9naXRfaXRlbScsCgkJ CQkJCQkJIiRmaWxlX2Jhc2VfcGF0aCIuRFMuIi5naXQiID0+ICdhZGlfZ2l0X2l0ZW0nLAoJ CQkJCQkJCSIkaW1nX2RpciIuRFMuIi5naXQiID0+ICdhZGlfZ2l0X2l0ZW0nLAoJCQkJCQkJ CSIkc2tpbl9kaXIiLkRTLiIuZ2l0IiA9PiAnYWRpX2dpdF9pdGVtJywKCQkJCQkJCQkie3N0 eWxlfSIuRFMuIi5naXQiID0+ICdhZGlfZ2l0X2l0ZW0nLAoJCQkJCQkJCSJ7ZXh0cmF9Ii5E Uy4iLmdpdCIgPT4gJ2FkaV9naXRfaXRlbScsCgkJCQkJCQkJJy5zdm4nID0+ICdhZGlfc3Vi dmVyc2lvbl9pdGVtJywKCQkJCQkJCQkndGV4dHBhdHRlcm4nLkRTLicuc3ZuJyA9PiAnYWRp X3N1YnZlcnNpb25faXRlbScsCgkJCQkJCQkJIiRmaWxlX2Jhc2VfcGF0aCIuRFMuIi5zdm4i ID0+ICdhZGlfc3VidmVyc2lvbl9pdGVtJywKCQkJCQkJCQkiJGltZ19kaXIiLkRTLiIuc3Zu IiA9PiAnYWRpX3N1YnZlcnNpb25faXRlbScsCgkJCQkJCQkJIiRza2luX2RpciIuRFMuIi5z dm4iID0+ICdhZGlfc3VidmVyc2lvbl9pdGVtJywKCQkJCQkJCQkie3N0eWxlfSIuRFMuIi5z dm4iID0+ICdhZGlfc3VidmVyc2lvbl9pdGVtJywKCQkJCQkJCQkie2V4dHJhfSIuRFMuIi5z dm4iID0+ICdhZGlfc3VidmVyc2lvbl9pdGVtJywKCQkJCQkJCQkiKi5zd2YiID0+ICdhZGlf c3dmX2ZpbGUnLAoJCQkJCQkJCSIkZmlsZV9iYXNlX3BhdGgiLkRTLiIqLnN3ZiIgPT4gJ2Fk aV9zd2ZfZmlsZScsCgkJCQkJCQkJIiRpbWdfZGlyIi5EUy4iKi5zd2YiID0+ICdhZGlfc3dm X2ZpbGUnLAoJCQkJCQkJCSIkc2tpbl9kaXIiLkRTLiIqLnN3ZiIgPT4gJ2FkaV9zd2ZfZmls ZScsCgkJCQkJCQkJIntzdHlsZX0iLkRTLiIqLnN3ZiIgPT4gJ2FkaV9zd2ZfZmlsZScsCgkJ CQkJCQkJIntleHRyYX0iLkRTLiIqLnN3ZiIgPT4gJ2FkaV9zd2ZfZmlsZScsCgkJCQkJCQkJ JyouaHRtbCcgPT4gJ2FkaV9odG1sX2ZpbGUnLAoJCQkJCQkJCScqLmpzb24nID0+ICdhZGlf anNvbl9maWxlJywKCQkJCQkJCQknKi5sb2cnID0+ICdhZGlfbG9nZmlsZScsCgkJCQkJCQkJ IntzdHlsZX0iLkRTLiIqLmxvZyIgPT4gJ2FkaV9sb2dmaWxlJywKCQkJCQkJCQkie2V4dHJh fSIuRFMuIioubG9nIiA9PiAnYWRpX2xvZ2ZpbGUnLAoJCQkJCQkJCScqLnBocCcgPT4gJ2Fk aV9waHBfZmlsZScsCgkJCQkJCQkJJyoudGV4dGlsZScgPT4gJ2FkaV90ZXh0aWxlX2ZpbGUn LAoJCQkJCQkJCScqLnR4dCcgPT4gJ2FkaV90ZXh0X2ZpbGUnLAoJCQkJCQkJCSdlcnJvcl9s b2cnID0+ICdhZGlfcGhwX2Vycm9yX2xvZ2ZpbGUnLAoJCQkJCQkJCSd0ZXh0cGF0dGVybicu RFMuJ2Vycm9yX2xvZycgPT4gJ2FkaV9waHBfZXJyb3JfbG9nZmlsZScsCgkJCQkJCQkJJ3Bo cC5pbmknID0+ICdhZGlfcGhwX2NvbmZpZ19maWxlJywKCQkJCQkJCQkncnBjJyA9PiAnYWRp X25vdF9yZXF1aXJlZF9ieV9jb25maWcnLAoJCQkJCQkJCSd0ZXh0cGF0dGVybicuRFMuJ3Nl dHVwJyA9PiAnYWRpX3JlbW92ZV9hZnRlcl9jb25maWcnLAoJCQkJCQkJKSwKCQkJCSc0LjYn ID0+CWFycmF5KAoJCQkJCQkJCSIkaW1nX2RpciIuRFMuIi5ub2RlbGV0ZSIgPT4gJ2FkaV9v bGRfNDVfd2FybmluZycsCgkJCQkJCQkJJ2pzJyA9PiAnYWRpX29sZF80NV9zY3JpcHRfZm9s ZGVyJywKCQkJCQkJCQkndGV4dHBhdHRlcm4nLkRTLidqcXVlcnkuanMnID0+ICdhZGlfb2xk X3ByZTQ2X3NjcmlwdF9maWxlJywKCQkJCQkJCQkndGV4dHBhdHRlcm4nLkRTLidsaWNlbnNl LnR4dCcgPT4gJ2FkaV9vbGRfNDVfbGljZW5jZScsCgkJCQkJCQkJJ3RleHRwYXR0ZXJuJy5E Uy4nbGdwbC0yLjEudHh0JyA9PiAnYWRpX29sZF80NV9saWNlbmNlJywKCQkJCQkJCQkndGV4 dHBhdHRlcm4nLkRTLid0eHBfaW1nJyA9PiAnYWRpX29sZF9wcmU0Nl9kaXJlY3RvcnknLAoJ CQkJCQkJKSwKCQkJCSc0LjcnID0+CWFycmF5KAoJCQkJCQkJCSdMSUNFTlNFLUJTRC0zLnR4 dCcgPT4gJ2FkaV9vbGRfNDZfbGljZW5jZScsCgkJCQkJCQkJJ0xJQ0VOU0UtTEVTU0VSLnR4 dCcgPT4gJ2FkaV9vbGRfNDZfbGljZW5jZScsCgkJCQkJCQkpLAoJCQkJJzQuOCcgPT4gCQlh cnJheSgKCQkJCQkJCQkidGV4dHBhdHRlcm4iLkRTLiJwbHVnaW5zIi5EUy4iLmdpdCIgPT4g J2FkaV9naXRfaXRlbScsCgkJCQkJCQkJInRleHRwYXR0ZXJuIi5EUy4icGx1Z2lucyIuRFMu Ii5zdm4iID0+ICdhZGlfc3VidmVyc2lvbl9pdGVtJywKCQkJCQkJCSksCgkJCSksCgkJCSdp c19kaXInID0+IGFycmF5KAoJCQkJJyonID0+IAkJYXJyYXkoCgkJCQkJCQkJIiRmaWxlX2Jh c2VfcGF0aCIuRFMuIioiID0+ICdhZGlfbm90X3JlY29nbmlzZWQnLAoJCQkJCQkJCSIkaW1n X2RpciIuRFMuIioiID0+ICdhZGlfbm90X3JlY29nbmlzZWQnLAoJCQkJCQkJKSwKCQkJKSwK CQkJJ2xhcmdlX2ZpbGUnID0+IGFycmF5KAoJCQkJJyonID0+IAkJYXJyYXkoCgkJCQkJCQkJ JyonID0+ICdhZGlfbGFyZ2VfZmlsZScsCgkJCQkJCQkJIiRmaWxlX2Jhc2VfcGF0aCIuRFMu IioiID0+ICdhZGlfbGFyZ2VfZmlsZScsCgkJCQkJCQkJIiRza2luX2RpciIuRFMuIioiID0+ ICdhZGlfbGFyZ2VfZmlsZScsCgkJCQkJCQkJIntleHRyYX0iLkRTLiIqIiA9PiAnYWRpX2xh cmdlX2ZpbGUnLAoJCQkJCQkJCSJ7c3R5bGV9Ii5EUy4iKiIgPT4gJ2FkaV9sYXJnZV9maWxl JywKCQkJCQkJCSksCgkJCSksCgkJCSdsYXJnZV9pbWFnZScgPT4gYXJyYXkoCgkJCQknKicg PT4gCQlhcnJheSgKCQkJCQkJCQknKicgPT4gJ2FkaV9sYXJnZV9pbWFnZV9maWxlJywKCQkJ CQkJCQkiJGltZ19kaXIiLkRTLiIqIiA9PiAnYWRpX2xhcmdlX2ltYWdlX2ZpbGUnLAoJCQkJ CQkJCSIkc2tpbl9kaXIiLkRTLiIqIiA9PiAnYWRpX2xhcmdlX2ltYWdlX2ZpbGUnLAoJCQkJ CQkJKSwKCQkJKSwKCQkJJ2xpbmtlZF9maWxlX3dyaXRhYmxlJyA9PiBhcnJheSgKLy8gCQkJ CScqJyA9PiAJCWFycmF5KCIkZmlsZV9iYXNlX3BhdGgiLkRTLiIqIiA9PiAnYWRpX25vdF93 cml0YWJsZScpLCAvLyBmaWxlcyB3aXRoIGRvZGd5IHBlcm1zIGRvbid0IHNlZW0gdG8gY2F1 c2UgYSBwcm9ibGVtIGluIFRYUCBhZG1pbiBhbnl3YXkKCQkJKSwKCgkJCSdsaW5rZWRfaW1h Z2Vfd3JpdGFibGUnID0+IGFycmF5KAoJCQkJJyonID0+IAkJYXJyYXkoIiRpbWdfZGlyIi5E Uy4iKlswLTlddC4qIiA9PiAnYWRpX25vdF93cml0YWJsZScpLCAvLyBvbmx5IHRodW1ibmFp bHMgd2l0aCBkb2RneSBwZXJtcyBjYXVzZSBwcm9ibGVtcyBpbiBUWFAgYWRtaW4gKHdpbGRj YXJkIGhlcmUgbGV0cyBzaDF0LmpwZyB0aHJvdWdoLCBidXQgZXhjZXB0aW9ucyB0aWRpZXMg dXApCgkJCSksCgkJCSdtYWNvcycgPT4gYXJyYXkoCgkJCQknKicgPT4gCQlhcnJheSgKCQkJ CQkJCQknLkRTX1N0b3JlJyA9PiAnYWRpX21hY29zX2ZpbGUnLAoJCQkJCQkJCSd0ZXh0cGF0 dGVybicuRFMuJy5EU19TdG9yZScgPT4gJ2FkaV9tYWNvc19maWxlJywKCQkJCQkJCQkiJGZp bGVfYmFzZV9wYXRoIi5EUy4iLkRTX1N0b3JlIiA9PiAnYWRpX21hY29zX2ZpbGUnLAoJCQkJ CQkJCSIkaW1nX2RpciIuRFMuIi5EU19TdG9yZSIgPT4gJ2FkaV9tYWNvc19maWxlJywKCQkJ CQkJCQkiJHNraW5fZGlyIi5EUy4iLkRTX1N0b3JlIiA9PiAnYWRpX21hY29zX2ZpbGUnLAoJ CQkJCQkJCSJ7c3R5bGV9Ii5EUy4iLkRTX1N0b3JlIiA9PiAnYWRpX21hY29zX2ZpbGUnLAoJ CQkJCQkJCSJ7ZXh0cmF9Ii5EUy4iLkRTX1N0b3JlIiA9PiAnYWRpX21hY29zX2ZpbGUnLAoJ CQkJCQkJCScuQmFja3VwaWNvbi5pY25zJyA9PiAnYWRpX21hY29zX2ZpbGUnLAoJCQkJCQkJ CSd0ZXh0cGF0dGVybicuRFMuJy5CYWNrdXBpY29uLmljbnMnID0+ICdhZGlfbWFjb3NfZmls ZScsCgkJCQkJCQkJIiRmaWxlX2Jhc2VfcGF0aCIuRFMuIi5CYWNrdXBpY29uLmljbnMiID0+ ICdhZGlfbWFjb3NfZmlsZScsCgkJCQkJCQkJIiRpbWdfZGlyIi5EUy4iLkJhY2t1cGljb24u aWNucyIgPT4gJ2FkaV9tYWNvc19maWxlJywKCQkJCQkJCQkiJHNraW5fZGlyIi5EUy4iLkJh Y2t1cGljb24uaWNucyIgPT4gJ2FkaV9tYWNvc19maWxlJywKCQkJCQkJCQkie3N0eWxlfSIu RFMuIi5CYWNrdXBpY29uLmljbnMiID0+ICdhZGlfbWFjb3NfZmlsZScsCgkJCQkJCQkJIntl eHRyYX0iLkRTLiIuQmFja3VwaWNvbi5pY25zIiA9PiAnYWRpX21hY29zX2ZpbGUnLAoJCQkJ CQkJKSwKCQkJCSc0LjgnID0+IAkJYXJyYXkoCgkJCQkJCQkJInRleHRwYXR0ZXJuIi5EUy4i cGx1Z2lucyIuRFMuIi5EU19TdG9yZSIgPT4gJ2FkaV9tYWNvc19maWxlJywKCQkJCQkJCQki dGV4dHBhdHRlcm4iLkRTLiJwbHVnaW5zIi5EUy4iLkJhY2t1cGljb24uaWNucyIgPT4gJ2Fk aV9tYWNvc19maWxlJywKCQkJCQkJCSksCgkJCSksCgkJCSdtaXNzaW5nJyA9PiBhcnJheSgK CQkJCScqJyA9PiAJCWFycmF5KAoJCQkJCQkJCScuaHRhY2Nlc3MnID0+ICRhZGlfZGV0cml0 dXNfbGFuZ19zdHJfbWlzc2luZywKCQkJCQkJCQknZmF2aWNvbi5pY28nID0+ICRhZGlfZGV0 cml0dXNfbGFuZ19zdHJfbWlzc2luZywKCQkJCQkJCQkie3N0eWxlfSIgPT4gJGFkaV9kZXRy aXR1c19sYW5nX3N0cl9taXNzaW5nLAoJCQkJCQkJCSJ7ZXh0cmF9IiA9PiAkYWRpX2RldHJp dHVzX2xhbmdfc3RyX21pc3NpbmcsCgkJCQkJCQkJJ3RleHRwYXR0ZXJuJy5EUy4nLmh0YWNj ZXNzJyA9PiAkYWRpX2RldHJpdHVzX2xhbmdfc3RyX21pc3NpbmcsCgkJCQkJCQkJIiRmaWxl X2Jhc2VfcGF0aCIuRFMuIi5odGFjY2VzcyIgPT4gJGFkaV9kZXRyaXR1c19sYW5nX3N0cl9t aXNzaW5nLAoJCQkJCQkJCSIkaW1nX2RpciIuRFMuIi5odGFjY2VzcyIgPT4gJGFkaV9kZXRy aXR1c19sYW5nX3N0cl9taXNzaW5nLAoJCQkJCQkJCSIkc2tpbl9kaXIiLkRTLiIuaHRhY2Nl c3MiID0+ICRhZGlfZGV0cml0dXNfbGFuZ19zdHJfbWlzc2luZywKCQkJCQkJCQkie3N0eWxl fSIuRFMuIi5odGFjY2VzcyIgPT4gJGFkaV9kZXRyaXR1c19sYW5nX3N0cl9taXNzaW5nLAoJ CQkJCQkJCSJ7ZXh0cmF9Ii5EUy4iLmh0YWNjZXNzIiA9PiAkYWRpX2RldHJpdHVzX2xhbmdf c3RyX21pc3NpbmcsCgkJCQkJCQkJIiRwbHVnaW5fY2FjaGVfZGlyIiA9PiAkYWRpX2RldHJp dHVzX2xhbmdfc3RyX21pc3NpbmcsCgkJCQkJCQkpLAoJCQkJJzQuOCcgPT4gCQlhcnJheSgK CQkJCQkJCQkidGV4dHBhdHRlcm4iLkRTLiJwbHVnaW5zIi5EUy4iLmh0YWNjZXNzIiA9PiAk YWRpX2RldHJpdHVzX2xhbmdfc3RyX21pc3NpbmcsCgkJCQkJCQkpLAoJCQkpLAoJCQknbm90 X2NzcycgPT4gYXJyYXkoCgkJCQknKicgPT4gCQlhcnJheSgne3N0eWxlfScuRFMuJyonID0+ ICdhZGlfZGV0cml0dXNfdW51c3VhbF9jc3MnKSwKCQkJKSwKCQkJJ25vdF9kaXInID0+IGFy cmF5KAoJCQkJJyonID0+IAkJYXJyYXkoJ3tleHRyYX0nID0+ICdhZGlfZGV0cml0dXNfbm90 X2RpcicpLAoJCQkpLAoJCQknbm90X2ltYWdlJyA9PiBhcnJheSgKCQkJCScqJyA9PiAJCWFy cmF5KCIkaW1nX2RpciIuRFMuIioiID0+ICdhZGlfbm90X2ltYWdlX2ZpbGUnKSwKCQkJKSwK CQkJJ25vdF9wbGFpbnRleHQnID0+IGFycmF5KAoJCQkJJyonID0+IAkJYXJyYXkoJyoud2Vi bWFuaWZlc3QnID0+ICdhZGlfbm90X3BsYWludGV4dCcpLAoJCQkpLAoJCQknbm90X3JlYWRh YmxlJyA9PiBhcnJheSgKCQkJCScqJyA9PiAJCWFycmF5KAoJCQkJCQkJCScqJyA9PiAnYWRp X25vdF9yZWFkYWJsZScsCgkJCQkJCQkJIiRpbWdfZGlyIi5EUy4iKiIgPT4gJ2FkaV9ub3Rf cmVhZGFibGUnLAoJCQkJCQkJCSIkZmlsZV9iYXNlX3BhdGgiLkRTLiIqIiA9PiAnYWRpX25v dF9yZWFkYWJsZScsCgkJCQkJCQkJIntzdHlsZX0iLkRTLiIqIiA9PiAnYWRpX25vdF9yZWFk YWJsZScsCgkJCQkJCQkJIntleHRyYX0iLkRTLiIqIiA9PiAnYWRpX25vdF9yZWFkYWJsZScs CgkJCQkJCQkJIiRwbHVnaW5fY2FjaGVfZGlyIiA9PiAnYWRpX25vdF9yZWFkYWJsZScsCgkJ CQkJCQkpLAoJCQkpLAoJCQknbm90X3JlY29nbmlzZWQnID0+IGFycmF5KAoJCQkJJyonID0+ IAkJYXJyYXkoCgkJCQkJCQkJJyonID0+ICdhZGlfbm90X3JlY29nbmlzZWQnLCAvLyBzdHVm ZiBpbiByb290CgkJCQkJCQkJJy4qJyA9PiAnYWRpX25vdF9yZWNvZ25pc2VkJywgLy8gaGlk ZGVuIGZpbGVzIGluIHJvb3QKCQkJCQkJCQkndGV4dHBhdHRlcm4nLkRTLicuKicgPT4gJ2Fk aV9ub3RfcmVjb2duaXNlZCcsIC8vIGhpZGRlbiBmaWxlcyBpbiB2YXJpb3VzIHBsYWNlcwoJ CQkJCQkJCSIkZmlsZV9iYXNlX3BhdGgiLkRTLiIuKiIgPT4gJ2FkaV9ub3RfcmVjb2duaXNl ZCcsCgkJCQkJCQkJIiRpbWdfZGlyIi5EUy4iLioiID0+ICdhZGlfbm90X3JlY29nbmlzZWQn LAoJCQkJCQkJCSIkc2tpbl9kaXIiLkRTLiIuKiIgPT4gJ2FkaV9ub3RfcmVjb2duaXNlZCcs CgkJCQkJCQkJIntzdHlsZX0iLkRTLiIuKiIgPT4gJ2FkaV9ub3RfcmVjb2duaXNlZCcsCgkJ CQkJCQkJIntleHRyYX0iLkRTLiIuKiIgPT4gJ2FkaV9ub3RfcmVjb2duaXNlZCcsCgkJCQkJ CQkpLAoJCQkpLAoJCQknbm90X3R4cF9pbWFnZV90eXBlJyA9PiBhcnJheSgKCQkJCScqJyA9 PiAJCWFycmF5KCIkaW1nX2RpciIuRFMuIioiID0+ICdhZGlfdW5zdXBwb3J0ZWRfaW1hZ2Vf dHlwZScpLAoJCQkpLAoJCQknbm90X3R4cF9pbWFnZV9kYicgPT4gYXJyYXkoCi8vIAkJCQkn KicgPT4gCQlhcnJheSgiJGltZ19kaXIiLkRTLiIqIiA9PiAnYWRpX25vbl9kYXRhYmFzZV9p bWFnZScpLCAvLyB3aWxsIGZsYWcgYWxsIGltYWdlcyAodHhwLWZvcm1hdCBvciBub3QpIG5v dCBsaW5rZWQgdG8gZGIgKHN1YmplY3QgdG8gdXNlciBleGNsdXNpb25zKQoJCQkpLAoJCQkn bm90X3dyaXRhYmxlJyA9PiBhcnJheSgKCQkJCScqJyA9PiAJCWFycmF5KAoJCQkJCQkJCSIk ZmlsZV9iYXNlX3BhdGgiID0+ICdhZGlfbm90X3dyaXRhYmxlJywKCQkJCQkJCQkiJGltZ19k aXIiID0+ICdhZGlfbm90X3dyaXRhYmxlJywKCQkJCQkJCQkiJHRlbXBkaXIiID0+ICdhZGlf bm90X3dyaXRhYmxlJywKCQkJCQkJCSksCgkJCQknNC43JyA9PiAJCWFycmF5KAoJCQkJCQkJ CSIkc2tpbl9kaXIiID0+ICdhZGlfbm90X3dyaXRhYmxlJywKCQkJCQkJCSksCgkJCQknNC44 JyA9PiAJCWFycmF5KAoJCQkJCQkJCSd0ZXh0cGF0dGVybicuRFMuJ3BsdWdpbnMnID0+ICdh ZGlfbm90X3dyaXRhYmxlJywKCQkJCQkJCSksCgkJCSksCgkJCSdub3RfeG1sJyA9PiBhcnJh eSgKCQkJCScqJyA9PiAJCWFycmF5KAoJCQkJCQkJCSdicm93c2VyY29uZmlnLnhtbCcgPT4g J2FkaV9ub3RfeG1sJywKCQkJCQkJCQknc2l0ZW1hcC54bWwnID0+ICdhZGlfbm90X3htbCcs CgkJCQkJCQkpLAoJCQkpLAoJCQkndW5saW5rZWRfZmlsZScgPT4gYXJyYXkoCgkJCQknKicg PT4gCQlhcnJheSgiJGZpbGVfYmFzZV9wYXRoIi5EUy4iKiIgPT4gJ2FkaV9ub3RfbGlua2Vk X2RiJyksCgkJCSksCgkJCSd1bmxpbmtlZF9pbWFnZScgPT4gYXJyYXkoCgkJCQknKicgPT4g CQlhcnJheSgiJGltZ19kaXIiLkRTLiIqIiA9PiAnYWRpX25vdF9saW5rZWRfZGInKSwKCQkJ KSwKCQkpOwoKCS8vIG1hcCB0ZXN0IHR5cGUgdG8gYW4gYWN0dWFsICdmdW5jdGlvbigpJywg dG9nZXRoZXIgd2l0aCAnbmVnYXRlJyBvcHRpb24KCSRhZGlfZGV0cml0dXNfZmlsZV9mdW5j ID0gYXJyYXkoCgkJJ25vdF9yZWNvZ25pc2VkJyA9PiBhcnJheSgnZnVuYycgPT4gJ2ZpbGVf ZXhpc3RzJywgJ25lZ2F0ZScgPT4gMCksCgkJJ2VtcHR5JyA9PiBhcnJheSgnZnVuYycgPT4g J2FkaV9kZXRyaXR1c19pc19lbXB0eScsICduZWdhdGUnID0+IDApLAoJCSdleGNlc3MnID0+ IGFycmF5KCdmdW5jJyA9PiAnYWRpX2RldHJpdHVzX2V4Y2VzcycsICduZWdhdGUnID0+IDAp LAoJCSdmb3VuZCcgPT4gYXJyYXkoJ2Z1bmMnID0+ICdmaWxlX2V4aXN0cycsICduZWdhdGUn ID0+IDApLAoJCSdpc19kaXInID0+IGFycmF5KCdmdW5jJyA9PiAnaXNfZGlyJywgJ25lZ2F0 ZScgPT4gMCksCgkJJ2xhcmdlX2ZpbGUnID0+IGFycmF5KCdmdW5jJyA9PiAnYWRpX2RldHJp dHVzX2lzX3NpemVhYmxlJywgJ25lZ2F0ZScgPT4gMCksCgkJJ2xhcmdlX2ltYWdlJyA9PiBh cnJheSgnZnVuYycgPT4gJ2FkaV9kZXRyaXR1c19pc19zaXplYWJsZScsICduZWdhdGUnID0+ IDApLAoJCSdsaW5rZWRfZmlsZV93cml0YWJsZScgPT4gYXJyYXkoJ2Z1bmMnID0+ICdpc193 cml0YWJsZScsICduZWdhdGUnID0+IDEpLAoJCSdsaW5rZWRfaW1hZ2Vfd3JpdGFibGUnID0+ IGFycmF5KCdmdW5jJyA9PiAnaXNfd3JpdGFibGUnLCAnbmVnYXRlJyA9PiAxKSwKCQknbWFj b3MnID0+IGFycmF5KCdmdW5jJyA9PiAnZmlsZV9leGlzdHMnLCAnbmVnYXRlJyA9PiAwKSwK CQknbWlzc2luZycgPT4gYXJyYXkoJ2Z1bmMnID0+ICdmaWxlX2V4aXN0cycsICduZWdhdGUn ID0+IDEpLAoJCSdub3RfY3NzJyA9PiBhcnJheSgnZnVuYycgPT4gJ2FkaV9kZXRyaXR1c19p c19ub3RfY3NzJywgJ25lZ2F0ZScgPT4gMCksCgkJJ25vdF9kaXInID0+IGFycmF5KCdmdW5j JyA9PiAnaXNfZGlyJywgJ25lZ2F0ZScgPT4gMSksCgkJJ25vdF9pbWFnZScgPT4gYXJyYXko J2Z1bmMnID0+ICdhZGlfZGV0cml0dXNfaXNfaW1hZ2UnLCAnbmVnYXRlJyA9PiAxKSwKCQkn bm90X3BsYWludGV4dCcgPT4gYXJyYXkoJ2Z1bmMnID0+ICdhZGlfZGV0cml0dXNfaXNfcGxh aW50ZXh0JywgJ25lZ2F0ZScgPT4gMSksCgkJJ25vdF90eHBfaW1hZ2VfZGInID0+IGFycmF5 KCdmdW5jJyA9PiAnYWRpX2RldHJpdHVzX2lzX3R4cF9pbWFnZV9mb3JtYXQnLCAnbmVnYXRl JyA9PiAxKSwKCQknbm90X3R4cF9pbWFnZV90eXBlJyA9PiBhcnJheSgnZnVuYycgPT4gJ2Fk aV9kZXRyaXR1c19pc190eHBfaW1hZ2VfdHlwZScsICduZWdhdGUnID0+IDEpLAoJCSdub3Rf cmVhZGFibGUnID0+IGFycmF5KCdmdW5jJyA9PiAnaXNfcmVhZGFibGUnLCAnbmVnYXRlJyA9 PiAxKSwKCQknbm90X3dyaXRhYmxlJyA9PiBhcnJheSgnZnVuYycgPT4gJ2lzX3dyaXRhYmxl JywgJ25lZ2F0ZScgPT4gMSksCgkJJ25vdF94bWwnID0+IGFycmF5KCdmdW5jJyA9PiAnYWRp X2RldHJpdHVzX2lzX3htbCcsICduZWdhdGUnID0+IDEpLAoJCSd1bmxpbmtlZF9maWxlJyA9 PiBhcnJheSgnZnVuYycgPT4gJ3N0cmxlbicsICduZWdhdGUnID0+IDApLCAvLyBsaXN0IG9u bHkgY29uc2lzdHMgb2YgdW5saW5rZWQgZmlsZXMgYW55d2F5LCBzbyBzdHJsZW4gbWF0Y2hl cyBhbGwKCQkndW5saW5rZWRfaW1hZ2UnID0+IGFycmF5KCdmdW5jJyA9PiAnc3RybGVuJywg J25lZ2F0ZScgPT4gMCksIC8vIGxpc3Qgb25seSBjb25zaXN0cyBvZiB1bmxpbmtlZCBpbWFn ZXMgYW55d2F5LCBzbyBzdHJsZW4gbWF0Y2hlcyBhbGwKCSk7CgoJLy8gZmlsZXN5c3RlbSBj aGVja3MgZGVwZW5kZW50IG9uIHNvbWV0aGluZyAoY29uZGl0aW9uIFRSVUUgLT4gcmVtb3Zl IHRlc3QpCgkkYWRpX2RldHJpdHVzX2ZpbGVfZGVwZW5kZW5jaWVzID0gYXJyYXkoCgkJJ3Jw YycgPT4gKCRlbmFibGVfeG1scnBjX3NlcnZlciA9PSAxKSwKCQkiJHBsdWdpbl9jYWNoZV9k aXIiID0+ICgkcGx1Z2luX2NhY2hlX2RpciA9PSAnJyksIC8vIHdvcmtzIGJ5IGZsdWtlLCBp ZiBubyBjYWNoZSB0aGVuIGVtcHR5ICgnJykgaXRlbSBpbmRleGVzIHJlbW92ZWQhCgkJJyou RFNfU3RvcmUnID0+IChwaHBfdW5hbWUoJ3MnKSA9PSAnRGFyd2luJyksCgkJJyouQmFja3Vw aWNvbi5pY25zJyA9PiAocGhwX3VuYW1lKCdzJykgPT0gJ0RhcndpbicpLAoJKTsKCgkvLz8/ PyBGSUxFU1lTVEVNIEVYQ0VQVElPTlMKCS8vIGZpbHRlciB3aWxkY2FyZCBpdGVtczogYXJy YXkoJ3Rlc3QgbmFtZScgPT4gYXJyYXkgb2YgZmlsZXMvd2lsZGNhcmRzKSAtIGkuZS4gaXRl bXMgdG8gYmUgZXhjbHVkZWQgZnJvbSB0ZXN0CgkvLyBwYXRoIGNvbXBsZXRlbmVzcyBjaGVj a2VkIGxhdGVyIChpbiBhZGlfZGV0cml0dXNfYWRtaW4oKSkKCS8vIElOU1RBTEwudHh0ICYg VVBHUkFERS50eHQgZmlsZXMgaW50cm9kdWNlZCBUWFAgNC44LjUKCSRhZGlfZGV0cml0dXNf ZmlsZV9leGNlcHRpb25zID0gYXJyYXkoCgkJJyonID0+IGFycmF5KCksIC8vIHNldCBmcm9t IHVzZXIgJ3ByZWYgYWRpX2RldHJpdHVzX2lnbm9yZV9maWxlX2l0ZW1zJyAodXNlZCBmb3Ig YWxsIGZpbGUgdGVzdHMpCgkJJ2VtcHR5JyA9PiBhcnJheSgnY2dpLWJpbicpLAoJCSdmb3Vu ZCcgPT4gYXJyYXkoCgkJCQknaW5kZXgucGhwJywgJ2Nzcy5waHAnLCAnSElTVE9SWS50eHQn LCAnSU5TVEFMTC50eHQnLCAnTElDRU5TRS50eHQnLCAnVVBHUkFERS50eHQnLCAnUkVBRE1F LnR4dCcsICcuaHRhY2Nlc3MtZGlzdCcgLy8gcHVra2EgVFhQIHN0dWZmIGluIHdlYnNpdGUg cm9vdAoJCQkJLCAnY2dpLWJpbicsICdyb2JvdHMudHh0JywgJy5mdHBxdW90YScsICcud2Vs bC1rbm93bicgLy8ga29zaGVyIGhvc3RpbmcgYml0cyAmIGJvYnMgaW4gd2Vic2l0ZSByb290 CgkJCSksCgkJJ2xpbmtlZF9maWxlX3dyaXRhYmxlJyA9PiAkYWRpX2RldHJpdHVzX3VubGlu a2VkX2ZpbGVzLCAvLyBsaW5rZWQgZmlsZSB0ZXN0IG5vdCBpbnRlcmVzdGVkIGluIG5vbi1s aW5rZWQgZmlsZXMKCQknbGlua2VkX2ltYWdlX3dyaXRhYmxlJyA9PiAkYWRpX2RldHJpdHVz X3VubGlua2VkX2ltYWdlcywgLy8gbGlua2VkIGltYWdlIHRlc3Qgbm90IGludGVyZXN0ZWQg aW4gbm9uLWxpbmtlZCBpbWFnZXMKCQknbm90X3JlY29nbmlzZWQnID0+IGFycmF5KCdmaWxl cycsICdpbWFnZXMnLCAnanMnLCAndGV4dHBhdHRlcm4nLCAndGhlbWVzJyksIC8vIG5vdF9y ZWNvZ25pc2VkIGV4Y2VwdGlvbiBsaXN0IGFsc28gYm9vc3RlZCBmcm9tIGV4aXN0aW5nIGxp c3RzIChiZWxvdykKCQknbm90X3R4cF9pbWFnZV9kYicgPT4gYXJyYXkoKSwgLy8gc2V0IGZy b20gdXNlciBwcmVmICdhZGlfZGV0cml0dXNfdW5sa2RfaW1nX2V4Y24nCgkJJ25vdF90eHBf aW1hZ2VfdHlwZScgPT4gYXJyYXkoKSwgLy8gc2V0IGZyb20gdXNlciBwcmVmICdhZGlfZGV0 cml0dXNfdW5sa2RfaW1nX2V4Y24nCgkJJ3VubGlua2VkX2ZpbGUnID0+IGFycmF5X21lcmdl KCRhZGlfZGV0cml0dXNfbGlua2VkX2ZpbGVzLCAkYWRpX2RldHJpdHVzX2ZpbGVfZGlycyks IC8vIGlnbm9yZSBsaW5rZWQgZmlsZXMsIHN1YmRpcnMgLi4uIGFsc28gdXBkYXRlZCB3aXRo IHVzZXIgcHJlZiAnYWRpX2RldHJpdHVzX3VubGtkX2ZpbGVfZXhjbicKCQkndW5saW5rZWRf aW1hZ2UnID0+IGFycmF5X21lcmdlKCRhZGlfZGV0cml0dXNfbGlua2VkX2ltYWdlcywgJGFk aV9kZXRyaXR1c19ub25fdHhwX2ltYWdlcywgJGFkaV9kZXRyaXR1c19pbWFnZV9kaXJzKSwg Ly8gaWdub3JlIGxpbmtlZCBpbWFnZXMsIG5vbi1UWFAgZmlsZW5hbWVzLCBzdWJkaXJzIC4u LiBhbHNvIHVwZGF0ZWQgd2l0aCB1c2VyIHByZWYgJ2FkaV9kZXRyaXR1c191bmxrZF9pbWdf ZXhjbicKCSk7CgkvLyAnbm90X3JlY29nbmlzZWQnIC0gYWRkIGluIGV4Y2VwdGlvbnMgd2l0 aCBzdHVmZiB0aGF0J3MgbG9va2VkIGZvciBlbHNld2hlcmUKCSRhZGlfZGV0cml0dXNfZmls ZV9leGNlcHRpb25zWydub3RfcmVjb2duaXNlZCddID0gYXJyYXlfbWVyZ2UoJGFkaV9kZXRy aXR1c19maWxlX2V4Y2VwdGlvbnNbJ25vdF9yZWNvZ25pc2VkJ10sICRhZGlfZGV0cml0dXNf ZmlsZV9leGNlcHRpb25zWydmb3VuZCddKTsKCS8vICdub3RfcmVjb2duaXNlZCcgLSBhZGQg aW4gZXZlcnl0aGluZyB1bmRlciBmb3VuZC9tYWNvcy9taXNzaW5nIChlLmcuIGZvdW5kLyos IGZvdW5kLzQuNiwgZm91bmQvNC43LCBtYWNvcy8qLCBtaXNzaW5nLyopCglmb3JlYWNoIChh cnJheSgnZm91bmQnLCAnbWFjb3MnLCAnbWlzc2luZycsICdub3RfcGxhaW50ZXh0JywgJ25v dF94bWwnKSBhcyAkc2V0KQoJCWZvcmVhY2ggKCRhZGlfZGV0cml0dXNfZmlsZV9raXRbJHNl dF0gYXMgJHR4cF92ZXJzaW9uID0+ICRpdGVtcykKCQkJJGFkaV9kZXRyaXR1c19maWxlX2V4 Y2VwdGlvbnNbJ25vdF9yZWNvZ25pc2VkJ10gPSBhcnJheV9tZXJnZSgkYWRpX2RldHJpdHVz X2ZpbGVfZXhjZXB0aW9uc1snbm90X3JlY29nbmlzZWQnXSwgYXJyYXlfa2V5cygkYWRpX2Rl dHJpdHVzX2ZpbGVfa2l0WyRzZXRdWyR0eHBfdmVyc2lvbl0pKTsKCgkvLz8/PyBQTFVHSU4g S0lUCgkvLyBkZWZpbmUgbGlzdCBvZiB0ZXN0cywgVFhQIHZlcnNpb25zLCB0YWJsZS93YXJu aW5nX2xhbmdfc3RyaW5nIE9SIHRhYmxlIGNvbW1hIGxpc3Qvd2FybmluZ19sYW5nX3N0cmlu ZwoJLy8gYXJyYXkoInRlc3QgdHlwZSIgPT4gYXJyYXkoInR4cCB2ZXJzaW9uIiA9PiBhcnJh eSgiZGIgdGFibGUocykiLCAid2FybmluZ19sYW5nX3N0cmluZyIpKSkKCSRhZGlfZGV0cml0 dXNfcGx1Z2luX2tpdCA9CgkJYXJyYXkoCgkJCSdpbmFjdGl2ZScgPT4JYXJyYXkoCgkJCQkJ CQkJJyonID0+IGFycmF5KAoJCQkJCQkJCQkndHhwX3BsdWdpbicgPT4gJ2FkaV9ub3RfYWN0 aXZlJywKCQkJCQkJCQkpLAoJCQkJCQkJKSwKCQkJJ21vZGlmaWVkJyA9PglhcnJheSgKCQkJ CQkJCQknKicgPT4gYXJyYXkoCgkJCQkJCQkJCSd0eHBfcGx1Z2luJyA9PiAnbW9kaWZpZWQn LAoJCQkJCQkJCSksCgkJCQkJCQkpLAoJCQknbm90X2ZvdW5kJyA9PglhcnJheSgKCQkJCQkJ CQknKicgPT4gYXJyYXkoCgkJCQkJCQkJCSd0ZXh0cGF0dGVybiwgdHhwX2Zvcm0sIHR4cF9w YWdlJyA9PiAnYWRpX25vdF9yZWZlcmVuY2VkJywKCQkJCQkJCQkpLAoJCQkJCQkJKSwKCQkJ J2xlZnRvdmVycycgPT4JYXJyYXkoCgkJCQkJCQkJJzQuOCcgPT4gJ2FkaV9wbHVnaW5fZmls ZXNfZm91bmQnLAoJCQkJCQkJKSwKCQkJJ29yZGVyX21pc21hdGNoJyA9PglhcnJheSgKCQkJ CQkJCQknNC44JyA9PiAnYWRpX3BsdWdpbl9vcmRlcl9taXNtYXRjaCcsCgkJCQkJCQkpLAoJ CQkndHlwZV9taXNtYXRjaCcgPT4JYXJyYXkoCgkJCQkJCQkJJzQuOCcgPT4gJ2FkaV9wbHVn aW5fdHlwZV9taXNtYXRjaCcsCgkJCQkJCQkpLAoJCQknY29kZV9taXNtYXRjaCcgPT4JYXJy YXkoCgkJCQkJCQkJJzQuOCcgPT4gJ2FkaV9wbHVnaW5fY29kZV9taXNtYXRjaCcsCgkJCQkJ CQkpLAoJCQknbWlzc2luZ19maWxlJyA9PglhcnJheSgKCQkJCQkJCQknNC44JyA9PiAnbWlz c2luZ19maWxlcycsCgkJCQkJCQkpLAoJCSk7CgoJLy8gbWFwIHBsdWdpbiAidGVzdCIgdG8g YWRpX2RldHJpdHVzX3Byb2Nlc3NfcGx1Z2luc19kYigpIGFuZCBXSEVSRSBjbGF1c2UgKG9y IGFycmF5IGxpc3Qgb2YgZmllbGRzIGluIHdoaWNoIHRvIHNlYXJjaCkKCSRhZGlfZGV0cml0 dXNfcGx1Z2luX2Z1bmMgPSBhcnJheSgKCQknaW5hY3RpdmUnID0+IGFycmF5KCdmdW5jJyA9 PiAnYWRpX2RldHJpdHVzX3Byb2Nlc3NfcGx1Z2luc19kYicsICd3aGVyZScgPT4gJ3N0YXR1 cyA9IDAnKSwKCQknbW9kaWZpZWQnID0+IGFycmF5KCdmdW5jJyA9PiAnYWRpX2RldHJpdHVz X3Byb2Nlc3NfcGx1Z2luc19kYicsICd3aGVyZScgPT4gJ05PVCBjb2RlIDw9PiBjb2RlX3Jl c3RvcmUnKSwKCQknbm90X2ZvdW5kJyA9PiBhcnJheSgnZnVuYycgPT4gJ2FkaV9kZXRyaXR1 c19wcm9jZXNzX3BsdWdpbnNfZGInLCAnd2hlcmUnID0+IGFycmF5KCd0ZXh0cGF0dGVybicg PT4gYXJyYXkoJ1RpdGxlJywgJ0JvZHknLCAnRXhjZXJwdCcpLCAndHhwX2Zvcm0nID0+IGFy cmF5KCdGb3JtJyksICd0eHBfcGFnZScgPT4gYXJyYXkoJ3VzZXJfaHRtbCcpKSksCgkJJ2xl ZnRvdmVycycgPT4gYXJyYXkoJ2Z1bmMnID0+ICdhZGlfZGV0cml0dXNfcHJvY2Vzc19wbHVn aW5zX2xlZnRvdmVycycpLAoJCSdvcmRlcl9taXNtYXRjaCcgPT4gYXJyYXkoJ2Z1bmMnID0+ ICdhZGlfZGV0cml0dXNfcHJvY2Vzc19wbHVnaW5zX21pc21hdGNoJyksCgkJJ3R5cGVfbWlz bWF0Y2gnID0+IGFycmF5KCdmdW5jJyA9PiAnYWRpX2RldHJpdHVzX3Byb2Nlc3NfcGx1Z2lu c19taXNtYXRjaCcpLAoJCSdjb2RlX21pc21hdGNoJyA9PiBhcnJheSgnZnVuYycgPT4gJ2Fk aV9kZXRyaXR1c19wcm9jZXNzX3BsdWdpbnNfbWlzbWF0Y2gnKSwKCQknbWlzc2luZ19maWxl JyA9PiBhcnJheSgnZnVuYycgPT4gJ2FkaV9kZXRyaXR1c19wcm9jZXNzX3BsdWdpbnNfbWlz c2luZ19maWxlJywgJ2ZpbGUnID0+ICdtYW5pZmVzdC5qc29uJyksCgkpOwoKfQoKZnVuY3Rp b24gYWRpX2RldHJpdHVzX3N3ZWVwKCkgewovLyB0aGUgbWFpbiBkb2luZ3MKCWdsb2JhbCAk ZmlsZV9iYXNlX3BhdGgsICRpbWdfZGlyLCAkYWRpX2RldHJpdHVzX2ZpbGVfa2l0LCAkYWRp X2RldHJpdHVzX3BsdWdpbl9raXQsICRhZGlfZGV0cml0dXNfZmlsZV9mdW5jLCAkYWRpX2Rl dHJpdHVzX3BsdWdpbl9mdW5jLCAkYWRpX2RldHJpdHVzX2ZpbGVfZXhjZXB0aW9ucywgJGFk aV9kZXRyaXR1c19kZWJ1ZywgJHBhdGhfdG9fc2l0ZSwgJGFkaV9kZXRyaXR1c19maWxlX3Np emUsICRhZGlfZGV0cml0dXNfaW1hZ2Vfc2l6ZSwgJGFkaV9kZXRyaXR1c19pZ25vcmVfcGx1 Z2lucywgJHBsdWdpbl9jYWxsYmFjaywgJGFkaV9kZXRyaXR1c19hbGxfZmlsZXMsICRhZGlf ZGV0cml0dXNfbGlua2VkX2ZpbGVzLCAkYWRpX2RldHJpdHVzX21pc3NpbmdfZmlsZV9maWxl cywgJGFkaV9kZXRyaXR1c19hbGxfaW1hZ2VzLCAkYWRpX2RldHJpdHVzX2xpbmtlZF9pbWFn ZXMsICRhZGlfZGV0cml0dXNfbWlzc2luZ19pbWdfZmlsZXMsICRhZGlfZGV0cml0dXNfbGFu Z19zdHJfbWlzc2luZywgJGFkaV9kZXRyaXR1c190eHA0ODA7CgoJJGRlYnVnID0gYXJyYXko KTsKCSRkZWJ1Z1tdID0gX19GVU5DVElPTl9fLicoKTonOwoKCS8vPz8/IEZJTEVTWVNURU0g VEVTVFMKCWVjaG8gaGVkKGdUeHQoJ2FkaV9maWxlc3lzdGVtJyksIDIpOwoKCSRyZXN1bHRz ID0gYXJyYXkoKTsKCSRhZGlfZGV0cml0dXNfdW5sa2RfZmlsZV90aHJlc2hvbGQgPSBhZGlf ZGV0cml0dXNfcHJlZignYWRpX2RldHJpdHVzX3VubGtkX2ZpbGVfdGhyZXNob2xkJyk7Cglm b3JlYWNoICgkYWRpX2RldHJpdHVzX2ZpbGVfa2l0IGFzICR0ZXN0ID0+ICRncm91cCkgewoJ CSRmdW5jID0gJGFkaV9kZXRyaXR1c19maWxlX2Z1bmNbJHRlc3RdWydmdW5jJ107CgkJJG5l Z2F0ZSA9ICRhZGlfZGV0cml0dXNfZmlsZV9mdW5jWyR0ZXN0XVsnbmVnYXRlJ107CgkJJGRl YnVnW10gPSBici4iVEVTVD0kdGVzdCwgRlVOQz0kZnVuYyIuKCRuZWdhdGUgPyAnIFtuZWdh dGVkXScgOiAnJyk7CgkJZm9yZWFjaCAoJGdyb3VwIGFzICR2ZXJzaW9uID0+ICRwYWlyKSB7 CgkJCSRkZWJ1Z1tdID0gIi0gVkVSU0lPTj0kdmVyc2lvbiI7CgkJCWlmICh2ZXJzaW9uX2Nv bXBhcmUodHhwX3ZlcnNpb24sICR2ZXJzaW9uLCAnPj0nKSB8fCAoJHZlcnNpb24gPT0gJyon KSkgewoJCQkJZm9yZWFjaCAoJHBhaXIgYXMgJGl0ZW0gPT4gJHdhcm5pbmcpIHsKCQkJCQkk ZGVidWdbXSA9ICItLSBMT09LSU5HIEZPUjogJGl0ZW0iOwoJCQkJCSRpdGVtcyA9IGFycmF5 KCk7CgkJCQkJaWYgKHN0cnBvcygkaXRlbSwgJyonKSAhPT0gRkFMU0UpIHsgLy8gaWYgKiB3 aWxkY2FyZCB0aGVuIGRvIGxpc3RpbmcKCQkJCQkJLy8gYWRkIHBhdGhfdG9fc2l0ZSBpZiBt aXNzaW5nCgkJCQkJCSRwYXRoID0gYWRpX2RldHJpdHVzX3NpdGVfcGF0aCgkaXRlbSk7CgkJ CQkJCS8vIGdldCBpdGVtcyBmcm9tIGZpbGVzeXN0ZW0gKGluY2x1ZGluZyAuaGlkZGVuKQoJ CQkJCQkkaXRlbXMgPSBnbG9iKCRwYXRoLCBHTE9CX0JSQUNFKTsKCQkJCQkJLy8gbG9zZSAn LicgYW5kICcuLicgZGlyZWN0b3J5IGFsaWFzZXMKCQkJCQkJZm9yZWFjaCAoJGl0ZW1zIGFz ICRpbmRleCA9PiAkaXRlbSkKCQkJCQkJCWlmIChzdWJzdHIoJGl0ZW0sIC0xKSA9PSAnLicp IHsgLy8gZW5kcyB3aXRoIGRvdCBlLmcuICcuJyBvciAnLi4nCgkJCQkJCQkJJGRlYnVnW10g PSAiUkVNT1ZFRCAoRElSRUNUT1JZIEFMSUFTKTogJGl0ZW0iOwoJCQkJCQkJCXVuc2V0KCRp dGVtc1skaW5kZXhdKTsKCQkJCQkJCX0KCQkJCQkJJGRlYnVnW10gPSAiLS0gV0lMRENBUkQg TElTVDogIi5pbXBsb2RlKCcsICcsICRpdGVtcyk7CgkJCQkJfQoJCQkJCWVsc2UgLy8gc2lu Z2xlIGl0ZW0sIG5vIHdpbGRjYXJkCgkJCQkJCSRpdGVtc1tdID0gYWRpX2RldHJpdHVzX3Np dGVfcGF0aCgkaXRlbSk7IC8vIGFkZCBwYXRoX3RvX3NpdGUgaWYgbWlzc2luZwoJCQkJCS8v IGV4Y2VwdGlvbnMKCQkJCQlpZiAoaXNzZXQoJGFkaV9kZXRyaXR1c19maWxlX2V4Y2VwdGlv bnNbJHRlc3RdKSB8fCAkYWRpX2RldHJpdHVzX2ZpbGVfZXhjZXB0aW9uc1snKiddKSB7CgkJ CQkJCSRwYXR0ZXJucyA9IGlzc2V0KCRhZGlfZGV0cml0dXNfZmlsZV9leGNlcHRpb25zWyR0 ZXN0XSkgPyAkYWRpX2RldHJpdHVzX2ZpbGVfZXhjZXB0aW9uc1skdGVzdF0gOiBhcnJheSgp OwoJCQkJCQlpZiAoJGFkaV9kZXRyaXR1c19maWxlX2V4Y2VwdGlvbnNbJyonXSkKCQkJCQkJ CSRwYXR0ZXJucyA9IGFycmF5X21lcmdlKCRwYXR0ZXJucywgJGFkaV9kZXRyaXR1c19maWxl X2V4Y2VwdGlvbnNbJyonXSk7CgkJCQkJCSRkZWJ1Z1tdID0gIiAoRVhDRVBUSU9OUzogIi5p bXBsb2RlKCcsICcsICRwYXR0ZXJucykuJyknLmJyLiItLSBJVEVNUzogIi5pbXBsb2RlKCcs ICcsICRpdGVtcyk7CgkJCQkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaW5kZXggPT4gJGl0ZW0p IHsgLy8gcmVtb3ZlIGV4Y2VwdGVkIGl0ZW1zCgkJCQkJCQkkbWF0Y2hlcyA9IGFycmF5KCk7 CgkJCQkJCQlmb3JlYWNoICgkcGF0dGVybnMgYXMgJHBhdHRlcm4pIHsgLy8gY2hlY2sgZm9y IG1hdGNoZXMgJiByZWNvcmQgdGhlbQoJCQkJCQkJCWlmIChpbl9hcnJheShUUlVFLCBhcnJh eV9tYXAoJ2ZubWF0Y2gnLCBhcnJheSgkcGF0dGVybiksIGFycmF5KCRpdGVtKSwgYXJyYXko Rk5NX1BBVEhOQU1FKSksIFRSVUUpKSAvLyB1c2UgRk5NX1BBVEhOQU1FIGZsYWcgZWxzZSAq Lnh4eCBtYXRjaGVzIGluIGFsbCBzdWJkaXJzCgkJCQkJCQkJCSRtYXRjaGVzW10gPSAkcGF0 dGVybjsKCQkJCQkJCX0KCQkJCQkJCWlmICgkbWF0Y2hlcykgewoJCQkJCQkJCXVuc2V0KCRp dGVtc1skaW5kZXhdKTsKCQkJCQkJCQkkZGVidWdbXSA9ICItLS0gRVhDRVBUSU9OICgiLmlt cGxvZGUoJywnLCAkbWF0Y2hlcykuIik6ICRpdGVtIjsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJ CX0KCQkJCQkvLyBwcm9jZXNzIGl0ZW1zCgkJCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRwYXRo KSB7CgkJCQkJCSRkZWJ1Z1tdID0gIi0tLSBJVEVNPSRwYXRoIChNSU1FLUNPTlRFTlQtVFlQ RT0iLihpc19yZWFkYWJsZSgkcGF0aCkgPyBtaW1lX2NvbnRlbnRfdHlwZSgkcGF0aCkgOiAn Tk9UIFJFQURBQkxFJykuJyksIFRFU1Q9Jy4kdGVzdC4nLCBGVU5DPScuJGZ1bmMuJywgTkVH QVRFPScuJG5lZ2F0ZTsKCQkJCQkJaWYgKCgkZnVuYyA9PSAnYWRpX2RldHJpdHVzX2V4Y2Vz cycpKSB7IC8vIGNoZWNrIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgZmlsZXMKCQkJCQkJCWZvcmVh Y2ggKGFkaV9kZXRyaXR1c19leGNlc3MoJHBhdGgsICRkZWJ1ZykgYXMgJGV4dG4gPT4gJGNv dW50KQoJCQkJCQkJCWlmICgkY291bnQgPiAkYWRpX2RldHJpdHVzX3VubGtkX2ZpbGVfdGhy ZXNob2xkKQoJCQkJCQkJCQkkcmVzdWx0c1tdID0gJHBhdGguRFMuc3Ryb25nKCIqLiRleHRu IikuJyAoJy5zcGFuKGdUeHQoJHdhcm5pbmcsIGFycmF5KCd7bnVtYmVyfScgPT4gJGNvdW50 KSksICcgY2xhc3M9Indhcm5pbmciJykuJyknOwoJCQkJCQl9CgkJCQkJCWVsc2UgaWYgKCgk dGVzdCA9PSAnbm90X3JlY29nbmlzZWQnKSAmJiBpc19yZWFkYWJsZSgkcGF0aCkpIHsgLy8g bm90X3JlY29nbmlzZWQgaXRlbXMgKGJ1dCBvbmx5IGlmIHJlYWRhYmxlKQoJCQkJCQkJaWYg KCFhZGlfZGV0cml0dXNfaXNfZW1wdHkoJHBhdGgpICYmICFpc19pbnQoYWRpX2RldHJpdHVz X2lzX2ltYWdlKCRwYXRoKSkpIHsgLy8gaWdub3JlIGVtcHRpZXMgKGRlYWx0IHdpdGggZWxz ZXdoZXJlKSAmIEdFTlVJTkUgaW1hZ2VzIChjb3ogdGhleSdyZSBwcm9iYWJseSBmYXZpY29u cykKCQkJCQkJCQkkcmVzdWx0c1tdID0gZGlybmFtZSgkcGF0aCkuRFMuc3Ryb25nKGJhc2Vu YW1lKCRwYXRoKSkuJyAoJy5zcGFuKGdUeHQoJHdhcm5pbmcpLCAnIGNsYXNzPSJ3YXJuaW5n IicpLicpJzsKCQkJCQkJCQkkZGVidWdbXSA9ICItLS0gV0FSTklORz0kd2FybmluZyI7CgkJ CQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQkJJGRlYnVnW10gPSAiLS0tIElHTk9SRUQgKEVN UFRZL05PVCBHRU5VSU5FIElNQUdFKTogJHBhdGgiOwoJCQkJCQl9CgkJCQkJCWVsc2UgaWYg KCgkZnVuYygkcGF0aCkgJiYgISRuZWdhdGUpIHx8ICghJGZ1bmMoJHBhdGgpICYmICRuZWdh dGUpKSB7IC8vIGdlbmVyYWwgdGVzdHMgYXMgcGVyIGtpdAoJCQkJCQkJJHN1cHBsZW1lbnRh cnkgPSAnJzsKCQkJCQkJCWlmICgkZnVuYyA9PSAnYWRpX2RldHJpdHVzX2lzX3NpemVhYmxl JykgJHN1cHBsZW1lbnRhcnkgPSAnICZuZGFzaDsgJy5hZGlfZGV0cml0dXNfZnJvbV9ieXRl cygkZnVuYygkcGF0aCkpOwoJCQkJCQkJaWYgKCRmdW5jID09ICdhZGlfZGV0cml0dXNfaXNf bm90X2NzcycpICRzdXBwbGVtZW50YXJ5ID0gJyAmbmRhc2g7ICcuJGZ1bmMoJHBhdGgpOwoJ CQkJCQkJJGRlYnVnW10gPSAiLS0tIFdBUk5JTkc9JHdhcm5pbmcgJHN1cHBsZW1lbnRhcnki OwoJCQkJCQkJaWYgKCgkdGVzdCA9PSAnbWlzc2luZycpICYmICFpc19yZWFkYWJsZShkaXJu YW1lKCRwYXRoKSkpIHsgLy8gZG9uJ3QgbW9hbiBhYm91dCBtaXNzaW5nIGl0ZW0gaWYgcGFy ZW50IGRpcmVjdG9yeSBub3QgcmVhZGFibGUKCQkJCQkJCQkkZGVidWdbXSA9ICItLS0gSUdO T1JFRCAoUEFSRU5UIERJUkVDVE9SWSBOT1QgUkVBREFCTEUpOiAiLmRpcm5hbWUoJHBhdGgp OwoJCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQkJfQoJCQkJCQkJJHJlc3VsdHNbXSA9IGRpcm5h bWUoJHBhdGgpLkRTLnN0cm9uZyhiYXNlbmFtZSgkcGF0aCkpLicgKCcuc3BhbihnVHh0KCR3 YXJuaW5nKS4kc3VwcGxlbWVudGFyeSwgJyBjbGFzcz0id2FybmluZyInKS4nKSc7CgkJCQkJ CX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQkJJGRlYnVnW10gPSAnLSBOT1QgQVBQ TElDQUJMRSc7CgkJfQoJfQoKCS8vIGRhdGFiYXNlLWxpbmtlZCBmaWxlcyBtaXNzaW5nIGZy b20gZmlsZXN5c3RlbQoJJGFkaV9kZXRyaXR1c19taXNzaW5nX2ZpbGVfZmlsZXMgPSBhcnJh eV9kaWZmKCRhZGlfZGV0cml0dXNfbGlua2VkX2ZpbGVzLCAkYWRpX2RldHJpdHVzX2FsbF9m aWxlcyk7Cglmb3JlYWNoICgkYWRpX2RldHJpdHVzX21pc3NpbmdfZmlsZV9maWxlcyBhcyAk ZmlsZSkKCQkkcmVzdWx0c1tdID0gJGZpbGVfYmFzZV9wYXRoLkRTLnN0cm9uZyhiYXNlbmFt ZSgkZmlsZSkpLicgKCcuc3BhbihnVHh0KCRhZGlfZGV0cml0dXNfbGFuZ19zdHJfbWlzc2lu ZyksICcgY2xhc3M9Indhcm5pbmciJykuJyknOwoKCS8vIGRhdGFiYXNlLWxpbmtlZCBpbWFn ZSBmaWxlcyBtaXNzaW5nIGZyb20gZmlsZXN5c3RlbQogCSRhZGlfZGV0cml0dXNfbWlzc2lu Z19pbWdfZmlsZXMgPSBhcnJheV9kaWZmKCRhZGlfZGV0cml0dXNfbGlua2VkX2ltYWdlcywg JGFkaV9kZXRyaXR1c19hbGxfaW1hZ2VzKTsKCWZvcmVhY2ggKCRhZGlfZGV0cml0dXNfbWlz c2luZ19pbWdfZmlsZXMgYXMgJGZpbGUpCgkJJHJlc3VsdHNbXSA9ICRwYXRoX3RvX3NpdGUu RFMuJGltZ19kaXIuRFMuc3Ryb25nKGJhc2VuYW1lKCRmaWxlKSkuJyAoJy5zcGFuKGdUeHQo JGFkaV9kZXRyaXR1c19sYW5nX3N0cl9taXNzaW5nKSwgJyBjbGFzcz0id2FybmluZyInKS4n KSc7CgoJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIGVjaG8gaW1wbG9kZShiciwgJGRlYnVn KS5icjsKCgkvLyBvdXRwdXQgZmlsZXN5c3RlbSByZXN1bHRzCglzb3J0KCRyZXN1bHRzKTsK CWVjaG8gZ3JhZigkcmVzdWx0cyA/IGltcGxvZGUoYnIsICRyZXN1bHRzKS5ici5zdHJvbmco dGFnKGdUeHQoJ2FkaV93YXJuaW5nc19mb3VuZCcsIGFycmF5KCd7bnVtYmVyfScgPT4gY291 bnQoJHJlc3VsdHMpKSksICdlbScpKSA6IHRhZyhnVHh0KCdhZGlfbm9fd2FybmluZ3MnKSwg J2VtJykpOwoKCS8vPz8/IFBMVUdJTiBURVNUUwoJZWNobyBoZWQoZ1R4dCgndGFiX3BsdWdp bnMnKSwgMik7CgoJJGRlYnVnID0gJHJlc3VsdHMgPSAkbm90ZXMgPSBhcnJheSgpOwoKCS8v IG1ha2UgdXAgYXJyYXlzIG9mIHBlcnRpbmVudCBwbHVnaW4gaW5mb3JtYXRpb24KCS8vIGFs bCBUWFAgdmVyc2lvbnMgLSBsaXN0IG9mIGRhdGFiYXNlIGluc3RhbGxlZCBwbHVnaW5zCgkk cm93cyA9IHNhZmVfcm93cygnbmFtZSwgdHlwZSwgbG9hZF9vcmRlciwgbWQ1KGNvZGUpIEFT IGxpdmVfbWQ1JywgJ3R4cF9wbHVnaW4nLCAnMSBPUkRFUiBCWSBuYW1lJyk7IC8vIGdldCBN RDUgb2YgbGl2ZSBjb2RlIChmb3Igc3Vic2VxdWVudCBjaGVjayBhZ2FpbnN0IHBsdWdpbnMg ZGlyIGNvZGUpIC4uLiAnbWQ1X2NvZGUnIGlzIGZvciBvcmlnaW5hbCBjb2RlCgkkaW5zdGFs bGVkX3BsdWdpbnMgPSBhcnJheV9jb2x1bW4oJHJvd3MsICduYW1lJyk7IC8vIHNpbXBsZSBs aXN0IG9mIHBsdWdpbiBuYW1lcwoJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIHsKCQllY2hv ICJBTEwgSU5TVEFMTEVEIFBMVUdJTlM6IjsKCQlkbXAoJGluc3RhbGxlZF9wbHVnaW5zKTsK CX0KCS8vIFRYUCA0LjgrIC0gcGx1Z2luIGZpbGVzIG9uIGRpc2sKCWlmIChkZWZpbmVkKCdQ TFVHSU5QQVRIJykpIHsKCQkvLyBwbHVnaW4gZGlycwoJCSRwbHVnaW5fZGlycyA9IGFycmF5 X21hcCgnYmFzZW5hbWUnLCBnbG9iKCRwYXRoX3RvX3NpdGUuRFMuJ3RleHRwYXR0ZXJuL3Bs dWdpbnMvKicpKTsKCQkvLyBnZW5lcmF0ZSBsaXN0IG9mIGluc3RhbGxlZCBwbHVnaW5zICYg dGhlaXIgJ2xvYWRfb3JkZXInCgkJJGxvYWRfb3JkZXJzID0gYXJyYXlfY29sdW1uKCRyb3dz LCAnbG9hZF9vcmRlcicpOyAvLyBzaW1wbGUgbGlzdCBvZiBwbHVnaW4gb3JkZXJzCgkJJGlu c3RhbGxlZF9sb2FkX29yZGVycyA9IGFycmF5X2NvbWJpbmUoJGluc3RhbGxlZF9wbHVnaW5z LCAkbG9hZF9vcmRlcnMpOyAvLyBwbHVnaW4gdHlwZXMgaW5kZXhlZCBieSBuYW1lCgkJLy8g Z2VuZXJhdGUgbGlzdCBvZiBpbnN0YWxsZWQgcGx1Z2lucyAmIHRoZWlyICd0eXBlJwoJCSR0 eXBlcyA9IGFycmF5X2NvbHVtbigkcm93cywgJ3R5cGUnKTsgLy8gc2ltcGxlIGxpc3Qgb2Yg cGx1Z2luIHR5cGVzCgkJJGluc3RhbGxlZF90eXBlcyA9IGFycmF5X2NvbWJpbmUoJGluc3Rh bGxlZF9wbHVnaW5zLCAkdHlwZXMpOyAvLyBwbHVnaW4gdHlwZXMgaW5kZXhlZCBieSBuYW1l CgkJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIHsKCQkJZWNobyAiSU5TVEFMTEVEIFBMVUdJ TiBMT0FEIE9SREVSUzoiOwoJCQlkbXAoJGluc3RhbGxlZF9sb2FkX29yZGVycyk7CgkJCWVj aG8gIklOU1RBTExFRCBQTFVHSU4gVFlQRVM6IjsKCQkJZG1wKCRpbnN0YWxsZWRfdHlwZXMp OwoJCX0KCQkvLyBnZW5lcmF0ZSBsaXN0IG9mIHBsdWdpbnMgZnJvbSBmaWxlc3lzdGVtICYg dGhlaXIgb3JkZXJzICYgdHlwZXMgKGZyb20gbWFuaWZlc3QuanNvbikKCQkkcGx1Z2luX2Rp cl9saXN0ID0gc2NhbmRpcihQTFVHSU5QQVRIKTsKCQkkbWFuaWZlc3RfbG9hZF9vcmRlcnMg PSAkbWFuaWZlc3RfdHlwZXMgPSBhcnJheSgpOwoJCSRkZWJ1Z1tdID0gJyc7CgkJZm9yZWFj aCAoJHBsdWdpbl9kaXJfbGlzdCBhcyAkcGx1Z2luX25hbWUpIHsKCQkJJHBhdGggPSBQTFVH SU5QQVRILkRTLiRwbHVnaW5fbmFtZTsKCQkJaWYgKGlzX2RpcigkcGF0aCkpIHsKCQkJCWlm ICgkcGx1Z2luX25hbWUgPT0gJy4nIHx8ICRwbHVnaW5fbmFtZSA9PSAnLi4nKQoJCQkJCWNv bnRpbnVlOwoJCQkJJHBsdWdpbl9maWxlcyA9IHNjYW5kaXIoJHBhdGgpOwoJCQkJJGRlYnVn X21zZyA9ICJQTFVHSU49JHBsdWdpbl9uYW1lIjsKCQkJCSRkZWJ1Z19tc2cgLj0gJywgJy4o aW5fYXJyYXkoJHBsdWdpbl9uYW1lLCAkaW5zdGFsbGVkX3BsdWdpbnMpID8gJycgOiAnTk9U ICcpLidJTlNUQUxMRUQnOyAvLyAobm90KSBpbnN0YWxsZWQ/CgkJCQlpZiAoaW5fYXJyYXko J21hbmlmZXN0Lmpzb24nLCAkcGx1Z2luX2ZpbGVzKSkgewoJCQkJCSRkZWJ1Z19tc2cgLj0K CQkJCQkJKGluX2FycmF5KCRwbHVnaW5fbmFtZSwgJGluc3RhbGxlZF9wbHVnaW5zKSA/ICIs IG9yZGVyPSIuJGluc3RhbGxlZF9sb2FkX29yZGVyc1skcGx1Z2luX25hbWVdLiIsIHR5cGU9 Ii4kaW5zdGFsbGVkX3R5cGVzWyRwbHVnaW5fbmFtZV0gOiAnJyApIC8vIChub3QpIGluc3Rh bGxlZD8KCQkJCQkJLiI7IE1BTklGRVNUIEZPVU5EIjsKCQkJCQkkbWFuaWZlc3Rfb2JqID0g anNvbl9kZWNvZGUoZmlsZV9nZXRfY29udGVudHMoJHBhdGguRFMuJ21hbmlmZXN0Lmpzb24n KSk7CgkJCQkJaWYgKCRtYW5pZmVzdF9vYmogJiYgaXNzZXQoJG1hbmlmZXN0X29iai0+b3Jk ZXIpKSB7CgkJCQkJCSRkZWJ1Z19tc2cgLj0gIiwgb3JkZXI9Ii4kbWFuaWZlc3Rfb2JqLT5v cmRlcjsKCQkJCQkJJG1hbmlmZXN0X2xvYWRfb3JkZXJzWyRwbHVnaW5fbmFtZV0gPSAkbWFu aWZlc3Rfb2JqLT5vcmRlcjsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCQkkZGVidWdfbXNnIC49 ICIsIE5PIE9SREVSIjsKCQkJCQlpZiAoJG1hbmlmZXN0X29iaiAmJiBpc3NldCgkbWFuaWZl c3Rfb2JqLT50eXBlKSkgewoJCQkJCQkkZGVidWdfbXNnIC49ICIsIHR5cGU9Ii4kbWFuaWZl c3Rfb2JqLT50eXBlOwoJCQkJCQkkbWFuaWZlc3RfdHlwZXNbJHBsdWdpbl9uYW1lXSA9ICRt YW5pZmVzdF9vYmotPnR5cGU7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQkJJGRlYnVnX21zZyAu PSAiLCBOTyBUWVBFIjsKCQkJCX0KCQkJCWVsc2UKCQkJCQkkZGVidWdfbXNnIC49ICIsIE5P IE1BTklGRVNUIjsKCQkJCSRkZWJ1Z1tdID0gJGRlYnVnX21zZzsKCQkJfQoJCX0KCQlpZiAo JGFkaV9kZXRyaXR1c19kZWJ1ZykgewoJCQllY2hvICJNQU5JRkVTVCBQTFVHSU4gTE9BRCBP UkRFUlM6IjsKCQkJZG1wKCRtYW5pZmVzdF9sb2FkX29yZGVycyk7CgkJCWVjaG8gIk1BTklG RVNUIFBMVUdJTiBUWVBFUzoiOwoJCQlkbXAoJG1hbmlmZXN0X3R5cGVzKTsKCQl9CgkJLy8g Z2VuZXJhdGUgbGlzdCBvZiBpbnN0YWxsZWQgcGx1Z2lucyAmIHRoZWlyICdjb2RlX21kNScK CQkkbGl2ZV9tZDVzID0gYXJyYXlfY29sdW1uKCRyb3dzLCAnbGl2ZV9tZDUnKTsgLy8gc2lt cGxlIGxpc3Qgb2YgcGx1Z2luIGxpdmVfbWQ1cwoJCSRpbnN0YWxsZWRfbGl2ZV9tZDVzID0g YXJyYXlfY29tYmluZSgkaW5zdGFsbGVkX3BsdWdpbnMsICRsaXZlX21kNXMpOyAvLyBwbHVn aW4gbGl2ZV9tZDVzIGluZGV4ZWQgYnkgbmFtZQoJCWlmICgkYWRpX2RldHJpdHVzX2RlYnVn KSB7CgkJCWVjaG8gIklOU1RBTExFRCBQTFVHSU4gTUQ1czoiOwoJCQlkbXAoJGluc3RhbGxl ZF9saXZlX21kNXMpOwoJCX0KCQkvLyBnZW5lcmF0ZSBsaXN0IG9mIHBsdWdpbnMgZnJvbSBm aWxlc3lzdGVtICYgdGhlaXIgTUQ1cwoJCSRtYW5pZmVzdF9tZDVzID0gYXJyYXkoKTsKCQkk ZGVidWdbXSA9ICcnOwoJCWZvcmVhY2ggKCRwbHVnaW5fZGlyX2xpc3QgYXMgJHBsdWdpbl9u YW1lKSB7CgkJCSRwYXRoID0gUExVR0lOUEFUSC5EUy4kcGx1Z2luX25hbWU7CgkJCWlmIChp c19kaXIoJHBhdGgpKSB7CgkJCQlpZiAoJHBsdWdpbl9uYW1lID09ICcuJyB8fCAkcGx1Z2lu X25hbWUgPT0gJy4uJykKCQkJCQljb250aW51ZTsKCQkJCSRwbHVnaW5fZmlsZXMgPSBzY2Fu ZGlyKCRwYXRoKTsKCQkJCSRkZWJ1Z19tc2cgPSAiUExVR0lOPSRwbHVnaW5fbmFtZSI7CgkJ CQkkZGVidWdfbXNnIC49ICcsICcuKGluX2FycmF5KCRwbHVnaW5fbmFtZSwgJGluc3RhbGxl ZF9wbHVnaW5zKSA/ICcnIDogJ05PVCAnKS4nSU5TVEFMTEVEJzsgLy8gKG5vdCkgaW5zdGFs bGVkPwoJCQkJaWYgKGluX2FycmF5KCIkcGx1Z2luX25hbWUucGhwIiwgJHBsdWdpbl9maWxl cykpIHsKCQkJCQkkZGVidWdfbXNnIC49IChpbl9hcnJheSgkcGx1Z2luX25hbWUsICRpbnN0 YWxsZWRfcGx1Z2lucykgPyAiLCBtZDU9Ii4kaW5zdGFsbGVkX2xpdmVfbWQ1c1skcGx1Z2lu X25hbWVdIDogJycgKTsgLy8gKG5vdCkgaW5zdGFsbGVkPwoJCQkJCWlmIChmaWxlX2V4aXN0 cyhQTFVHSU5QQVRILkRTLiRwbHVnaW5fbmFtZS5EUy4kcGx1Z2luX25hbWUuJy5waHAnKSkg ewoJCQkJCQkkZGVidWdfbXNnIC49ICI7IFBIUCBGSUxFIEZPVU5EIjsKCQkJCQkJaWYgKGlz X3JlYWRhYmxlKFBMVUdJTlBBVEguRFMuJHBsdWdpbl9uYW1lLkRTLiRwbHVnaW5fbmFtZS4n LnBocCcpKSB7CgkJCQkJCQkvLyBuZWVkIHRvIHNraXAgYSBmZXcgY2hhcnM6IChpLmUuICI8 P3BocCIgYW5kIGEgYmxhbmsgbGluZSkKCQkJCQkJCSRtZDUgPSBtZDUoZmlsZV9nZXRfY29u dGVudHMoUExVR0lOUEFUSC5EUy4kcGx1Z2luX25hbWUuRFMuJHBsdWdpbl9uYW1lLicucGhw JywgRkFMU0UsIE5VTEwsIDYpKTsKCQkJCQkJCSRkZWJ1Z19tc2cgLj0gIiwgbWQ1PSIuJG1k NTsKCQkJCQkJCSRtYW5pZmVzdF9tZDVzWyRwbHVnaW5fbmFtZV0gPSAkbWQ1OwoJCQkJCQl9 CgkJCQkJCWVsc2UKCQkJCQkJCSRkZWJ1Z19tc2cgLj0gIjsgTk9UIFJFQURBQkxFIjsKCQkJ CQl9CgkJCQkJZWxzZQoJCQkJCQkkZGVidWdfbXNnIC49ICI7IFBIUCBGSUxFIE5PVCBGT1VO RCI7CgkJCQl9CgkJCQllbHNlCgkJCQkJJGRlYnVnIC49ICIsIE5PIE1BTklGRVNUIjsKCQkJ CSRkZWJ1Z1tdID0gJGRlYnVnX21zZzsKCQkJfQoJCX0KCQlpZiAoJGFkaV9kZXRyaXR1c19k ZWJ1ZykgewoJCQllY2hvICJNQU5JRkVTVCBQTFVHSU4gTUQ1czoiOwoJCQlkbXAoJG1hbmlm ZXN0X21kNXMpOwoJCX0KCX0KCgkvLyBwcm9jZXNzIHBsdWdpbnMKCWZvcmVhY2ggKCRhZGlf ZGV0cml0dXNfcGx1Z2luX2tpdCBhcyAkdGVzdCA9PiAkZ3JvdXApIHsKCQkkZnVuYyA9ICRh ZGlfZGV0cml0dXNfcGx1Z2luX2Z1bmNbJHRlc3RdWydmdW5jJ107CgkJLy8gZGF0YWJhc2Ug Y2hlY2tzCgkJaWYgKCRmdW5jID09ICdhZGlfZGV0cml0dXNfcHJvY2Vzc19wbHVnaW5zX2Ri JykgewoJCQkkd2hlcmUgPSAkYWRpX2RldHJpdHVzX3BsdWdpbl9mdW5jWyR0ZXN0XVsnd2hl cmUnXTsKCQkJJGRlYnVnW10gPSBici4iVEVTVD0kdGVzdCwgRlVOQz0kZnVuYywgIi4oaXNf YXJyYXkoJHdoZXJlKSA/ICdTRUFSQ0ggVEFCTEVTL0ZJRUxEUz0nLnNlcmlhbGl6ZSgkd2hl cmUpIDogIldIRVJFPSR3aGVyZSIpOwoJCQlmb3JlYWNoICgkZ3JvdXAgYXMgJHZlcnNpb24g PT4gJHBhaXIpIHsKCQkJCSRkZWJ1Z1tdID0gIi0gVkVSU0lPTj0kdmVyc2lvbiI7CgkJCQlm b3JlYWNoICgkcGFpciBhcyAkdGFibGVzID0+ICR3YXJuaW5nKSB7CgkJCQkJJGRlYnVnW10g PSAiLS0gU0VBUkNIIFRBQkxFKFMpOiAkdGFibGVzIjsKCQkJCQkkcGx1Z2lucyA9ICRmdW5j KCR0YWJsZXMsICR3aGVyZSk7IC8vIGdldCBsaXN0IG9mIHBsdWdpbnMgd2l0aCBpc3N1ZXMK CQkJCQlmb3JlYWNoICgkcGx1Z2lucyBhcyAkcGx1Z2luKSB7CgkJCQkJCWlmIChhcnJheV9z ZWFyY2goJHBsdWdpblsnbmFtZSddLCAkYWRpX2RldHJpdHVzX2lnbm9yZV9wbHVnaW5zKSA9 PT0gRkFMU0UpIHsgLy8gcGx1Z2luIG5vdCBvbiBpZ25vcmUgbGlzdAoJCQkJCQkJJHN1cHBs ZW1lbnRhcnkgPSAoaXNzZXQoJHBsdWdpblsnc3VwcGxlbWVudGFyeSddKSAmJiAkcGx1Z2lu WydzdXBwbGVtZW50YXJ5J10gIT0gJycpID8gJywgJy4kcGx1Z2luWydzdXBwbGVtZW50YXJ5 J10gOiAnJzsKCQkJCQkJCSRyZXN1bHRzW10gPSAkcGx1Z2luWyduYW1lJ10uJyAnLigoaXNz ZXQoJHBsdWdpblsnY2FjaGVkJ10pICYmICRwbHVnaW5bJ2NhY2hlZCddKSA/ICcmbmRhc2g7 ICcuZ3R4dCgnYWRpX2NhY2hlZCcpLnNwIDogJycpLicoJy5zcGFuKGdUeHQoJHdhcm5pbmcp LiRzdXBwbGVtZW50YXJ5LCAnIGNsYXNzPSJ3YXJuaW5nIicpLicpJzsKCQkJCQkJCSRkZWJ1 Z1tdID0gIi0tIFBMVUdJTj0iLiRwbHVnaW5bJ25hbWUnXS4iLCBXQVJOSU5HPSR3YXJuaW5n IjsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCQkkZGVidWdbXSA9ICItLSBQTFVHSU49Ii4k cGx1Z2luWyduYW1lJ10uIiwgV0FSTklORz0kd2FybmluZyAoSUdOT1JFRCkiOwoJCQkJCX0K CQkJCX0KCQkJfQoJCX0KCQkvLyBmaWxlc3lzdGVtIGNoZWNrcyAodHhwIDQuOCspCgkJZWxz ZSB7CgkJCSRkZWJ1Z1tdID0gYnIuIlRFU1Q9JHRlc3QsIEZVTkM9JGZ1bmMiOwoJCQlmb3Jl YWNoICgkZ3JvdXAgYXMgJHZlcnNpb24gPT4gJHdhcm5pbmcpIHsKCQkJCSRkZWJ1Z1tdID0g Ii0gVkVSU0lPTj0kdmVyc2lvbiI7CgkJCQlpZiAodmVyc2lvbl9jb21wYXJlKHR4cF92ZXJz aW9uLCAkdmVyc2lvbiwgJz49JykgfHwgKCR2ZXJzaW9uID09ICcqJykpIHsKCQkJCQlpZiAo JGZ1bmMgPT0gJ2FkaV9kZXRyaXR1c19wcm9jZXNzX3BsdWdpbnNfbGVmdG92ZXJzJykgLy8g bG9vayBmb3IgdW5pbnN0YWxsZWQgcGx1Z2lucyB0aGF0IGhhdmUgZmlsZXMgaW4gdGV4dHBh dHRlcm4vcGx1Z2lucwoJCQkJCQkkZnVuYygkd2FybmluZywgJHJlc3VsdHMsICRkZWJ1Zywg JHBsdWdpbl9kaXJzLCAkaW5zdGFsbGVkX3BsdWdpbnMpOwoJCQkJCWlmICgkZnVuYyA9PSAn YWRpX2RldHJpdHVzX3Byb2Nlc3NfcGx1Z2luc19taXNtYXRjaCcpIHsgLy8gY2hlY2sgZm9y IG1pc21hdGNoZXMgYmV0d2VlbiBpbnN0YWxsZWQgKERCKSBwbHVnaW4gJiBwbHVnaW4gb24g ZmlsZQoJCQkJCQlpZiAoJHRlc3QgPT0gJ29yZGVyX21pc21hdGNoJykKCQkJCQkJCSRmdW5j KCR3YXJuaW5nLCAkcmVzdWx0cywgJGRlYnVnLCAkaW5zdGFsbGVkX2xvYWRfb3JkZXJzLCAk bWFuaWZlc3RfbG9hZF9vcmRlcnMpOwoJCQkJCQlpZiAoJHRlc3QgPT0gJ3R5cGVfbWlzbWF0 Y2gnKQoJCQkJCQkJJGZ1bmMoJHdhcm5pbmcsICRyZXN1bHRzLCAkZGVidWcsICRpbnN0YWxs ZWRfdHlwZXMsICRtYW5pZmVzdF90eXBlcyk7CgkJCQkJCWlmICgkdGVzdCA9PSAndHlwZV9t aXNtYXRjaCcpCgkJCQkJCQkkZnVuYygkd2FybmluZywgJHJlc3VsdHMsICRkZWJ1ZywgJGlu c3RhbGxlZF9saXZlX21kNXMsICRtYW5pZmVzdF9tZDVzKTsKCQkJCQl9CgkJCQkJaWYgKCRm dW5jID09ICdhZGlfZGV0cml0dXNfcHJvY2Vzc19wbHVnaW5zX21pc3NpbmdfZmlsZScpIHsK CQkJCQkJJGZpbGUgPSAkYWRpX2RldHJpdHVzX3BsdWdpbl9mdW5jWyR0ZXN0XVsnZmlsZSdd OwoJCQkJCQkkZGVidWdbXSA9ICItIEZJTEU9JGZpbGUiOwoJCQkJCQlmb3JlYWNoICgkaW5z dGFsbGVkX3BsdWdpbnMgYXMgJHBsdWdpbl9uYW1lKSB7IC8vIGNoZWNrIHBsdWdpbiBzdWJk aXJzIGZvciBpbnN0YWxsZWQgcGx1Z2lucyBvbmx5CgkJCQkJCQkkcGF0aCA9IFBMVUdJTlBB VEguRFMuJHBsdWdpbl9uYW1lOwoJCQkJCQkJaWYgKGZpbGVfZXhpc3RzKCRwYXRoKSAmJiBp c19yZWFkYWJsZSgkcGF0aCkpIHsKCQkJCQkJCQkkZmlsZXMgPSBzY2FuZGlyKCRwYXRoKTsK CQkJCQkJCQkkZGVidWdbXSA9ICItLSBQTFVHSU49JHBsdWdpbl9uYW1lLCBQQVRIPSRwYXRo LCBGSUxFUz0iLmltcGxvZGUoJywgJywgJGZpbGVzKTsKCQkJCQkJCQkkZnVuYygkd2Fybmlu ZywgJG5vdGVzLCAkZGVidWcsICRwbHVnaW5fbmFtZSwgJGZpbGUsICRmaWxlcyk7IC8vIGp1 c3QgbWFraW5nIG5vdGVzCgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQlpZiAoIWZp bGVfZXhpc3RzKCRwYXRoKSkgJGRlYnVnW10gPSAiLS0gUExVR0lOPSRwbHVnaW5fbmFtZSwg UEFUSD0kcGF0aCwgRElSIE5PVCBGT1VORCI7CgkJCQkJCQkJZWxzZSBpZiAoIWlzX3JlYWRh YmxlKCRwYXRoKSkgJGRlYnVnW10gPSAiLS0gUExVR0lOPSRwbHVnaW5fbmFtZSwgUEFUSD0k cGF0aCwgRElSIE5PVCBSRUFEQUJMRSI7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9 CgkJCQllbHNlCgkJCQkJJGRlYnVnW10gPSAnLSBOT1QgQVBQTElDQUJMRSc7CgkJCX0KCQl9 Cgl9CgoJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIGVjaG8gaW1wbG9kZShiciwgJGRlYnVn KS5icjsKCgkvLyBvdXRwdXQgcGx1Z2luIHJlc3VsdHMKCXNvcnQoJHJlc3VsdHMpOwoJZWNo byBncmFmKCRyZXN1bHRzID8gaW1wbG9kZShiciwgJHJlc3VsdHMpLmJyLnN0cm9uZyh0YWco Z1R4dCgnYWRpX3dhcm5pbmdzX2ZvdW5kJywgYXJyYXkoJ3tudW1iZXJ9JyA9PiBjb3VudCgk cmVzdWx0cykpKSwgJ2VtJykpIDogdGFnKGdUeHQoJ2FkaV9ub193YXJuaW5ncycpLCAnZW0n KSk7CgoJLy8gb3V0cHV0IHBsdWdpbiBub3RlcwoJaWYgKCRub3RlcykgewoJCWVjaG8gaGVk KGdUeHQoJ2FkaV9ub3RlcycpLCAzKTsKCQllY2hvICc8cD4nOwoJCWZvcmVhY2ggKCRub3Rl cyBhcyAkd2FybmluZyA9PiAkcGx1Z2luX25hbWVzKSB7CgkJCXNvcnQoJHBsdWdpbl9uYW1l cyk7CgkJCWVjaG8gc3Ryb25nKCR3YXJuaW5nKS4nICZuZGFzaDsgJy5pbXBsb2RlKCcsICcs ICRwbHVnaW5fbmFtZXMpLmJyOwoJCX0KCQllY2hvICc8L3A+JzsKCX0KCgkvLz8/PyBQUkVG RVJFTkNFIENIRUNLUwoJZWNobyBoZWQoZ1R4dCgndGFiX3ByZWZlcmVuY2VzJyksIDIpOwoK CS8vIGdldCBhcmVhIChpLmUuIHRhYikgZXZlbnRzCgkkYXJlYXMgPSBhcmVhcygpOwoJJGFy ZWFfZXZlbnRzID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRhcmVhcyBhcyAkdGFiID0+ICRhcmVh KQoJCWZvcmVhY2ggKCRhcmVhIGFzICRhcmVhX2V2ZW50KQoJCQkkYXJlYV9ldmVudHNbXSA9 ICRhcmVhX2V2ZW50OwoJc29ydCgkYXJlYV9ldmVudHMpOwoJaWYgKCRhZGlfZGV0cml0dXNf ZGVidWcpIHsKCQllY2hvICJBUkVBIEVWRU5UUzoiLmJyOwoJCWRtcCgkYXJlYV9ldmVudHMp OwoJfQoJLy8/Pz8gZ2V0IGFjdGl2ZSBwbHVnaW4gZXZlbnRzCglpZiAoJGFkaV9kZXRyaXR1 c190eHA0ODApCgkJJGFjdGl2ZV9wbHVnaW5fZXZlbnRzID0gYXJyYXlfdW5pcXVlKGFycmF5 X2tleXMoJHBsdWdpbl9jYWxsYmFjaykpOwoJZWxzZQoJCSRhY3RpdmVfcGx1Z2luX2V2ZW50 cyA9IGFycmF5X3VuaXF1ZShhcnJheV9jb2x1bW4oJHBsdWdpbl9jYWxsYmFjaywgJ2V2ZW50 JykpOwoJc29ydCgkYWN0aXZlX3BsdWdpbl9ldmVudHMpOwoJaWYgKCRhZGlfZGV0cml0dXNf ZGVidWcpIHsKCQllY2hvICckcGx1Z2luX2NhbGxiYWNrOicuYnI7CgkJZG1wKCRwbHVnaW5f Y2FsbGJhY2spOwoJCWVjaG8gIkFDVElWRSBQTFVHSU4gRVZFTlRTOiIuYnI7CgkJZG1wKCRh Y3RpdmVfcGx1Z2luX2V2ZW50cyk7Cgl9CgkvLyBtYXNzYWdlIGFjdGl2ZSBldmVudCBsaXN0 Cglmb3JlYWNoICgkYWN0aXZlX3BsdWdpbl9ldmVudHMgYXMgJGluZGV4ID0+ICRwbHVnaW5f ZXZlbnQpIHsKCQlpZiAoc3RycG9zKCRwbHVnaW5fZXZlbnQsICcuJykgIT09IEZBTFNFKSAv LyBsb3NlIGFueXRoaW5nIHdpdGggYSBkb3QgaW4gaXQKCQkJdW5zZXQoJGFjdGl2ZV9wbHVn aW5fZXZlbnRzWyRpbmRleF0pOwoJCWVsc2UgaWYgKHN0cmxlbigkcGx1Z2luX2V2ZW50KSA+ IDEyKSAvLyBhZGQgMTItY2hhci10cnVuY2F0ZWQgKHByZS00LjYpIHZlcnNpb24gb2YgbG9u ZyBldmVudCBuYW1lcwoJCQkkYWN0aXZlX3BsdWdpbl9ldmVudHNbXSA9IHN1YnN0cigkcGx1 Z2luX2V2ZW50LCAwLCAxMik7Cgl9Cglzb3J0KCRhY3RpdmVfcGx1Z2luX2V2ZW50cyk7Cglp ZiAoJGFkaV9kZXRyaXR1c19kZWJ1ZykgewoJCWVjaG8gIkFDVElWRSBQTFVHSU4gRVZFTlRT IChNQVNTQUdFRCk6Ii5icjsKCQlkbXAoJGFjdGl2ZV9wbHVnaW5fZXZlbnRzKTsKCX0KCS8v IGFuZCB0aGVyZSdzIG1vcmUKICAgICRjb3JlX2V2ZW50cyA9IGFycmF5KCdzaXRlJywgJ2Fk bWluJywgJ3B1Ymxpc2gnLCAnZmVlZHMnLCAnY29tbWVudHMnLCAnY3VzdG9tJyk7IC8vIGZy b20gdHhwX3ByZWZzLnBocAogICAgLy8gYW55IG1vcmUgZm9yIGFueSBtb3JlPwogICAgJG1v cmVfZXZlbnRzID0gYXJyYXkoCiAgICAJJ2FkdmFuY2VkX29wdGlvbnMnLCAvLyA/CiAgICAJ J2xvZycsIC8vIGlmIGxvZ2dpbmcgc3dpdGNoZWQgb2ZmLCAnbG9nJyBldmVudCB3b24ndCBh cHBlYXIgaW4gYXJlYSBldmVudHMgJiBpdCdzIG5vdCBsaXN0ZWQgYXMgYSBjb3JlIGV2ZW50 IC4uLiB1bmxpa2UgY29tbWVudHMKICAgICk7CiAgICAvLyBob3BlZnVsbHkgdGhpcyBpcyB0 aGUgbG90IQoJJGZ1bGxfZXZlbnRfbGlzdCA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgk YXJlYV9ldmVudHMsICRhY3RpdmVfcGx1Z2luX2V2ZW50cywgJGNvcmVfZXZlbnRzLCAkbW9y ZV9ldmVudHMpKTsKCXNvcnQoJGZ1bGxfZXZlbnRfbGlzdCk7CglpZiAoJGFkaV9kZXRyaXR1 c19kZWJ1ZykgewoJCWVjaG8gIkZVTEwgRVZFTlQgTElTVDoiLmJyOwoJCWRtcCgkZnVsbF9l dmVudF9saXN0KTsKCX0KCS8vIGV2ZW50cyBpbiB0eHBfcHJlZnMKCSRyb3dzID0gc2FmZV9y b3dzKCdldmVudCcsICd0eHBfcHJlZnMnLCAnMT0xIE9SREVSIEJZIGV2ZW50Jyk7CgkkdHhw X3ByZWZzX2V2ZW50cyA9IGFycmF5X3VuaXF1ZShhcnJheV9jb2x1bW4oJHJvd3MsICdldmVu dCcpKTsKCWlmICgkYWRpX2RldHJpdHVzX2RlYnVnKSB7CgkJZWNobyAiRVZFTlRTIElOIFRY UF9QUkVGUzoiLmJyOwoJCWRtcCgkdHhwX3ByZWZzX2V2ZW50cyk7Cgl9CgkvLyBsb29rIGZv ciB1bnJlY29nbmlzZWQgZXZlbnRzCgkkd2hlcmUgPSAiZXZlbnQgTk9UIElOKCIuam9pbign LCcsIHF1b3RlX2xpc3QoJGZ1bGxfZXZlbnRfbGlzdCkpLiIpIE9SREVSIEJZIGV2ZW50IjsK CSRyb3dzID0gc2FmZV9yb3dzKCduYW1lLCBldmVudCcsICd0eHBfcHJlZnMnLCAkd2hlcmUp OwoJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIHsKCQllY2hvICJVTlJFQ09HTklTRUQgRVZF TlRTIElOIFRYUF9QUkVGUzoiLmJyOwoJCWRtcCgkcm93cyk7Cgl9CgkkdW5yZWNvZ25pc2Vk X3ByZWZzID0gYXJyYXkoKTsKCSRyZXN1bHRzID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRyb3dz IGFzICRuYW1lX2V2ZW50KSB7CgkJJHVucmVjb2duaXNlZF9wcmVmc1skbmFtZV9ldmVudFsn bmFtZSddXSA9ICRuYW1lX2V2ZW50WydldmVudCddOwoJCSRyZXN1bHRzW10gPSAkbmFtZV9l dmVudFsnbmFtZSddLicgJmhlbGxpcDsgJy5nVHh0KCdhZGlfZXZlbnQnKS4nICInLiRuYW1l X2V2ZW50WydldmVudCddLiciICgnLnNwYW4oZ1R4dCgnYWRpX2RldHJpdHVzX3Bvc3NfcmVk dW5kYW50JyksICcgY2xhc3M9Indhcm5pbmciJykuJyknOwoJfQoJaWYgKCRhZGlfZGV0cml0 dXNfZGVidWcpIHsKCQlrc29ydCgkdW5yZWNvZ25pc2VkX3ByZWZzKTsKCQllY2hvICJVTlJF Q09HTklTRUQgUFJFRlM6Ii5icjsKCQlkbXAoJHVucmVjb2duaXNlZF9wcmVmcyk7Cgl9CgoJ Ly8gb3V0cHV0IHByZWZlcmVuY2UgcmVzdWx0cwoJJHJlc3VsdHMgPSBhcnJheV91bmlxdWUo JHJlc3VsdHMpOwoJZWNobyBncmFmKCRyZXN1bHRzID8gaW1wbG9kZShiciwgJHJlc3VsdHMp LmJyLnN0cm9uZyh0YWcoZ1R4dCgnYWRpX3dhcm5pbmdzX2ZvdW5kJywgYXJyYXkoJ3tudW1i ZXJ9JyA9PiBjb3VudCgkcmVzdWx0cykpKSwgJ2VtJykpIDogdGFnKGdUeHQoJ2FkaV9ub193 YXJuaW5ncycpLCAnZW0nKSk7Cn0KCmZ1bmN0aW9uIGFkaV9kZXRyaXR1c19sb2FkX2xhbmco JHJlcXVpcmVkX2xpc3QpIHsKLy8gbG9hZCBzdXBwbGllZCBjb21tYS1zZXBhcmF0ZWQgc3Ry aW5ncyBmcm9tIHR4cF9sYW5nIChmb3IgbGF0ZXIgdXNlIGluIGdUeHQoKSkKCWdsb2JhbCAk cHJlZnMsICRhZGlfZGV0cml0dXNfZGVidWcsICRsYW5nX3VpOwoKCSRleHRyYV9sYW5nID0g YXJyYXkoKTsKCgkkcmVxdWlyZWQgPSBkb19saXN0KCRyZXF1aXJlZF9saXN0KTsgLy8gY29u dmVydCBjb21tYS1zZXBhcmF0ZWQgbGlzdCB0byB0cmltbWVkIGFycmF5CgoJaWYgKCRhZGlf ZGV0cml0dXNfZGVidWcpIHsKCQllY2hvIF9fRlVOQ1RJT05fXy4nKCk6Jy5icjsKCQllY2hv ICckbGFuZ191aT0nLiRsYW5nX3VpLmJyOwoJCWVjaG8gIlJFUVVJUkVEIExJU1Q6ICRyZXF1 aXJlZF9saXN0Ii5icjsKCX0KCglpZiAoaXNzZXQoJGxhbmdfdWkpKSB7CgkJJHdoZXJlID0g ImxhbmcgPSAnIi5kb1NsYXNoKCRsYW5nX3VpKS4iJyBBTkQgbmFtZSAhPSAnJyBBTkQgKG5h bWUgSU4gKCIuaW1wbG9kZSgnLCcsIHF1b3RlX2xpc3QoJHJlcXVpcmVkKSkuIikpIjsKCQkk cnMgPSBzYWZlX3Jvd3Nfc3RhcnQoJ25hbWUsIGRhdGEnLCAndHhwX2xhbmcnLCAkd2hlcmUp OwoJCWlmICghZW1wdHkoJHJzKSkKCQkJd2hpbGUgKCRhID0gbmV4dFJvdygkcnMpKQoJCQkJ JGV4dHJhX2xhbmdbJGFbJ25hbWUnXV0gPSAkYVsnZGF0YSddOwoKCQkvLyBmZWVkIGV4dHJh IHN0cmluZ3MgaW50byBzeXN0ZW0KCQlUeHA6OmdldCgnXFRleHRwYXR0ZXJuXEwxMG5cTGFu ZycpLT5zZXRQYWNrKCRleHRyYV9sYW5nLCBUUlVFKTsKCX0KCWVsc2UKCQlpZiAoJGFkaV9k ZXRyaXR1c19kZWJ1ZykKCQkJZWNobyAnJGxhbmdfdWkgTk9UIFNFVCcuYnI7CgoJaWYgKCRh ZGlfZGV0cml0dXNfZGVidWcpIHsKCQllY2hvICdFWFRSQSBMQU5HOic7CgkJZG1wKCRleHRy YV9sYW5nKTsKCX0KfQoKZnVuY3Rpb24gYWRpX2RldHJpdHVzX3N0eWxlKCkgewovLyBzb21l IHN0eWxlIGZvciB0aGUgcGFnZQoKCWVjaG8KCQknPHN0eWxlPgoJCQkvKiBhZGlfZGV0cml0 dXMgKi8KCQkJZGl2LmFkaV9kZXRyaXR1cyBoMiB7IG1hcmdpbjoxZW0gMCAwIH0KCQkJZGl2 LmFkaV9kZXRyaXR1cyBoMiArIHAgeyBtYXJnaW4tdG9wOjAuM2VtIH0KCQkJZGl2LmFkaV9k ZXRyaXR1cyBoMiArIGxhYmVsIHsgZGlzcGxheTppbmxpbmUtYmxvY2s7IG1hcmdpbi10b3A6 MC4zZW0gfQoJCQlkaXYuYWRpX2RldHJpdHVzIGgzIHsgbWFyZ2luOjAuNWVtIDAgMC4zZW0g fQoJCQlkaXYuYWRpX2RldHJpdHVzIGgzICsgcCB7IG1hcmdpbi10b3A6MC4zZW0gfQoJCQlk aXYuYWRpX2RldHJpdHVzIGlucHV0W3R5cGU9dGV4dF0geyB3aWR0aDoxMCUgfQoJCQlkaXYu YWRpX2RldHJpdHVzIHRleHRhcmVhIHsgZGlzcGxheTpibG9jazsgbWFyZ2luOjAuMWVtIDAg MWVtOyB3aWR0aDo0MCUgfQoJCTwvc3R5bGU+JzsKfQoKZnVuY3Rpb24gYWRpX2RldHJpdHVz X2FkbWluKCRldmVudCwgJHN0ZXApIHsKLy8gdGhlIGFkbWluIHRhYgoJZ2xvYmFsICRhZGlf ZGV0cml0dXNfZGVidWcsICRhZGlfZGV0cml0dXNfcGx1Z2luX3N0YXR1cywgJGFkaV9kZXRy aXR1c19wcmVmcywgJGFkaV9kZXRyaXR1c19maWxlX2tpdCwgJGFkaV9kZXRyaXR1c19maWxl X2Z1bmMsICRhZGlfZGV0cml0dXNfZmlsZV9kZXBlbmRlbmNpZXMsICRhZGlfZGV0cml0dXNf ZmlsZV9leGNlcHRpb25zLCAkYWRpX2RldHJpdHVzX3BsdWdpbl9raXQsICRhZGlfZGV0cml0 dXNfcGx1Z2luX2Z1bmMsICRhZGlfZGV0cml0dXNfZmlsZV9zaXplLCAkYWRpX2RldHJpdHVz X2ltYWdlX3NpemUsICRhZGlfZGV0cml0dXNfaWdub3JlX3BsdWdpbnMsICRwYXRoX3RvX3Np dGUsICRmaWxlX2Jhc2VfcGF0aCwgJGltZ19kaXIsICRza2luX2RpciwgJHRlbXBkaXIsICRw bHVnaW5fY2FjaGVfZGlyLCAkYWRpX2RldHJpdHVzX2FsbF9maWxlcywgJGFkaV9kZXRyaXR1 c19hbGxfaW1hZ2VzLCAkYWRpX2RldHJpdHVzX2xpbmtlZF9maWxlcywgJGFkaV9kZXRyaXR1 c19saW5rZWRfaW1hZ2VzLCAkYWRpX2RldHJpdHVzX3VubGlua2VkX2ZpbGVzLCAkYWRpX2Rl dHJpdHVzX3VubGlua2VkX2ltYWdlcywgJGFkaV9kZXRyaXR1c19hbGxfdHhwX2ltYWdlcywg JGFkaV9kZXRyaXR1c19taXNzaW5nX2ltZ19maWxlcywgJGFkaV9kZXRyaXR1c19taXNzaW5n X2ZpbGVfZmlsZXMsICRhZGlfZGV0cml0dXNfdW5saW5rZWRfdHhwX2ltYWdlcywgJGFkaV9k ZXRyaXR1c19ub25fdHhwX2ltYWdlcywgJGFkaV9kZXRyaXR1c19maWxlX2RpcnMsICRhZGlf ZGV0cml0dXNfaW1hZ2VfZGlyczsKCgkvLyBkaXNhYmxlIHRoYXQgcGVza3kgY2FjaGluZwoJ aGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1zdG9yZScpOwoKCSRtZXNzYWdlID0gJyc7CgoJ aWYgKCRhZGlfZGV0cml0dXNfZGVidWcpCgkJZWNobyBfX0ZVTkNUSU9OX18uJygpOicuYnI7 CgoJLy8gYWRtaW4gc3RlcHMKCWlmICgkc3RlcCA9PSAndXBkYXRlX3ByZWZzJykgewoJCSRy ZXN1bHQgPSBhZGlfZGV0cml0dXNfdXBkYXRlX3ByZWZzKCdhZG1pbicpOwoJCSRyZXN1bHQg PyAkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJykgOiAkbWVzc2FnZSA9IGFy cmF5KGdUeHQoJ2FkaV9wcmVmX3VwZGF0ZV9mYWlsJyksIEVfRVJST1IpOwoJfQoKCS8vIHVw ZGF0ZSBleGNlcHRpb25zIGZyb20gcHJlZnMKCS8vIHVubGlua2VkIGZpbGVzCglpZiAoYWRp X2RldHJpdHVzX3ByZWYoJ2FkaV9kZXRyaXR1c191bmxrZF9maWxlX2V4Y24nKSkgewoJCSRw cmVmX2V4Y2VwdGlvbnMgPSBleHBsb2RlKCJcbiIsIHN0cl9yZXBsYWNlKCJcciIsICcnLCBh ZGlfZGV0cml0dXNfcHJlZignYWRpX2RldHJpdHVzX3VubGtkX2ZpbGVfZXhjbicpKSk7CgkJ JHByZWZfZXhjZXB0aW9ucyA9IHByZWdfZmlsdGVyKCcjXiMnLCAkZmlsZV9iYXNlX3BhdGgu RFMsICRwcmVmX2V4Y2VwdGlvbnMpOyAvLyBhZGQgZnVsbCBwYXRoCgkJJGFkaV9kZXRyaXR1 c19maWxlX2V4Y2VwdGlvbnNbJ3VubGlua2VkX2ZpbGUnXSA9IGFycmF5X21lcmdlKCRhZGlf ZGV0cml0dXNfZmlsZV9leGNlcHRpb25zWyd1bmxpbmtlZF9maWxlJ10sICRwcmVmX2V4Y2Vw dGlvbnMpOwoJfQoJLy8gdW5saW5rZWQgaW1hZ2VzCglpZiAoYWRpX2RldHJpdHVzX3ByZWYo J2FkaV9kZXRyaXR1c191bmxrZF9pbWdfZXhjbicpKSB7CgkJZm9yZWFjaCAoYXJyYXkoJ25v dF90eHBfaW1hZ2VfZGInLCAnbm90X3R4cF9pbWFnZV90eXBlJywgJ3VubGlua2VkX2ltYWdl JykgYXMgJHRlc3QpIHsgLy8gdGhlcmUncmUgYSBudW1iZXIgb2YgdGVzdHMgdGhhdCAiaWdu b3JlIGltYWdlIiBleGNlcHRpb25zIGFwcGx5IHRvCgkJCSRwcmVmX2V4Y2VwdGlvbnMgPSBl eHBsb2RlKCJcbiIsIHN0cl9yZXBsYWNlKCJcciIsICcnLCBhZGlfZGV0cml0dXNfcHJlZign YWRpX2RldHJpdHVzX3VubGtkX2ltZ19leGNuJykpKTsKCQkJJHByZWZfZXhjZXB0aW9ucyA9 IHByZWdfZmlsdGVyKCcjXiMnLCAkcGF0aF90b19zaXRlLkRTLiRpbWdfZGlyLkRTLCAkcHJl Zl9leGNlcHRpb25zKTsgLy8gYWRkIGZ1bGwgcGF0aAoJCQkkYWRpX2RldHJpdHVzX2ZpbGVf ZXhjZXB0aW9uc1skdGVzdF0gPSBhcnJheV9tZXJnZSgkYWRpX2RldHJpdHVzX2ZpbGVfZXhj ZXB0aW9uc1skdGVzdF0sICRwcmVmX2V4Y2VwdGlvbnMpOwoJCX0KCX0KCgkvLyBnZW5lcmFs IGZpbGUgaWdub3JlCglpZiAoYWRpX2RldHJpdHVzX3ByZWYoJ2FkaV9kZXRyaXR1c19pZ25v cmVfZmlsZV9pdGVtcycpKQoJCSRhZGlfZGV0cml0dXNfZmlsZV9leGNlcHRpb25zWycqJ10g PSBleHBsb2RlKCJcbiIsIHN0cl9yZXBsYWNlKCJcciIsICcnLCBhZGlfZGV0cml0dXNfcHJl ZignYWRpX2RldHJpdHVzX2lnbm9yZV9maWxlX2l0ZW1zJykpKTsKCgkvLyBwcm9jZXNzIHN0 eWxlIGRpcmVjdG9yaWVzIGxpc3QgZnJvbSBwcmVmIC0gcGxhY2Vob2xkZXIge3N0eWxlfQoJ YWRpX2RldHJpdHVzX3JlcGxhY2VfcGxhY2Vob2xkZXIoJ3tzdHlsZX0nLCBhZGlfZGV0cml0 dXNfcHJlZignYWRpX2RldHJpdHVzX3N0eWxlX2RpcnMnKSk7IC8vIHN0eWxlIGRpcnM6IHJl cGxhY2UgcGxhY2Vob2xkZXIKCWFkaV9kZXRyaXR1c19yZXBsYWNlX3BsYWNlaG9sZGVyKCd7 c3R5bGV9JywgYWRpX2RldHJpdHVzX3ByZWYoJ2FkaV9kZXRyaXR1c19zdHlsZV9kaXJzJyks IFRSVUUpOyAvLyBleGNlcHRpb25zOiByZXBsYWNlIHBsYWNlaG9sZGVyCgoJLy8gZXh0cmEg ZGlyZWN0b3JpZXMgdG8gcG9rZSBhcm91bmQgaW4gLSBwbGFjZWhvbGRlciB7ZXh0cmF9Cglh ZGlfZGV0cml0dXNfcmVwbGFjZV9wbGFjZWhvbGRlcigne2V4dHJhfScsIGFkaV9kZXRyaXR1 c19wcmVmKCdhZGlfZGV0cml0dXNfZXh0cmFfZGlycycpKTsgLy8gZXh0cmEgZGlyczogcmVw bGFjZSBwbGFjZWhvbGRlcgoJLy8gZXhjZXB0aW9ucyBmb3IgZXh0cmEgZGlycwoJYWRpX2Rl dHJpdHVzX3JlcGxhY2VfcGxhY2Vob2xkZXIoJ3tleHRyYX0nLCBhZGlfZGV0cml0dXNfcHJl ZignYWRpX2RldHJpdHVzX2V4dHJhX2RpcnMnKSwgVFJVRSk7Cglmb3JlYWNoIChleHBsb2Rl KCJcbiIsIHN0cl9yZXBsYWNlKCJcciIsICcnLCBhZGlfZGV0cml0dXNfcHJlZignYWRpX2Rl dHJpdHVzX2V4dHJhX2RpcnMnKSkpIGFzICRkaXIpIHsKCQlpZiAoJGRpciA9PSAnanMnKSB7 IC8vIGZvbGRlciBjYWxsZWQgJ2pzJyBtZW50aW9ucywgc28gZG9uJ3QgbW9hbgoJCQl1bnNl dCgkYWRpX2RldHJpdHVzX2ZpbGVfa2l0Wydmb3VuZCddWyc0LjYnXVsnanMnXSk7CgkJCWlm ICgkYWRpX2RldHJpdHVzX2RlYnVnKSBlY2hvICItIEVYVFJBIFJFTU9WQUwgVEVTVD1mb3Vu ZCwgRVhDRVBUSU9OPSIuJGFkaV9kZXRyaXR1c19maWxlX2V4Y2VwdGlvbnNbJHRlc3RdWyRp bmRleF0uYnI7CgkJfQoJfQoKCS8vIHJlbW92ZSBmaWxlc3lzdGVtIHRlc3RzIC0gaWYgZGVw ZW5kZW5jaWVzIGFwcGx5Cglmb3JlYWNoICgkYWRpX2RldHJpdHVzX2ZpbGVfa2l0IGFzICR0 ZXN0ID0+ICRncm91cCkgewoJCWZvcmVhY2ggKCRncm91cCBhcyAkdmVyc2lvbiA9PiAkcGFp cikgewoJCQlmb3JlYWNoICgkcGFpciBhcyAkaXRlbSA9PiAkd2FybmluZykgewoJCQkJZm9y ZWFjaCAoJGFkaV9kZXRyaXR1c19maWxlX2RlcGVuZGVuY2llcyBhcyAkcGF0dGVybiA9PiAk ZGVwZW5kZW5jeSkgewoJCQkJCWlmIChmbm1hdGNoKCRwYXR0ZXJuLCAkaXRlbSkpIHsKCQkJ CQkJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIGVjaG8gIkRFUEVOREVOQ1kgTUFUQ0g6IFBB VFRFUk49JHBhdHRlcm4sIElURU09JGl0ZW0iLmJyOwoJCQkJCQlpZiAoJGRlcGVuZGVuY3kp IHsKCQkJCQkJCWlmICgkYWRpX2RldHJpdHVzX2RlYnVnKSBlY2hvICItIFRFU1QgUkVNT1ZF RDogVEVTVD0kdGVzdCwgVkVSU0lPTj0kdmVyc2lvbiwgSVRFTT0kaXRlbSwgV0FSTklORz0i LiRhZGlfZGV0cml0dXNfZmlsZV9raXRbJHRlc3RdWyR2ZXJzaW9uXVskaXRlbV0uYnI7CgkJ CQkJCQl1bnNldCgkYWRpX2RldHJpdHVzX2ZpbGVfa2l0WyR0ZXN0XVskdmVyc2lvbl1bJGl0 ZW1dKTsKCQkJCQkJfQoJCQkJCQllbHNlCgkJCQkJCQlpZiAoJGFkaV9kZXRyaXR1c19kZWJ1 ZykgZWNobyAiLSBURVNUIFJFVEFJTkVEOiBURVNUPSR0ZXN0LCBWRVJTSU9OPSR2ZXJzaW9u LCBJVEVNPSRpdGVtLCBXQVJOSU5HPSIuJGFkaV9kZXRyaXR1c19maWxlX2tpdFskdGVzdF1b JHZlcnNpb25dWyRpdGVtXS5icjsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CgoJLy8gYWRk IHBhdGhfdG9fc2l0ZSB0byBleGNlcHRpb25zIChpZiBtaXNzaW5nKQoJZm9yZWFjaCAoJGFk aV9kZXRyaXR1c19maWxlX2V4Y2VwdGlvbnMgYXMgJHRlc3QgPT4gJGV4Y2VwdGlvbnMpCgkJ JGFkaV9kZXRyaXR1c19maWxlX2V4Y2VwdGlvbnNbJHRlc3RdID0gYXJyYXlfbWFwKCdhZGlf ZGV0cml0dXNfc2l0ZV9wYXRoJywgJGV4Y2VwdGlvbnMpOwoKCS8vIHBsdWdpbnMgdG8gaWdu b3JlCgkkYWRpX2RldHJpdHVzX2lnbm9yZV9wbHVnaW5zID0gZXhwbG9kZSgiXG4iLCBzdHJf cmVwbGFjZSgiXHIiLCAnJywgYWRpX2RldHJpdHVzX3ByZWYoJ2FkaV9kZXRyaXR1c19pZ25v cmVfcGx1Z2lucycpKSk7CgoJLy8gZ2VuZXJhdGUgcGFnZQoJcGFnZXRvcChnVHh0KCdhZGlf ZGV0cml0dXMnKS4nICcuZ1R4dCgnYWRtaW4nKSwgJG1lc3NhZ2UpOwoKCWVjaG8gJzxkaXYg Y2xhc3M9ImFkaV9kZXRyaXR1cyI+JzsKCgllY2hvIGhlZChnVHh0KCdhZGlfZGV0cml0dXNf YWRtaW4nKSwgMSk7CgoJLy8gdGhlIGJ1c2luZXNzIGluIGhhbmQKCWVjaG8gYWRpX2RldHJp dHVzX3N3ZWVwKCk7CgoJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIHsKCQllY2hvIGJyOwoJ CWVjaG8gJ1BSRUZTOicuYnI7CgkJZm9yZWFjaCAoJGFkaV9kZXRyaXR1c19wcmVmcyBhcyAk bmFtZSA9PiAkdGhpc19wcmVmKQoJCQllY2hvICRuYW1lLic9Jy5hZGlfZGV0cml0dXNfcHJl ZigkbmFtZSkuYnI7CgkJZWNobyBicjsKCQllY2hvICJGSUxFU1lTVEVNIEtJVDoiOwoJCWRt cCgkYWRpX2RldHJpdHVzX2ZpbGVfa2l0KTsKCQllY2hvICJGSUxFU1lTVEVNIEZVTkNUSU9O UzoiOwoJCWRtcCgkYWRpX2RldHJpdHVzX2ZpbGVfZnVuYyk7CgkJZWNobyAiRklMRVNZU1RF TSBERVBFTkRFTkNJRVM6IjsKCQlkbXAoJGFkaV9kZXRyaXR1c19maWxlX2RlcGVuZGVuY2ll cyk7CgkJZWNobyAiRklMRVNZU1RFTSBFWENFUFRJT05TOiI7CgkJZG1wKCRhZGlfZGV0cml0 dXNfZmlsZV9leGNlcHRpb25zKTsKCQllY2hvICJQTFVHSU4gS0lUOiI7CgkJZG1wKCRhZGlf ZGV0cml0dXNfcGx1Z2luX2tpdCk7CgkJZWNobyAiUExVR0lOIEZVTkNUSU9OUzoiOwoJCWRt cCgkYWRpX2RldHJpdHVzX3BsdWdpbl9mdW5jKTsKCQllY2hvICJBTEwgRklMRVM6IjsKCQlk bXAoJGFkaV9kZXRyaXR1c19hbGxfZmlsZXMpOwoJCWVjaG8gIkFMTCBGSUxFUyBTVUJESVJT OiI7CgkJZG1wKCRhZGlfZGV0cml0dXNfZmlsZV9kaXJzKTsKCQllY2hvICJMSU5LRUQgRklM RVM6IjsKCQlkbXAoJGFkaV9kZXRyaXR1c19saW5rZWRfZmlsZXMpOwoJCWVjaG8gIlVOTElO S0VEIEZJTEVTOiI7CgkJZG1wKCRhZGlfZGV0cml0dXNfdW5saW5rZWRfZmlsZXMpOwoJCWVj aG8gIkxJTktFRCBGSUxFUyBNSVNTSU5HOiI7CgkJZG1wKCRhZGlfZGV0cml0dXNfbWlzc2lu Z19maWxlX2ZpbGVzKTsKCQllY2hvICJBTEwgSU1BR0VTOiI7CgkJZG1wKCRhZGlfZGV0cml0 dXNfYWxsX2ltYWdlcyk7CgkJZWNobyAiQUxMIElNQUdFUyBTVUJESVJTOiI7CgkJZG1wKCRh ZGlfZGV0cml0dXNfaW1hZ2VfZGlycyk7CgkJZWNobyAiTElOS0VEIElNQUdFUzoiOwoJCWRt cCgkYWRpX2RldHJpdHVzX2xpbmtlZF9pbWFnZXMpOwoJCWVjaG8gIlVOTElOS0VEIElNQUdF UzoiOwoJCWRtcCgkYWRpX2RldHJpdHVzX3VubGlua2VkX2ltYWdlcyk7CgkJZWNobyAiTElO S0VEIElNQUdFUyBNSVNTSU5HOiI7CgkJZG1wKCRhZGlfZGV0cml0dXNfbWlzc2luZ19pbWdf ZmlsZXMpOwoJCWVjaG8gIkFMTCBUWFAgRk9STUFUIElNQUdFUzoiOwoJCWRtcCgkYWRpX2Rl dHJpdHVzX2FsbF90eHBfaW1hZ2VzKTsKCQllY2hvICJVTkxJTktFRCBUWFAgRk9STUFUIElN QUdFUzoiOwoJCWRtcCgkYWRpX2RldHJpdHVzX3VubGlua2VkX3R4cF9pbWFnZXMpOwoJCWVj aG8gIkFMTCBOT04tVFhQIEZPUk1BVCBJTUFHRVM6IjsKCQlkbXAoJGFkaV9kZXRyaXR1c19u b25fdHhwX2ltYWdlcyk7Cgl9CgoJZWNobyAnPGhyIC8+JzsKCgkvLyBGWUkKCWVjaG8gaGVk KGdUeHQoJ2FkaV9kaXJlY3RvcmllcycpLCAyKTsKCWVjaG8gZ3JhZigKCQlnVHh0KCdhZGlf c2l0ZV9wYXRoJykuc3AuJyZuZGFzaDsnLnNwLiRwYXRoX3RvX3NpdGUKCQkuYnIKCQkuZ1R4 dCgnZmlsZV9iYXNlX3BhdGgnKS5zcC4nJm5kYXNoOycuc3AuJGZpbGVfYmFzZV9wYXRoCgkJ LmJyCgkJLmdUeHQoJ2ltZ19kaXInKS5zcC4nJm5kYXNoOycuc3AuJHBhdGhfdG9fc2l0ZS5E Uy4kaW1nX2RpcgoJCS5icgoJCS5nVHh0KCdza2luX2RpcicpLnNwLicmbmRhc2g7Jy5zcC4k cGF0aF90b19zaXRlLkRTLiRza2luX2RpcgoJCS4oZGVmaW5lZCgnUExVR0lOUEFUSCcpID8g YnIuZ1R4dCgncGx1Z2luX2RpcicpLnNwLicmbmRhc2g7Jy5zcC5QTFVHSU5QQVRIIDogJycp IC8vIFRYUCA0LjgrCgkJLmJyCgkJLmdUeHQoJ3BsdWdpbl9jYWNoZV9kaXInKS5zcC4nJm5k YXNoOycuc3AuKCRwbHVnaW5fY2FjaGVfZGlyID09ICcnID8gZ1R4dCgnYWRpX25vdF91c2Vk JykgOiAkcGx1Z2luX2NhY2hlX2RpcikKCQkuYnIKCQkuZ1R4dCgndGVtcGRpcicpLnNwLicm bmRhc2g7Jy5zcC4kdGVtcGRpcgoJKTsKCgkvLyBwcmVmZXJlbmNlcwoJZWNobyBhZGlfZGV0 cml0dXNfcHJlZl9pbnB1dHMoJGV2ZW50LCAnYWRtaW4nLCBUUlVFKTsKCgllY2hvICc8L2Rp dj4nOwp9CgpmdW5jdGlvbiBhZGlfZGV0cml0dXNfcmVwbGFjZV9wbGFjZWhvbGRlcigkcGxh Y2Vob2xkZXIsICRwcmVmX3RleHRhcmVhLCAkZXhjZXB0aW9ucz1GQUxTRSkgewovLyByZXBs YWNlIHBsYWNlaG9sZGVycywgZS5nLiB7c3R5bGV9LCB7ZXh0cmF9LCB3aXRoIGxpc3RzIG9m IGRpcnMgZnJvbSB1c2VyIHByZWZzOyBhbHNvIHJlbW92ZXMgcGxhY2Vob2xkZXIsIGV2ZW4g aWYgbm8gZGlycyBzcGVjaWZpZWQKCWdsb2JhbCAkYWRpX2RldHJpdHVzX2ZpbGVfa2l0LCAk YWRpX2RldHJpdHVzX2ZpbGVfZXhjZXB0aW9ucywgJGFkaV9kZXRyaXR1c19kZWJ1ZzsKCglp ZiAoJGFkaV9kZXRyaXR1c19kZWJ1ZykgewoJCWVjaG8gX19GVU5DVElPTl9fLicoKTonLmJy OwoJCWVjaG8gKCRleGNlcHRpb25zID8gJ0VYQ0VQVElPTlMgJyA6ICcnKS4iUExBQ0VIT0xE RVI9JHBsYWNlaG9sZGVyLCBQUkVGPSRwcmVmX3RleHRhcmVhIi5icjsKCX0KCglpZiAoJGV4 Y2VwdGlvbnMpIC8vIGZpeCB1cCBleGNlcHRpb25zIGxpc3QKCQlmb3JlYWNoICgkYWRpX2Rl dHJpdHVzX2ZpbGVfZXhjZXB0aW9ucyBhcyAkdGVzdCA9PiAkZXhjZXB0aW9ucykgewoJCQlm b3JlYWNoICgkZXhjZXB0aW9ucyBhcyAkaW5kZXggPT4gJGV4Y2VwdGlvbikgewoJCQkJaWYg KHN0cnBvcygkZXhjZXB0aW9uLCAkcGxhY2Vob2xkZXIpICE9PSBGQUxTRSkgewoJCQkJCWlm ICgkYWRpX2RldHJpdHVzX2RlYnVnKQoJCQkJCQllY2hvICctICcuc3RyX3JlcGxhY2UoYXJy YXkoJ3snLCAnfScpLCAnJywgc3RydG91cHBlcigkcGxhY2Vob2xkZXIpKS4iIFJFTU9WRSBU RVNUPSR0ZXN0LCBFWENFUFRJT049Ii4kYWRpX2RldHJpdHVzX2ZpbGVfZXhjZXB0aW9uc1sk dGVzdF1bJGluZGV4XS5icjsKCQkJCQl1bnNldCgkYWRpX2RldHJpdHVzX2ZpbGVfZXhjZXB0 aW9uc1skdGVzdF1bJGluZGV4XSk7IC8vIHJlbW92ZSBwbGFjZWhvbGRlciBlbnRyeQoJCQkJ CWlmICgkcHJlZl90ZXh0YXJlYSkgeyAvLyBzdWJzdGl0dXRlIGluIG5ldyBkaXJzCgkJCQkJ CWZvcmVhY2ggKGV4cGxvZGUoIlxuIiwgc3RyX3JlcGxhY2UoIlxyIiwgJycsICRwcmVmX3Rl eHRhcmVhKSkgYXMgJGRpcikgewoJCQkJCQkJJGFkaV9kZXRyaXR1c19maWxlX2V4Y2VwdGlv bnNbJHRlc3RdW10gPSBzdHJfcmVwbGFjZSgkcGxhY2Vob2xkZXIsICRkaXIsICRleGNlcHRp b24pOwoJCQkJCQkJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpCgkJCQkJCQkJZWNobyAnLSAn LnN0cl9yZXBsYWNlKGFycmF5KCd7JywgJ30nKSwgJycsIHN0cnRvdXBwZXIoJHBsYWNlaG9s ZGVyKSkuIiBBREQgVEVTVD0kdGVzdCwgRVhDRVBUSU9OPSIuc3RyX3JlcGxhY2UoJHBsYWNl aG9sZGVyLCAkZGlyLCAkZXhjZXB0aW9uKS5icjsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJ fQoJCX0KCWVsc2UgLy8gZml4IHVwIGZpbGVzeXN0ZW0ga2l0CgkJZm9yZWFjaCAoJGFkaV9k ZXRyaXR1c19maWxlX2tpdCBhcyAkdGVzdCA9PiAkZ3JvdXApIHsKCQkJZm9yZWFjaCAoJGdy b3VwIGFzICR2ZXJzaW9uID0+ICRwYWlyKSB7CgkJCQlmb3JlYWNoICgkcGFpciBhcyAkaXRl bSA9PiAkd2FybmluZykgewoJCQkJCWlmIChzdHJwb3MoJGl0ZW0sICRwbGFjZWhvbGRlcikg IT09IEZBTFNFKSB7CgkJCQkJCSR0aGlzX3dhcm5pbmcgPSAkd2FybmluZzsKCQkJCQkJJHRo aXNfdGFpbCA9IHN0cl9yZXBsYWNlKCRwbGFjZWhvbGRlciwgJycsICRpdGVtKTsKCQkJCQkJ aWYgKCRhZGlfZGV0cml0dXNfZGVidWcpCgkJCQkJCQllY2hvICctICcuc3RyX3JlcGxhY2Uo YXJyYXkoJ3snLCAnfScpLCAnJywgc3RydG91cHBlcigkcGxhY2Vob2xkZXIpKS4iIFJFTU9W RSBURVNUPSR0ZXN0LCBWRVJTSU9OPSR2ZXJzaW9uLCBJVEVNPSRpdGVtIi5icjsKCQkJCQkJ dW5zZXQoJGFkaV9kZXRyaXR1c19maWxlX2tpdFskdGVzdF1bJHZlcnNpb25dWyRpdGVtXSk7 IC8vIHJlbW92ZSBwbGFjZWhvbGRlciBlbnRyeQoJCQkJCQlpZiAoJHByZWZfdGV4dGFyZWEp IHsgLy8gc3Vic3RpdHV0ZSBpbiBuZXcgZGlycwoJCQkJCQkJZm9yZWFjaCAoZXhwbG9kZSgi XG4iLCBzdHJfcmVwbGFjZSgiXHIiLCAnJywgJHByZWZfdGV4dGFyZWEpKSBhcyAkZGlyKSB7 CgkJCQkJCQkJJGFkaV9kZXRyaXR1c19maWxlX2tpdFskdGVzdF1bJHZlcnNpb25dWyRkaXIu JHRoaXNfdGFpbF0gPSAkdGhpc193YXJuaW5nOwoJCQkJCQkJCWlmICgkYWRpX2RldHJpdHVz X2RlYnVnKQoJCQkJCQkJCQllY2hvICctICcuc3RyX3JlcGxhY2UoYXJyYXkoJ3snLCAnfScp LCAnJywgc3RydG91cHBlcigkcGxhY2Vob2xkZXIpKS4iIEFERCBURVNUPSR0ZXN0LCBWRVJT SU9OPSR2ZXJzaW9uLCBJVEVNPSRkaXIkdGhpc190YWlsLCBXQVJOSU5HPSIuJHdhcm5pbmcu YnI7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cn0KCmZ1bmN0aW9u IGFkaV9kZXRyaXR1c19leGNlc3MoJHBhdGgsICYkZGVidWcpIHsKLy8gc2NhbiB1bmxpbmtl ZCBmaWxlcyBhbmQgcmV0dXJuIGFycmF5IG9mIGV4dGVuc2lvbnMgYW5kIGNvdW50cwoJZ2xv YmFsICRhZGlfZGV0cml0dXNfbGlua2VkX2ZpbGVzOwoKCWlmICghaXNfZGlyKCRwYXRoKSkg ewoJCSRkZWJ1Z1tdID0gIi0tLSBJR05PUkU6IE5PVCBBIERJUkVDVE9SWSI7CgkJcmV0dXJu IGFycmF5KCk7Cgl9CgoJJGl0ZW1zID0gZ2xvYigiJHBhdGgvKiIsIEdMT0JfQlJBQ0UpOwoJ JGRlYnVnW10gPSAiLS0tIElURU1TIElOIERJUkVDVE9SWTogIi5pbXBsb2RlKCcsICcsICRp dGVtcyk7CgkkZXh0bnMgPSAkZGJfbGlua2VkID0gYXJyYXkoKTsKCWZvcmVhY2ggKCRpdGVt cyBhcyAkaXRlbSkgewoJCWlmIChpbl9hcnJheSgkaXRlbSwgJGFkaV9kZXRyaXR1c19saW5r ZWRfZmlsZXMpKSAgLy8gaWdub3JlIGRiLWxpbmtlZCBmaWxlcwoJCQkkZGJfbGlua2VkW10g PSAkaXRlbTsKCQllbHNlIHsKCQkJJGV4dG4gPSBwYXRoaW5mbygkaXRlbSwgUEFUSElORk9f RVhURU5TSU9OKTsKCQkJaWYgKCRleHRuICE9ICcnKQoJCQkJaXNzZXQoJGV4dG5zWyRleHRu XSkgPyAkZXh0bnNbJGV4dG5dKysgOiAkZXh0bnNbJGV4dG5dID0gMTsKCQl9Cgl9CgoJJGRl YnVnW10gPSAnLS0tIElHTk9SRSBEQi1MSU5LRUQ6ICcuaW1wbG9kZSgnLCAnLCAkZGJfbGlu a2VkKTsKCSRtc2cgPSAnJzsKCWZvcmVhY2ggKCRleHRucyBhcyAkZXh0biA9PiAkY291bnQp CgkJJG1zZyAuPSAiJGV4dG49JGNvdW50ICI7CgkkZGVidWdbXSA9ICctLS0gVU5MSU5LRUQg RVhUTiBDT1VOVFM6ICcuJG1zZzsKCglyZXR1cm4gJGV4dG5zOwp9CgpmdW5jdGlvbiBhZGlf ZGV0cml0dXNfaXNfZW1wdHkoJGRpcikgewovLyB0ZXN0IGZpbGUvZGlyIHRvIHNlZSBpZiBl bXB0eSAocmV0dXJuIE5VTEwgaWYgdW5yZWFkYWJsZSkKCglpZiAoIWlzX3JlYWRhYmxlKCRk aXIpKSByZXR1cm4gTlVMTDsKCWlmIChpc19kaXIoJGRpcikpCgkJcmV0dXJuIChjb3VudChz Y2FuZGlyKCRkaXIpKSA9PSAyKTsKCWlmIChpc19maWxlKCRkaXIpKQoJCXJldHVybiAoZmls ZXNpemUoJGRpcikgPT0gMCk7Cn0KCmZ1bmN0aW9uIGFkaV9kZXRyaXR1c19pc19wbGFpbnRl eHQoJHBhdGgpIHsKLy8gdGVzdCBpZiBmaWxlIGlzIHBsYWluIHRleHQKCglpZiAoIWlzX3Jl YWRhYmxlKCRwYXRoKSkgcmV0dXJuIFRSVUU7IC8vIGlnbm9yZSB1bnJlYWRhYmxlcwoJaWYg KGlzX2RpcigkcGF0aCkpIHJldHVybiBUUlVFOyAvLyBpZ25vcmUgZGlycwoKCXJldHVybiAo QG1pbWVfY29udGVudF90eXBlKCRwYXRoKSA9PSAndGV4dC9wbGFpbicpOwp9CgpmdW5jdGlv biBhZGlfZGV0cml0dXNfaXNfeG1sKCRwYXRoKSB7Ci8vIHRlc3QgaWYgZmlsZSBpcyB4bWwK CglpZiAoIWlzX3JlYWRhYmxlKCRwYXRoKSkgcmV0dXJuIFRSVUU7IC8vIGlnbm9yZSB1bnJl YWRhYmxlcwoJaWYgKGlzX2RpcigkcGF0aCkpIHJldHVybiBUUlVFOyAvLyBpZ25vcmUgZGly cwoKCXJldHVybiAoQG1pbWVfY29udGVudF90eXBlKCRwYXRoKSA9PSAnYXBwbGljYXRpb24v eG1sJyk7Cn0KCmZ1bmN0aW9uIGFkaV9kZXRyaXR1c19pc19ub3RfY3NzKCRwYXRoKSB7Ci8v IHRlc3QgaWYgZmlsZSBpcyBub3QgQ1NTIGZpbGUgdHlwZQoKCWlmICghaXNfcmVhZGFibGUo JHBhdGgpKSByZXR1cm4gRkFMU0U7IC8vIGlnbm9yZSB1bnJlYWRhYmxlcwoJaWYgKGlzX2Rp cigkcGF0aCkpIHJldHVybiBGQUxTRTsgLy8gaWdub3JlIGRpcnMKCgkkY3NzX3R5cGVzID0g YXJyYXkoJ3RleHQvcGxhaW4nLCAndGV4dC9jc3MnLCAndGV4dC94LWFzbScpOyAvLyBzb21l IGNzcyBmaWxlcyBnZXQgbWlzaW50ZXJwcmV0ZWQgYXMgInRleHQveC1hc20iCgoJaWYgKGFy cmF5X3NlYXJjaChAbWltZV9jb250ZW50X3R5cGUoJHBhdGgpLCAkY3NzX3R5cGVzKSA9PT0g RkFMU0UpCgkJcmV0dXJuIEBtaW1lX2NvbnRlbnRfdHlwZSgkcGF0aCk7CgllbHNlCgkJcmV0 dXJuIEZBTFNFOwp9CgpmdW5jdGlvbiBhZGlfZGV0cml0dXNfaXNfaW1hZ2UoJHBhdGgpIHsK Ly8gdGVzdCBpZiBmaWxlIGlzIGltYWdlIChoYXZlIHRvIGRvIGl0IGhlcmUgaW4gb3JkZXIg dG8gY2lyY3VtdmVudCBOT1RJQ0UgbWVzc2FnZXMgZnJvbSBleGlmX2ltYWdldHlwZSkKLy8J LSByZXR1cm5zIGludGVnZXIgZm9yIGltYWdlIHR5cGUgb3Igbm9uLWludGVnZXIgZm9yIG5v bi1pbWFnZXMKLy8JLSB1c2UgaXNfaW50KGFkaV9kZXRyaXR1c19pc19pbWFnZSgkcGF0aCkp IHRvIGlkZW50aWZ5IGdlbnVpbmUgaW1hZ2VzLCBhcyBvcHBvc2VkIHRvIGltYWdlcyAmIGln bm9yZWQgZGlycy91bnJlYWRhYmxlcwoKCWlmICghaXNfcmVhZGFibGUoJHBhdGgpKSByZXR1 cm4gJ25vdHJlYWRhYmxlJzsgLy8gaWdub3JlIHVucmVhZGFibGVzCglpZiAoaXNfZGlyKCRw YXRoKSkgcmV0dXJuICdpc2Rpcic7IC8vIGlnbm9yZSBkaXJzCglpZiAocGF0aGluZm8oJHBh dGgsIFBBVEhJTkZPX0VYVEVOU0lPTikgPT0gJ3N2ZycpIHJldHVybiA5OTsgLy8gcmVjb2du aXNlIFNWR3MgYXMgaW1hZ2VzICh3aXRoIGEgbWFkZS11cCAiSW1hZ2V0eXBlIENvbnN0YW50 IikKCWlmIChmaWxlc2l6ZSgkcGF0aCkgPCAxMikgcmV0dXJuIEZBTFNFOyAvLyBleGlmX2lt YWdldHlwZSgpIHRocm93cyAiUmVhZCBlcnJvciEiIGlmIGZpbGUgdG9vIHNtYWxsIChodHRw czovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5leGlmLWltYWdldHlwZS5waHAj NzkyODMpCgoJcmV0dXJuIGV4aWZfaW1hZ2V0eXBlKCRwYXRoKTsgLy8gYSBudW1iZXIgMS0x OCBvciBGQUxTRQp9CgpmdW5jdGlvbiBhZGlfZGV0cml0dXNfaXNfdHhwX2ltYWdlX2Zvcm1h dCgkcGF0aCkgewovLyB0ZXN0IGlmIGZpbGVuYW1lIGlzIFRYUCBpbWFnZSBmaWxlbmFtZSwg ZS5nLiA5OS5leHQgb3IgOTl0LmV4dAoKCSRmaWxlcGFydCA9IHBhdGhpbmZvKCRwYXRoLCBQ QVRISU5GT19GSUxFTkFNRSk7IC8vIGdldCAnMScsICcxdCcgZXRjIGZyb20gZmlsZW5hbWUK CglyZXR1cm4gKHByZWdfbWF0Y2goJyNeWzAtOV0rJCMnLCAkZmlsZXBhcnQpIHx8IHByZWdf bWF0Y2goJyNeWzAtOV0rdCQjJywgJGZpbGVwYXJ0KSk7Cn0KCmZ1bmN0aW9uIGFkaV9kZXRy aXR1c19pc190eHBfaW1hZ2VfdHlwZSgkcGF0aCkgewovLyB0ZXN0IGlmIGZpbGUgaXMgVFhQ IHN1cHBvcnRlZCBpbWFnZSAoaGF2ZSB0byBkbyBpdCBoZXJlIGluIG9yZGVyIHRvIHN1cHBy ZXNzIE5PVElDRSBtZXNzYWdlcyBmcm9tIGV4aWZfaW1hZ2V0eXBlKQoKCS8vIGZpbHRlciBv dXQgdGhlIGlycmVsZXZlbnQKCWlmICghaXNfcmVhZGFibGUoJHBhdGgpKSByZXR1cm4gVFJV RTsgLy8gaWdub3JlIHVucmVhZGFibGVzCglpZiAoaXNfZGlyKCRwYXRoKSkgcmV0dXJuIFRS VUU7IC8vIGlnbm9yZSBkaXJzCglpZiAocGF0aGluZm8oJHBhdGgsIFBBVEhJTkZPX0VYVEVO U0lPTikgPT0gJ3N2ZycpIHJldHVybiAnJzsgLy8gcmVjb2duaXNlIFNWR3MgYXMgaW1hZ2Vz IGJ1dCBmbGFnIGFzIHVuc3VwcG9ydGVkCglpZiAoZmlsZXNpemUoJHBhdGgpIDwgMTIpIHJl dHVybiBUUlVFOyAvLyBleGlmX2ltYWdldHlwZSgpIHRocm93cyAiUmVhZCBlcnJvciEiIGlm IGZpbGUgdG9vIHNtYWxsIChodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlv bi5leGlmLWltYWdldHlwZS5waHAjNzkyODMpCglpZiAoIWV4aWZfaW1hZ2V0eXBlKCRwYXRo KSkgcmV0dXJuIFRSVUU7ICAvLyBpZ25vcmUgbm9uLWltYWdlIGZpbGV0eXBlcwoKICAgIGxp c3QoJHcsICRoLCAkZXh0KSA9IEBnZXRpbWFnZXNpemUoJHBhdGgpOyAvLyBnZXQgZXh0biB0 eXBlICgxPWdpZiwgMj1qcGcsIDM9cG5nIGV0YykKICAgICRleHQgPSBnZXRfc2FmZV9pbWFn ZV90eXBlcygkZXh0KTsgLy8gVFhQIHN1cHBvcnRlZD8KCglyZXR1cm4gJGV4dDsKfQoKZnVu Y3Rpb24gYWRpX2RldHJpdHVzX2dldF9maWxlcygkZGlyLCAkZmlsdGVyX2Z1bmMgPSAnJykg ewovLyByZXR1cm4gbGlzdCBvZiBmaWxlcyBpbiBnaXZlbiBkaXJlY3RvcnkKCgkkZmlsZXMg PSBzY2FuZGlyKCRkaXIpOwoJJHBhdGhzID0gYXJyYXkoKTsKCWZvcmVhY2goJGZpbGVzIGFz ICRpbmRleCA9PiAkZmlsZW5hbWUpIHsKCQlpZiAoaXNfZGlyKCRkaXIuRFMuJGZpbGVuYW1l KSkKCQkJY29udGludWU7CgkJaWYgKCRmaWx0ZXJfZnVuYykKCQkJaWYgKCEkZmlsdGVyX2Z1 bmMoJGRpci5EUy4kZmlsZW5hbWUpKQoJCQkJY29udGludWU7CgkJJHBhdGhzW10gPSAkZGly LkRTLiRmaWxlbmFtZTsKCX0KCglyZXR1cm4gJHBhdGhzOwp9CgpmdW5jdGlvbiBhZGlfZGV0 cml0dXNfZ2V0X2xpbmtlZF9maWxlcygkdGFibGUsICRwYXRoKSB7Ci8vIHJldHVybnMgYSBz aW1wbGUgbGlzdCBvZiBmaWxlbmFtZXMgKGZpbGVzIG9yIGltYWdlcykgZnJvbSBnaXZlbiB0 YWJsZQoJZ2xvYmFsICRmaWxlX2Jhc2VfcGF0aDsKCglpZiAoJHRhYmxlID09ICd0eHBfZmls ZScpIHsKCQkkY29sdW1uID0gJ2ZpbGVuYW1lJzsKCQkkcm93cyA9IHNhZmVfcm93cygkY29s dW1uLCAkdGFibGUsICcxPTEnKTsKCQkkZmlsZW5hbWVzID0gYXJyYXlfY29sdW1uKCRyb3dz LCAkY29sdW1uKTsgLy8gbGlzdCBvZiBmaWxlcwoJCXJldHVybiBwcmVnX2ZpbHRlcignL14v JywgJHBhdGguRFMsICRmaWxlbmFtZXMpOyAvLyBhZGQgcGF0aHMKCX0KCWlmICgkdGFibGUg PT0gJ3R4cF9pbWFnZScpIHsKCQkkY29sdW1uID0gJ2lkLCBleHQsIHRodW1ibmFpbCc7CgkJ JHJvd3MgPSBzYWZlX3Jvd3MoJGNvbHVtbiwgJHRhYmxlLCAnMT0xJyk7CgkJJGZpbGVuYW1l cyA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJHJvd3MgYXMgJHJvdykgewoJCQkkZmlsZW5hbWVz W10gPSAkcm93WydpZCddLiRyb3dbJ2V4dCddOyAvLyBjb21iaW5lIGlkICYgZXh0IGNvbHVt bnMgdG8gZ2VuZXJhdGUgaW1hZ2UgZmlsZW5hbWUKCQkJaWYgKCRyb3dbJ3RodW1ibmFpbCdd KQoJCQkJJGZpbGVuYW1lc1tdID0gJHJvd1snaWQnXS4ndCcuJHJvd1snZXh0J107IC8vIGFk ZCB0aHVtYm5haWwgZmlsZW5hbWUKCQl9CgkJcmV0dXJuIHByZWdfZmlsdGVyKCcvXi8nLCAk cGF0aC5EUywgJGZpbGVuYW1lcyk7Cgl9Cn0KCmZ1bmN0aW9uIGFkaV9kZXRyaXR1c19nZXRf ZGlycygkZGlyKSB7Ci8vIHJldHVybiBsaXN0IG9mIGZpbGVzIGluIGdpdmVuIGRpcmVjdG9y eQoKCSRmaWxlcyA9IHNjYW5kaXIoJGRpcik7CgkkcGF0aHMgPSBhcnJheSgpOwoJZm9yZWFj aCgkZmlsZXMgYXMgJGluZGV4ID0+ICRmaWxlbmFtZSkgewoJCWlmICghaXNfZGlyKCRkaXIu RFMuJGZpbGVuYW1lKSkKCQkJY29udGludWU7CgkJJHBhdGhzW10gPSAkZGlyLkRTLiRmaWxl bmFtZTsKCX0KCglyZXR1cm4gJHBhdGhzOwp9CgpmdW5jdGlvbiBhZGlfZGV0cml0dXNfaXNf c2l6ZWFibGUoJHBhdGgpIHsKLy8gdGVzdCBmb3IgZmF0IGJveXMsIHJldHVybiBmaWxlc2l6 ZSBpZiB0cnVlCgoJLy8gZmlsdGVyIG91dCB0aGUgaXJyZWxldmVudAoJaWYgKCFpc19yZWFk YWJsZSgkcGF0aCkpIHJldHVybiBGQUxTRTsgLy8gaWdub3JlIHVucmVhZGFibGVzLCBjb3og dGhleSBoYXZlIGEgZGVkaWNhdGVkIHRlc3QKCWlmIChpc19kaXIoJHBhdGgpKSByZXR1cm4g RkFMU0U7IC8vIGlnbm9yZSBkaXJzLCBjb3ogdGhleSBjYW4ndCBiZSBzaXplYWJsZSBhbnl3 YXkKCgkkYWRpX2RldHJpdHVzX2ZpbGVfc2l6ZSA9IGFkaV9kZXRyaXR1c190b19ieXRlcyhh ZGlfZGV0cml0dXNfcHJlZignYWRpX2RldHJpdHVzX2ZpbGVfc2l6ZScpKTsKCSRhZGlfZGV0 cml0dXNfaW1hZ2Vfc2l6ZSA9IGFkaV9kZXRyaXR1c190b19ieXRlcyhhZGlfZGV0cml0dXNf cHJlZignYWRpX2RldHJpdHVzX2ltYWdlX3NpemUnKSk7CgoJaWYgKGFkaV9kZXRyaXR1c19p c19pbWFnZSgkcGF0aCkpCgkJcmV0dXJuIChmaWxlc2l6ZSgkcGF0aCkgPiAkYWRpX2RldHJp dHVzX2ltYWdlX3NpemUgPyBmaWxlc2l6ZSgkcGF0aCkgOiAwKTsKCWVsc2UKCQlyZXR1cm4g KGZpbGVzaXplKCRwYXRoKSA+ICRhZGlfZGV0cml0dXNfZmlsZV9zaXplID8gZmlsZXNpemUo JHBhdGgpIDogMCk7Cn0KCmZ1bmN0aW9uIGFkaV9kZXRyaXR1c19zaXRlX3BhdGgoJGl0ZW0p IHsKLy8gYWRkIHBhdGggdG8gc2l0ZSBpZiBtaXNzaW5nCi8vCS0gZXhhbXBsZXMgb2YgVW5p eCBhYnNvbHV0ZSBwYXRoczogL3ByaXZhdGUvdmFyL3RtcCAobG9jYWwgVFhQIHRlbXAgZGly KSwgL1VzZXJzL2FkaS9TaXRlcy90eHBkZXYgKHBsdWdpbiBjYWNoZSBkaXIpCi8vCS0gV2lu ZG93cyBwYXRoIGV4YW1wbGVzOiBDOlx4YW1wcFxodGRvY3MgKHdlYnNpdGUgcm9vdCkKCWds b2JhbCAkcGF0aF90b19zaXRlOwoKCWlmIChzdHJwb3MoJGl0ZW0sICRwYXRoX3RvX3NpdGUp ID09PSAwKSByZXR1cm4gJGl0ZW07IC8vIGFscmVhZHkgaGFzIHBhdGggdG8gc2l0ZSAmIHJl dHVybiBhcyBpcwoJaWYgKHN0cnBvcygkaXRlbSwgRFMpID09PSAwKSByZXR1cm4gJGl0ZW07 IC8vIHN0YXJ0cyB3aXRoICIvIiBvciAiXCIgc28gYXNzdW1lIGFic29sdXRlIHBhdGggJiBy ZXR1cm4gYXMgaXMgLi4uIFVOUFJPVkVOIFdJVEggV0lORE9XUyBIT1NUSU5HCglpZiAoc3Ry cG9zKCRpdGVtLCAnOicpID09PSAxKSByZXR1cm4gJGl0ZW07IC8vIHN0YXJ0cyB3aXRoICJD OiIgb3Igc29tZXN1Y2gsIHNvIGFzc3VtZSBhYnNvbHV0ZSBwYXRoICYgcmV0dXJuIGFzIGlz CgoJcmV0dXJuICRwYXRoX3RvX3NpdGUuRFMuJGl0ZW07Cn0KCmZ1bmN0aW9uIGFkaV9kZXRy aXR1c19mcm9tX2J5dGVzKCRieXRlcykgewovLyB0cmFuc2Zvcm0gYnl0ZXMgaW50byBzbWVn Z2VyLWJ5dGVzIC4uLgoKCWlmICgkYnl0ZXMgPCAxMDI0KQoJCSRzaXplID0gJGJ5dGVzLicg Ynl0ZXMnOwoJZWxzZSBpZiAoJGJ5dGVzIDwgcG93KDEwMjQsIDIpKSB7CgkJCSRzaXplID0g cm91bmQoJGJ5dGVzIC8gMTAyNCk7CgkJCSRzaXplIC49ICcgS0InOwoJfQoJZWxzZSBpZiAo JGJ5dGVzIDwgcG93KDEwMjQsIDMpKSB7CgkJCSRzaXplID0gcm91bmQoJGJ5dGVzIC8gcG93 KDEwMjQsIDIpLCAyKTsKCQkJJHNpemUgLj0gJyBNQic7Cgl9CgllbHNlIHsKCQkJJHNpemUg PSByb3VuZCgkYnl0ZXMgLyBwb3coMTAyNCwgMyksIDIpOwoJCQkkc2l6ZSAuPSAnIEdCJzsK CX0KCXJldHVybiAkc2l6ZTsKfQoKZnVuY3Rpb24gYWRpX2RldHJpdHVzX3RvX2J5dGVzKCRz dHIpIHsKLy8gY29udmVydCBtZWdhcyBpbnRvIHNtYWxsZXJzCgoJaWYgKGlzX251bWVyaWMo JHN0cikpCgkJcmV0dXJuICRzdHI7CgllbHNlIHsKCQkkc3RyID0gc3RydG9sb3dlcigkc3Ry KTsKCQlpZiAoc3RycG9zKCRzdHIsICdrYicpICE9PSBGQUxTRSkgewoJCQkkc3RyPSBzdHJf cmVwbGFjZSgna2InLCAnJywgJHN0cik7CgkJCXJldHVybiAoaXNfbnVtZXJpYygkc3RyKSA/ IChpbnQpJHN0ciAqIDEwMjQgOiBGQUxTRSk7CgkJfQoJCWVsc2UgaWYgKHN0cnBvcygkc3Ry LCAnbWInKSAhPT0gRkFMU0UpIHsKCQkJJHN0cj0gc3RyX3JlcGxhY2UoJ21iJywgJycsICRz dHIpOwoJCQlyZXR1cm4gKGlzX251bWVyaWMoJHN0cikgPyAoaW50KSRzdHIgKiBwb3coMTAy NCwgMikgOiBGQUxTRSk7CgkJfQoJCWVsc2UgaWYgKHN0cnBvcygkc3RyLCAnZ2InKSAhPT0g RkFMU0UpIHsKCQkJJHN0cj0gc3RyX3JlcGxhY2UoJ2diJywgJycsICRzdHIpOwoJCQlyZXR1 cm4gKGlzX251bWVyaWMoJHN0cikgPyAoaW50KSRzdHIgKiBwb3coMTAyNCwgMykgOiBGQUxT RSk7CgkJfQoJfQoJcmV0dXJuIEZBTFNFOwp9CgpmdW5jdGlvbiBhZGlfZGV0cml0dXNfcHJv Y2Vzc19wbHVnaW5zX2RiKCR0YWJsZXMsICR3aGVyZSkgewovLyByZXR1cm4gaW5mb3JtYXRp b24gYWJvdXQgcGx1Z2lucyAodHdvIG1vZGVzKToKLy8JLSBpZiBvbmx5IHR4cF9wbHVnaW4g dGFibGUgcHJvdmlkZWQgdGhlbiB3aWxsIGxvb2sgaW5zaWRlIHRoYXQgdGFibGUKLy8JLSBp ZiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0YWJsZXMgcHJvdmlkZWQgdGhlbiB3aWxsIGxv b2sgZm9yIHJlZmVyZW5jZXMgdG8gYWxsIHBsdWdpbnMgaW4gdGhvc2UgdGFibGVzL2NvbHVt bnMgKGNvbHVtbnMgc3VwcGxpZWQgaW4gJHdoZXJlKQoJZ2xvYmFsICRhZGlfZGV0cml0dXNf ZGVidWcsICRwbHVnaW5fY2FjaGVfZGlyOwoKCWlmICgkdGFibGVzID09ICd0eHBfcGx1Z2lu JykgeyAvLyBqdXN0IGludGVyZXN0ZWQgaW4gbG9va2luZyBpbnNpZGUgdHhwX3BsdWdpbiB0 YWJsZQoJCSRyb3dzID0gc2FmZV9yb3dzKCduYW1lJywgJHRhYmxlcywgJHdoZXJlKTsgLy8g MD0+KCduYW1lJz0+J3BsdWdpbjEnLCAuLi4pCgkJcmV0dXJuICRyb3dzOwoJfQoJZWxzZSB7 IC8vIGRhdGFiYXNlLXdpZGUgcGx1Z2luIHRyYXdsCgkJJG5vdF9mb3VuZCA9IGFycmF5KCk7 CgkJLy8gZ2V0IGluc3RhbGxlZCBwbHVnaW5zCgkJJHBsdWdpbnMgPSBzYWZlX3Jvd3MoJ25h bWUnLCAndHhwX3BsdWdpbicsICdzdGF0dXMgPSAxIEFORCB0eXBlID0gMCcpOyAvLyBsaXN0 IGlmIGFjdGl2ZSBhbmQgcHVibGljLW9ubHkgcGx1Z2lucwoJCWlmICgkYWRpX2RldHJpdHVz X2RlYnVnKSBlY2hvICdJTlNUQUxMRUQgUExVR0lOUyAoVFlQRSAwIE9OTFkpOicuYnI7CgkJ aWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIGVjaG8gJy0gJy5pbXBsb2RlKCcsICcsIGFycmF5 X2NvbHVtbigkcGx1Z2lucywgJ25hbWUnKSkuYnI7CgkJLy8gZmxhZyBpbnN0YWxsZWQgcGx1 Z2lucyBhcyAnaW5zdGFsbGVkJwoJCWFycmF5X3dhbGsoJHBsdWdpbnMsIGZ1bmN0aW9uKCYk dmFsLCAka2V5KSB1c2UgKCYkcGx1Z2lucykgeyAkcGx1Z2luc1ska2V5XVsnbG9jYXRpb24n XSA9ICdpbnN0YWxsZWQnOyB9KTsKCQkvLyBsb29rIGZvciBwbHVnaW5zIGluIGNhY2hlICYg bWFyayBhcyAnY2FjaGVkJwoJCWlmICgkYWRpX2RldHJpdHVzX2RlYnVnKSBlY2hvICdDQUNI RUQgUExVR0lOUyAoVFlQRSAwIE9OTFkpJy5ici4nLSAnOwoJCSRjYWNoZWRfcGx1Z2lucyA9 IGdsb2IoJHBsdWdpbl9jYWNoZV9kaXIuRFMuJyoucGhwJyk7CgkJLy8gcGFyc2UgcGx1Z2lu IGZpbGUgZm9yIG5hbWUgJiB0eXBlCgkJZm9yZWFjaCAoJGNhY2hlZF9wbHVnaW5zIGFzICRj YWNoZWRfcGx1Z2luX2ZpbGUpIHsKCQkJJHBsdWdpbl9jb2RlID0gZmlsZV9nZXRfY29udGVu dHMoJGNhY2hlZF9wbHVnaW5fZmlsZSk7CgkJCS8vIHBsdWdpbiBuYW1lCgkJCXByZWdfbWF0 Y2hfYWxsKCcvXCRwbHVnaW5cW1wnbmFtZVwnXF1ccyo9XHMqXCcoLio/KVwnLycsICRwbHVn aW5fY29kZSwgJG1hdGNoZXMpOwoJCQlpZiAoaXNzZXQoJG1hdGNoZXNbMV1bMF0pICYmICRt YXRjaGVzWzFdWzBdKSB7CgkJCQkkY2FjaGVkX3BsdWdpbl9uYW1lID0gJG1hdGNoZXNbMV1b MF07CgkJCQkvLyAkcGx1Z2luWyd0eXBlJ10gPSAnMCc7IChRVU9URUQpCgkJCQlwcmVnX21h dGNoX2FsbCgnL1wkcGx1Z2luXFtcJ3R5cGVcJ1xdXHMqPVxzKlwnKC4qPylcJy8nLCAkcGx1 Z2luX2NvZGUsICRtYXRjaGVzKTsKCQkJCWlmIChpc3NldCgkbWF0Y2hlc1sxXVswXSkgJiYg JG1hdGNoZXNbMV1bMF0pIHsgLy8gaWdub3JlIHR5cGUgIT0gJzAnIChub3Qgd2hvbGx5IHB1 YmxpYyBzaWRlKQoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQkJLy8gJHBsdWdpblsndHlwZSdd ID0gMDsgKE5PVCBRVU9URUQpCgkJCQlwcmVnX21hdGNoX2FsbCgnL1wkcGx1Z2luXFtcJ3R5 cGVcJ1xdXHMqPVxzKiguKj8pXHMqOy8nLCAkcGx1Z2luX2NvZGUsICRtYXRjaGVzKTsKCQkJ CWlmIChpc3NldCgkbWF0Y2hlc1sxXVswXSkgJiYgJG1hdGNoZXNbMV1bMF0pIHsgLy8gaWdu b3JlIHR5cGUgIT0gMCAobm90IHdob2xseSBwdWJsaWMgc2lkZSkKCQkJCQljb250aW51ZTsK CQkJCX0KCQkJCS8vIGFic2VuY2Ugb2YgJHBsdWdpblsndHlwZSddIChpLmUuIHR5cGUgMCkg ZmFsbHMgdGhyb3VnaCB0byBoZXJlIGFsc28KCQkJCWlmICgkYWRpX2RldHJpdHVzX2RlYnVn KSBlY2hvICRjYWNoZWRfcGx1Z2luX25hbWUsJywgJzsKCQkJCS8vIGFkZCB0byAod2hvbGx5 KSBwdWJsaWMgcGx1Z2lucyBsaXN0CgkJCQkkcGx1Z2luc1tdID0gYXJyYXkoJ25hbWUnID0+ ICRjYWNoZWRfcGx1Z2luX25hbWUsICdsb2NhdGlvbicgPT4gJ2NhY2hlZCcsICdwYXRoJyA9 PiAkY2FjaGVkX3BsdWdpbl9maWxlKTsKCQkJfQoJCX0KCQlpZiAoJGFkaV9kZXRyaXR1c19k ZWJ1ZykgZWNobyBicjsKCgkJLy8gcHJvY2VzcyBwbHVnaW5zCgkJJHRhYmxlX2xpc3QgPSBk b19saXN0KCR0YWJsZXMpOwoJCXNvcnQoJHBsdWdpbnMpOwoJCWlmICgkYWRpX2RldHJpdHVz X2RlYnVnKSBlY2hvICdQTFVHSU4gVEFHIFNFQVJDSDonLmJyOwoJCWZvcmVhY2ggKCRwbHVn aW5zIGFzICRwbHVnaW4pIHsKCQkJJHN1cHBsZW1lbnRhcnkgPSBhcnJheSgpOwoJCQkkY2Fj aGVkID0gRkFMU0U7CgkJCWlmICgkYWRpX2RldHJpdHVzX2RlYnVnKSBlY2hvICctICcuJHBs dWdpblsnbmFtZSddLicgKCcuJHBsdWdpblsnbG9jYXRpb24nXS4oJHBsdWdpblsnbG9jYXRp b24nXSA9PSAnY2FjaGVkJyA/ICcsICcuJHBsdWdpblsncGF0aCddIDogJycpLicpJy5icjsK CQkJLy8gZ2V0IHBsdWdpbiBjb2RlCgkJCWlmICgkcGx1Z2luWydsb2NhdGlvbiddID09ICdp bnN0YWxsZWQnKSAvLyBpbnN0YWxsZWQgcGx1Z2luCgkJCQkkcGx1Z2luX2NvZGUgPSBmZXRj aCgnY29kZScsICd0eHBfcGx1Z2luJywgJ25hbWUnLCAkcGx1Z2luWyduYW1lJ10pOwoJCQll bHNlIHsgLy8gY2FjaGVkIHBsdWdpbgoJCQkJJHBsdWdpbl9jb2RlID0gZmlsZV9nZXRfY29u dGVudHMoJHBsdWdpblsncGF0aCddKTsKCQkJCSRjYWNoZWQgPSBUUlVFOwoJCQl9CgkJCS8v IGZpbmQgcmVnaXN0ZXJlZCB0YWdzCgkJCXByZWdfbWF0Y2hfYWxsKCcvcmVnaXN0ZXJcKFwn KC4qPylcJ1wpLycsICRwbHVnaW5fY29kZSwgJG1hdGNoZXMpOwoJCQlpZiAoaXNzZXQoJG1h dGNoZXNbMV0pICYmICRtYXRjaGVzWzFdKSB7CgkJCQkkcGx1Z2luX3RhZ3MgPSAkbWF0Y2hl c1sxXTsKCQkJCWlmICgkYWRpX2RldHJpdHVzX2RlYnVnKSBlY2hvICctLSBSRUdJU1RFUkVE IFRBR1M6ICc7CgkJCX0KCQkJZWxzZSB7CgkJCQkkc3VwcGxlbWVudGFyeVtdID0gZ1R4dCgn YWRpX3BsdWdpbl90YWdzX3VucmVnaXN0ZXJlZCcpOwoJCQkJJHBsdWdpbl90YWdzID0gYXJy YXkoJHBsdWdpblsnbmFtZSddKTsgLy8gZmFsbCBiYWNrIHRvIHBsdWdpbiBuYW1lIGlmIG5v bmUgcmVnaXN0ZXJlZAoJCQkJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIGVjaG8gJy0tIE5P IFJFR0lTVEVSRUQgVEFHUywgVVNJTkc6ICc7CgkJCX0KCQkJaWYgKCRhZGlfZGV0cml0dXNf ZGVidWcpIGVjaG8gaW1wbG9kZSgnLCAnLCRwbHVnaW5fdGFncykuYnI7CgkJCS8vIGxvb2sg Zm9yIHRhZ3MgaW4gZGF0YWJhc2UKCQkJZm9yZWFjaCAoJHRhYmxlX2xpc3QgYXMgJHRhYmxl KSB7CgkJCQkkd2hlcmVfcXMgPSBhcnJheSgpOwoJCQkJJHdoZXJlX3EgPSAiQ09OQ0FUX1dT KCcgJyI7CgkJCQkkd2hlcmVfcSAuPSAnLCAnLmltcGxvZGUoJywgJywgJHdoZXJlWyR0YWJs ZV0pOwoJCQkJJHdoZXJlX3EgLj0gIikgTElLRSAnJTx0eHA6e3RhZ30lJyI7CgkJCQlmb3Jl YWNoICgkcGx1Z2luX3RhZ3MgYXMgJHRhZykKCQkJCQkkd2hlcmVfcXNbXSA9IHN0cl9yZXBs YWNlKCd7dGFnfScsICR0YWcsICR3aGVyZV9xKTsKCQkJCSR3aGVyZV9xID0gaW1wbG9kZSgn IE9SICcsICR3aGVyZV9xcyk7CgkJCQkkcm93cyA9IHNhZmVfcm93cygnKicsICR0YWJsZSwg JHdoZXJlX3EpOwoJCQkJaWYgKCRyb3dzKSB7IC8vIHRhZyByZWZlcmVuY2VzIGZvdW5kCgkJ CQkJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpIGVjaG8gJy0tIFJFRkVSRU5DRVMgRk9VTkQn LmJyOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmICghJHJvd3MpIHsgLy8gbm8gdGFn IHJlZmVyZW5jZXMKCQkJCWlmICgkYWRpX2RldHJpdHVzX2RlYnVnKSBlY2hvICctLSBOTyBS RUZFUkVOQ0VTIEZPVU5EJy5icjsKCQkJCSRub3RfZm91bmRbXSA9IGFycmF5KCduYW1lJyA9 PiAkcGx1Z2luWyduYW1lJ10sICdjYWNoZWQnID0+ICRjYWNoZWQsICdzdXBwbGVtZW50YXJ5 Jz0+ICgkc3VwcGxlbWVudGFyeSA/IGltcGxvZGUoJywgJywgJHN1cHBsZW1lbnRhcnkpIDog JycpKTsKCQkJfQoJCX0KCX0KCgkvLyByZXR1cm4gbGlzdCBvZiBwbHVnaW5zIHdpdGggaXNz dWVzIGFycmF5KDAgPT4gYXJyYXkoJ25hbWUnPT4icGx1Z2luIG5hbWUiLCAnc3VwcGxlbWVu dGFyeSc9PiJhZGRpdGlvbmFsIHdhcm5pbmdzIikgLi4uKQoJcmV0dXJuICRub3RfZm91bmQ7 Cn0KCmZ1bmN0aW9uIGFkaV9kZXRyaXR1c19wcm9jZXNzX3BsdWdpbnNfbGVmdG92ZXJzKCR3 YXJuaW5nLCAmJHJlc3VsdHMsICYkZGVidWcsICRwbHVnaW5fZGlycywgJGluc3RhbGxlZF9w bHVnaW5zKSB7CglnbG9iYWwgJGFkaV9kZXRyaXR1c19pZ25vcmVfcGx1Z2luczsKCgkkZGlm ZiA9IGFycmF5X2RpZmYoJHBsdWdpbl9kaXJzLCAkaW5zdGFsbGVkX3BsdWdpbnMpOwoKCWZv cmVhY2ggKCRkaWZmIGFzICRwbHVnaW5fbmFtZSkKCQlpZiAoYXJyYXlfc2VhcmNoKCRwbHVn aW5fbmFtZSwgJGFkaV9kZXRyaXR1c19pZ25vcmVfcGx1Z2lucykgPT09IEZBTFNFKSB7IC8v IHBsdWdpbiBub3Qgb24gaWdub3JlIGxpc3QKCQkJJHJlc3VsdHNbXSA9ICRwbHVnaW5fbmFt ZS4nICgnLnNwYW4oZ1R4dCgkd2FybmluZyksICcgY2xhc3M9Indhcm5pbmciJykuJyknOwoJ CQkkZGVidWdbXSA9ICItLSBQTFVHSU49Ii4kcGx1Z2luX25hbWUuIiwgV0FSTklORz0kd2Fy bmluZyI7CgkJfQoJCWVsc2UKCQkJJGRlYnVnW10gPSAiLS0gUExVR0lOPSIuJHBsdWdpbl9u YW1lLiIsIFdBUk5JTkc9JHdhcm5pbmcgKElHTk9SRUQpIjsKfQoKZnVuY3Rpb24gYWRpX2Rl dHJpdHVzX3Byb2Nlc3NfcGx1Z2luc19taXNtYXRjaCgkd2FybmluZywgJiRyZXN1bHRzLCAm JGRlYnVnLCAkaW5zdGFsbGVkX2RhdGEsICRtYW5pZmVzdF9kYXRhKSB7Ci8vIGNoZWNrIGlu c3RhbGxlZCBpbmZvcm1hdGlvbiAtIG9yZGVyL3R5cGUvbWQ1IGFnYWluc3QgbWFuaWZlc3Qg aW5mb3JtYXRpb24gKG9yIGZpbGUgaW4gdGhlIGNhc2Ugb2YgbWQ1KQoJZ2xvYmFsICRhZGlf ZGV0cml0dXNfaWdub3JlX3BsdWdpbnM7CgoJZm9yZWFjaCAoJGluc3RhbGxlZF9kYXRhIGFz ICRwbHVnaW5fbmFtZSA9PiAkdmFsdWUpIHsKCQkkZGVidWdbXSA9ICItLSBQTFVHSU49Ii4k cGx1Z2luX25hbWU7CgkJaWYgKGlzc2V0KCRtYW5pZmVzdF9kYXRhWyRwbHVnaW5fbmFtZV0p KSB7CgkJCWlmICgkdmFsdWUgIT0gJG1hbmlmZXN0X2RhdGFbJHBsdWdpbl9uYW1lXSkgewoJ CQkJaWYgKGFycmF5X3NlYXJjaCgkcGx1Z2luX25hbWUsICRhZGlfZGV0cml0dXNfaWdub3Jl X3BsdWdpbnMpKSAvLyBwbHVnaW4gb24gaWdub3JlIGxpc3QKCQkJCQkkZGVidWdbXSA9ICIt LS0gV0FSTklORz0kd2FybmluZyAoSUdOT1JFRCkiOwoJCQkJZWxzZSB7CgkJCQkJJHJlc3Vs dHNbXSA9ICRwbHVnaW5fbmFtZS4nICgnLnNwYW4oZ1R4dCgkd2FybmluZyksICcgY2xhc3M9 Indhcm5pbmciJykuJyknOwoJCQkJCSRkZWJ1Z1tdID0gIi0tLSBXQVJOSU5HPSR3YXJuaW5n IjsKCQkJCX0KCQkJfQoJCX0KCX0KfQoKLy8gZnVuY3Rpb24gYWRpX2RldHJpdHVzX3Byb2Nl c3NfcGx1Z2luc19taXNzaW5nX2ZpbGUoJHdhcm5pbmcsICYkcmVzdWx0cywgJiRkZWJ1Zywg JHBsdWdpbl9uYW1lLCAkZmlsZSwgJGZpbGVzKSB7CmZ1bmN0aW9uIGFkaV9kZXRyaXR1c19w cm9jZXNzX3BsdWdpbnNfbWlzc2luZ19maWxlKCR3YXJuaW5nLCAmJG5vdGVzLCAmJGRlYnVn LCAkcGx1Z2luX25hbWUsICRmaWxlLCAkZmlsZXMpIHsKLy8gbG9vayBmb3Igc3BlY2lmaWVk IGZpbGUgaW4gZ2l2ZW4gbGlzdCBvZiBmaWxlcwoJZ2xvYmFsICRhZGlfZGV0cml0dXNfaWdu b3JlX3BsdWdpbnM7CgoJaWYgKGFycmF5X3NlYXJjaCgkcGx1Z2luX25hbWUsICRhZGlfZGV0 cml0dXNfaWdub3JlX3BsdWdpbnMpKSAvLyBwbHVnaW4gb24gaWdub3JlIGxpc3QKCQkkZGVi dWdbXSA9ICItLS0gV0FSTklORz0kd2FybmluZyAoSUdOT1JFRCkiOwoJZWxzZSB7CgkJaWYg KCFpbl9hcnJheSgkZmlsZSwgJGZpbGVzKSkgeyAvLyBmaWxlIG5vdCBmb3VuZCBpbiBwbHVn aW4ncyBzdWJkaXIKLy8gCQkJJHJlc3VsdHNbXSA9ICRwbHVnaW5fbmFtZS4nICgnLnNwYW4o Z1R4dCgkd2FybmluZywgYXJyYXkoJ3tsaXN0fScgPT4gJGZpbGUpKSwgJyBjbGFzcz0id2Fy bmluZyInKS4nKSc7CgkJCSRub3Rlc1tnVHh0KCR3YXJuaW5nLCBhcnJheSgne2xpc3R9JyA9 PiAkZmlsZSkpXVtdID0gJHBsdWdpbl9uYW1lOwoJCQkkZGVidWdbXSA9ICItLS0gV0FSTklO Rz0kd2FybmluZyI7CgkJfQoJfQp9CgpmdW5jdGlvbiBhZGlfZGV0cml0dXNfdW5pbnN0YWxs KCkgewovLyB1bmluc3RhbGwgYWRpX2RldHJpdHVzCglnbG9iYWwgJGFkaV9kZXRyaXR1c19k ZWJ1ZzsKCgkvLyBkZWxldGUgcHJlZmVyZW5jZXMKCSRyZXMgPSAkcmVzICYmIHNhZmVfZGVs ZXRlKCd0eHBfcHJlZnMnLCAibmFtZSBMSUtFICdhZGlfZGV0cml0dXNfJSciLCAkYWRpX2Rl dHJpdHVzX2RlYnVnKTsKCglyZXR1cm4gJHJlczsKfQoKZnVuY3Rpb24gYWRpX2RldHJpdHVz X2xpZmVjeWNsZSgkZXZlbnQsICRzdGVwKSB7Ci8vIGEgbWF0dGVyIG9mIGxpZmUgJiBkZWF0 aAoJZ2xvYmFsICRhZGlfZGV0cml0dXNfZGVidWc7CgoJJHJlc3VsdCA9ICR1cGdyYWRlX3Jl cXVpcmVkID0gJz8nOwoJaWYgKCRzdGVwID09ICdkZWxldGVkJykKCQkkcmVzdWx0ID0gYWRp X2RldHJpdHVzX3VuaW5zdGFsbCgpOwoJaWYgKCRhZGlfZGV0cml0dXNfZGVidWcpCgkJZWNo byAiZXZlbnQ9JGV2ZW50LCBzdGVwPSRzdGVwLCByZXN1bHQ9JHJlc3VsdCwgdXBncmFkZV9y ZXF1aXJlZD0kdXBncmFkZV9yZXF1aXJlZCI7Cn0KCmZ1bmN0aW9uIGFkaV9kZXRyaXR1c19w cmVmKCRuYW1lLCAkdmFsdWU9TlVMTCwgJHByaXZhdGU9RkFMU0UpIHsKLy8gcmVhZCBvciBz ZXQgcHJlZgoJZ2xvYmFsICRwcmVmcywgJGFkaV9kZXRyaXR1c19wcmVmczsKCglpZiAoJHZh bHVlID09PSBOVUxMKQoJCXJldHVybiBnZXRfcHJlZigkbmFtZSwgJGFkaV9kZXRyaXR1c19w cmVmc1skbmFtZV1bJ3ZhbHVlJ10pOwoJZWxzZSB7CgkJaWYgKGFycmF5X2tleV9leGlzdHMo JG5hbWUsICRhZGlfZGV0cml0dXNfcHJlZnMpKQoJCQkkaHRtbCA9ICRhZGlfZGV0cml0dXNf cHJlZnNbJG5hbWVdWydpbnB1dCddOwoJCWVsc2UKCQkJJGh0bWwgPSAndGV4dF9pbnB1dCc7 CgkJJHJlcyA9IHNldF9wcmVmKCRuYW1lLCAkdmFsdWUsICdhZGlfZGV0cml0dXNfYWRtaW4n LCAyLCAkaHRtbCwgMCwgJHByaXZhdGUpOwoJCSRwcmVmc1skbmFtZV0gPSBnZXRfcHJlZigk bmFtZSwgJGFkaV9kZXRyaXR1c19wcmVmc1skbmFtZV1bJ3ZhbHVlJ10sIFRSVUUpOwoJCXJl dHVybiAkcmVzOwoJfQp9CgpmdW5jdGlvbiBhZGlfZGV0cml0dXNfcHJlZl9pbnB1dHMoJGV2 ZW50LCAkdGFiPU5VTEwsICRub19zdHlsZT1GQUxTRSkgewovLyBvdXRwdXQgcHJlZmVyZW5j ZSBpbnB1dCBmaWVsZHMgYWNjb3JkaW5nIHRvIG9wdGlvbnMvYWRtaW4gc2V0dGluZwoJZ2xv YmFsICR0eHBfZ3JvdXBzLCAkYWRpX2RldHJpdHVzX3ByZWZzLCAkYWRpX2RldHJpdHVzX291 dGxhd3MsICRhZGlfZGV0cml0dXNfb3V0bGF3czsKCglpZiAoJHRhYiA9PT0gTlVMTCkgcmV0 dXJuOwoKCSRvdXQgPSAnJzsKCSR0aGlzX2hlYWRpbmcgPSAnJzsKCglmb3JlYWNoICgkYWRp X2RldHJpdHVzX3ByZWZzIGFzICRwcmVmX25hbWUgPT4gJHByZWZfaW5mbykgewoJCWlmICgk cHJlZl9pbmZvWyd0YWInXSA9PSAkdGFiKSB7CgkJCWlmIChpc3NldCgkcHJlZl9pbmZvWydo ZWFkaW5nJ10pKQoJCQkJaWYgKCRwcmVmX2luZm9bJ2hlYWRpbmcnXSAhPSAkdGhpc19oZWFk aW5nKSB7CgkJCQkJJHRoaXNfaGVhZGluZyA9ICRwcmVmX2luZm9bJ2hlYWRpbmcnXTsKCQkJ CQkkb3V0IC49IGhlZChnVHh0KCR0aGlzX2hlYWRpbmcpLDIpOwoJCQkJfQoJCQlzd2l0Y2gg KCRwcmVmX2luZm9bJ2lucHV0J10pIHsKCQkJCWNhc2UgJ3llc25vcmFkaW8nOgoJCQkJCSRv dXQgLj0gZ3JhZigKCQkJCQkJdGFnKGdUeHQoJHByZWZfaW5mb1snbGFiZWwnXSksICdsYWJl bCcpCgkJCQkJCS5zcC5zcAoJCQkJCQkudGFnKHJhZGlvKCRwcmVmX25hbWUsICcwJywgKGFk aV9kZXRyaXR1c19wcmVmKCRwcmVmX25hbWUpID09ICcwJykpLnNwLmdUeHQoJ25vJyksICds YWJlbCcpCgkJCQkJCS5zcC5zcAoJCQkJCQkudGFnKHJhZGlvKCRwcmVmX25hbWUsICcxJywg KGFkaV9kZXRyaXR1c19wcmVmKCRwcmVmX25hbWUpID09ICcxJykpLnNwLmdUeHQoJ3llcycp LCAnbGFiZWwnKQoJCQkJCQksICcgY2xhc3M9IicuJHByZWZfbmFtZS4nIicKCQkJCQkpOwoJ CQkJCWJyZWFrOwoJCQkJY2FzZSAnY3VzdG9tJzoKCQkJCQkvLyBhZG1pbiBwcml2cwoJCQkJ CWlmICgkcHJlZl9uYW1lID09ICdhZGlfZGV0cml0dXNfYWRtaW5fcHJpdnMnKSB7CgkJCQkJ CSRwcml2X291dCA9IGdUeHQoJHByZWZfaW5mb1snbGFiZWwnXSk7CgkJCQkJCSRhZG1pbl9w cml2cyA9IGRvX2xpc3QoYWRpX2RldHJpdHVzX3ByZWYoJ2FkaV9kZXRyaXR1c19wcml2cycp KTsKCQkJCQkJZm9yZWFjaCAoJHR4cF9ncm91cHMgYXMgJGluZGV4ID0+ICRncm91cCkKCQkJ CQkJCWlmIChhcnJheV9zZWFyY2goJGluZGV4LCAkYWRpX2RldHJpdHVzX291dGxhd3MpID09 PSBGQUxTRSkgLy8gaWdub3JlIHRoZSBvdXRsYXdzCgkJCQkJCQkJJHByaXZfb3V0IC49IHRh ZyhzcC5zcC5jaGVja2JveDIoImFkaV9kZXRyaXR1c19wcml2c1skaW5kZXhdIiwgKGFycmF5 X3NlYXJjaCgkaW5kZXgsICRhZG1pbl9wcml2cykgIT09IEZBTFNFKSwgJycsICdhZGlfZGV0 cml0dXNfcHJpdnMnKS5zcC5nVHh0KCRncm91cCksICdsYWJlbCcpOwoJCQkJCQkkb3V0IC49 IGdyYWYoJHByaXZfb3V0LCAnIGNsYXNzPSInLiRwcmVmX25hbWUuJyInKTsKCQkJCQl9CgkJ CQkJLy8gcGx1Z2luIHByaXZzCgkJCQkJaWYgKCRwcmVmX25hbWUgPT0gJ2FkaV9kZXRyaXR1 c19wcml2cycpIHsKCQkJCQkJJHByaXZfb3V0ID0gZ1R4dCgkcHJlZl9pbmZvWydsYWJlbCdd KTsKCQkJCQkJJHBsdWdpbl9wcml2cyA9IGRvX2xpc3QoYWRpX2RldHJpdHVzX3ByZWYoJ2Fk aV9kZXRyaXR1c19wcml2cycpKTsKCQkJCQkJZm9yZWFjaCAoJHR4cF9ncm91cHMgYXMgJGlu ZGV4ID0+ICRncm91cCkKCQkJCQkJCWlmIChhcnJheV9zZWFyY2goJGluZGV4LCAkYWRpX2Rl dHJpdHVzX291dGxhd3MpID09PSBGQUxTRSkgLy8gaWdub3JlIHRoZSBvdXRsYXdzCgkJCQkJ CQkJJHByaXZfb3V0IC49IHRhZyhzcC5zcC5jaGVja2JveDIoImFkaV9kZXRyaXR1c19wcml2 c1skaW5kZXhdIiwgKGFycmF5X3NlYXJjaCgkaW5kZXgsICRwbHVnaW5fcHJpdnMpICE9PSBG QUxTRSksICcnLCAnYWRpX2RldHJpdHVzX3ByaXZzJykuc3AuZ1R4dCgkZ3JvdXApLCAnbGFi ZWwnKTsKCQkJCQkJJG91dCAuPSBncmFmKCRwcml2X291dCwgJyBjbGFzcz0iJy4kcHJlZl9u YW1lLiciJyk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJY2FzZSAndGV4dF9hcmVhJzoKICAg ICAgIAkJCQkkb3V0IC49IHRhZyhnVHh0KCRwcmVmX2luZm9bJ2xhYmVsJ10pLCAnbGFiZWwn LCAnIGZvcj0iJy4kcHJlZl9uYW1lLiciJyk7CgkJCQkJJG91dCAuPSB0ZXh0X2FyZWEoJHBy ZWZfbmFtZSwgMCwgMCwgc3RyaXBzbGFzaGVzKGFkaV9kZXRyaXR1c19wcmVmKCRwcmVmX25h bWUpKSk7CgkJCQkJYnJlYWs7CgkJCQlkZWZhdWx0OiAvLyB0ZXh0X2lucHV0IG9yIGNvbW1h X2xpc3QKCQkJCQkkc2l6ZSA9IChpc3NldCgkcHJlZl9pbmZvWydzaXplJ10pID8gJHByZWZf aW5mb1snc2l6ZSddIDogJycpOwoJCQkJCSRvdXQgLj0gZ3JhZigKCQkJCQkJdGFnKGdUeHQo JHByZWZfaW5mb1snbGFiZWwnXSksICdsYWJlbCcsICcgZm9yPSInLiRwcmVmX25hbWUuJyIn KQoJCQkJCQkuc3Auc3AKCQkJCQkJLmZpbnB1dCgndGV4dCcsICRwcmVmX25hbWUsIHN0cmlw c2xhc2hlcyhhZGlfZGV0cml0dXNfcHJlZigkcHJlZl9uYW1lKSksICRwcmVmX25hbWUsICcn LCAnJywgJHNpemUpCgkJCQkJCSwgJyBjbGFzcz0iJy4kcHJlZl9uYW1lLiciJwoJCQkJCSk7 CgkJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgoJaWYgKCRvdXQpCgkJcmV0dXJuIGZvcm0oCgkJ CXRhZygKCQkJCXRhZyhnVHh0KCd0YWJfcHJlZmVyZW5jZXMnKSwgJ2gyJykKCQkJCS4kb3V0 CgkJCQkuZklucHV0KCdzdWJtaXQnLCAnZG9fc29tZXRoaW5nJywgZ1R4dCgnYWRpX3VwZGF0 ZV9wcmVmcycpLCAnc21hbGxlcmJveCcpCgkJCQkuZUlucHV0KCRldmVudCkKCQkJCS5zSW5w dXQoJ3VwZGF0ZV9wcmVmcycpCgkJCQksICdkaXYnCgkJCQksICgkbm9fc3R5bGUgPyAnJyA6 ICcgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIiBjbGFzcz0iYWRpX2RldHJpdHVzX3ByZWZz IicpCgkJCSkKCQkpOwp9CgpmdW5jdGlvbiBhZGlfZGV0cml0dXNfdXBkYXRlX3ByZWZzKCR0 YWI9TlVMTCkgewovLyB1cGRhdGUgcHJlZnMKCWdsb2JhbCAkdHhwX3VzZXIsICRhZGlfZGV0 cml0dXNfcHJlZnM7CgoJaWYgKCR0YWIgPT09IE5VTEwpCgkJcmV0dXJuIEZBTFNFOwoJZWxz ZSB7CgkJJHJlc3VsdCA9IFRSVUU7CgkJLy8gcHJvY2VzcyBwcmVmcwoJCWZvcmVhY2ggKCRh ZGlfZGV0cml0dXNfcHJlZnMgYXMgJHByZWZfbmFtZSA9PiAkcHJlZl9pbmZvKSB7CgkJCWlm ICgkcHJlZl9pbmZvWyd0YWInXSA9PSAkdGFiKSB7IC8vIHRhYiBtYXRjaD8KCQkJCS8vIGdl dC9tYXNzYWdlIHByZWYgdmFsdWUKCQkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRwcmVmX25h bWUsICRfUE9TVCkpIC8vIHByZWYgcHJlc2VudCBpbiBQT1NUCgkJCQkJJHZhbHVlID0gJF9Q T1NUWyRwcmVmX25hbWVdOwoJCQkJZWxzZSBpZiAoJHByZWZfaW5mb1snaW5wdXQnXSA9PSAn eWVzbm9yYWRpbycpIC8vIHByZWYgbWlzc2luZyBmcm9tIFBPU1QsIG1ha2UgaXQgemVybwoJ CQkJCSR2YWx1ZSA9ICcwJzsKCQkJCWVsc2UKCQkJCQkkdmFsdWUgPSAkcHJlZl9pbmZvWyd2 YWx1ZSddOyAvLyBwcmVmIG1pc3NpbmcgZnJvbSBQT1NULCByZXNldCB2YWx1ZQoJCQkJaWYg KGlzX2FycmF5KCR2YWx1ZSkpIHsgLy8gc3RyaW5nLWlmeSBhcnJheXMKCQkJCQkkdmFsdWVz ID0gYXJyYXlfa2V5cygkdmFsdWUpOyAvLyBuZWVkIGluZGV4IHZhbHVlcyBub3QgMXMKCQkJ CQlpZiAoJHByZWZfbmFtZSA9PSAnYWRpX2RldHJpdHVzX3ByaXZzJykgewoJCQkJCQkkdXNl cl9wcml2ID0gc2FmZV9maWVsZCgncHJpdnMnLCAndHhwX3VzZXJzJywgIm5hbWU9JyIuZG9T bGFzaCgkdHhwX3VzZXIpLiInIik7CgkJCQkJCSR2YWx1ZXMgPSBhcnJheV91bmlxdWUoYXJy YXlfbWVyZ2UoJHZhbHVlcywgYXJyYXkoMSwgJHVzZXJfcHJpdikpKTsgLy8gY2FuJ3Qga2ls bCBvZmYgUHVibGlzaGVyIG9yIHNlbGYKCQkJCQl9CgkJCQkJJHZhbHVlID0gaW1wbG9kZSgn LCcsICR2YWx1ZXMpOwoJCQkJfQoJCQkJJHZhbHVlID0gdHJpbSgkdmFsdWUpOwoJCQkJLy8g c29tZSB2YWx1ZXMgbm90IGFsbG93ZWQgdG8gYmUgYmxhbmssIHJlc2V0IHRvIGRlZmF1bHQK CQkJCWlmICgoISRwcmVmX2luZm9bJ2JsYW5rJ10pICYmICgkdmFsdWUgPT0gJycpKQoJCQkJ CQkkdmFsdWUgPSAkYWRpX2RldHJpdHVzX3ByZWZzWyRwcmVmX25hbWVdWyd2YWx1ZSddOwoJ CQkJLy8gdGlkeSB1cCBjb21tYSBsaXN0CgkJCQlpZiAoJHByZWZfaW5mb1snaW5wdXQnXSA9 PSAnY29tbWFfbGlzdCcpCgkJCQkJJHZhbHVlID0gaW1wbG9kZSgnLCAnLGRvX2xpc3QoJHZh bHVlKSk7CgkJCQkvLyB0aWR5IHVwIHRleHRfYXJlYQoJCQkJaWYgKCRwcmVmX2luZm9bJ2lu cHV0J10gPT0gJ3RleHRfYXJlYScpCgkJCQkJJHZhbHVlID0gaW1wbG9kZSgiXG4iLCBhcnJh eV9tYXAoJ3RyaW0nLCBleHBsb2RlKCJcbiIsIHN0cl9yZXBsYWNlKCJcciIsICcnLCAkdmFs dWUpKSkpOwoJCQkJLy8gdXBkYXRlIHByZWYKCQkJCSRwcml2YXRlID0gKCRwcmVmX2luZm9b J3RhYiddID09ICdvcHRpb25zJyA/IEZBTFNFIDogJHByZWZfaW5mb1sncHJpdmF0ZSddKTsg Ly8gIm9wdGlvbnMiIHByZWZzIGNhbid0IGJlIHByaXZhdGUKCQkJCSRyZXN1bHQgPSAkcmVz dWx0ICYmIGFkaV9kZXRyaXR1c19wcmVmKCRwcmVmX25hbWUsICR2YWx1ZSwgJHByaXZhdGUp OwoJCQl9CgkJfQoJCXJldHVybiAkcmVzdWx0OwoJfQp9CgpmdW5jdGlvbiBhZGlfZGV0cml0 dXNfb3B0aW9ucygkZXZlbnQsICRzdGVwKSB7Ci8vIGFkaV9kZXRyaXR1cyBvcHRpb25zIHBh Z2UKCWdsb2JhbCAkdHhwX3VzZXIsICR0eHBfZ3JvdXBzLCAkYWRpX2RldHJpdHVzX2RlYnVn LCAkYWRpX2RldHJpdHVzX3VybCwgJGFkaV9kZXRyaXR1c19wbHVnaW5fc3RhdHVzLCAkYWRp X2RldHJpdHVzX3ByZWZzLCAkYWRpX2RldHJpdHVzX291dGxhd3MsICRhZGlfZGV0cml0dXNf b3V0bGF3cywgJGxhbmdfdWk7CgoJJG1lc3NhZ2UgPSAnJzsKCgkvLyBkYW5jZSBzdGVwcwoJ aWYgKCRzdGVwID09ICd0ZXh0cGFjaycpIHsKCQkkYWRpX3RleHRwYWNrID0gZmlsZV9nZXRf Y29udGVudHMoJGFkaV9kZXRyaXR1c191cmxbJ3RleHRwYWNrJ10pOwoJCWlmICgkYWRpX3Rl eHRwYWNrKSB7CgkJCSRyZXN1bHQgPSBpbnN0YWxsX3RleHRwYWNrKCRhZGlfdGV4dHBhY2sp OwoJCQkkbWVzc2FnZSA9IGdUeHQoJ3RleHRwYWNrX3N0cmluZ3NfaW5zdGFsbGVkJywgYXJy YXkoJ3tjb3VudH0nID0+ICRyZXN1bHQpKTsKCQkJJG5ld19sYW5nID0gbG9hZF9sYW5nKCRs YW5nX3VpLCAnYWRtaW4nKTsKCQkJVHhwOjpnZXQoJ1xUZXh0cGF0dGVyblxMMTBuXExhbmcn KS0+c2V0UGFjaygkbmV3X2xhbmcsIFRSVUUpOwoJCX0KCQllbHNlCgkJCSRtZXNzYWdlID0g YXJyYXkoZ1R4dCgnYWRpX3RleHRwYWNrX2ZhaWwnKSwgRV9FUlJPUik7Cgl9CgllbHNlIGlm ICgkc3RlcCA9PSAndXBncmFkZScpIHsKCQkkcmVzdWx0ID0gYWRpX2RldHJpdHVzX3VwZ3Jh ZGUoVFJVRSk7CgkJJHJlc3VsdCA/ICRtZXNzYWdlID0gZ1R4dCgnYWRpX3VwZ3JhZGVkJykg OiAkbWVzc2FnZSA9IGFycmF5KGdUeHQoJ2FkaV91cGdyYWRlX2ZhaWwnKSwgRV9FUlJPUik7 Cgl9CgllbHNlIGlmICgkc3RlcCA9PSAnaW5zdGFsbCcpIHsKCQkkcmVzdWx0ID0gYWRpX2Rl dHJpdHVzX2luc3RhbGwoKTsKCQkkcmVzdWx0ID8gJG1lc3NhZ2UgPSBnVHh0KCdhZGlfaW5z dGFsbGVkJykgOiAkbWVzc2FnZSA9IGFycmF5KGdUeHQoJ2FkaV9pbnN0YWxsX2ZhaWwnKSwg RV9FUlJPUik7Cgl9CgllbHNlIGlmICgkc3RlcCA9PSAndW5pbnN0YWxsJykgewoJCSRyZXN1 bHQgPSBhZGlfZGV0cml0dXNfdW5pbnN0YWxsKCk7CgkJJHJlc3VsdCA/ICRtZXNzYWdlID0g Z1R4dCgnYWRpX3VuaW5zdGFsbGVkJykgOiAkbWVzc2FnZSA9IGFycmF5KGdUeHQoJ2FkaV91 bmluc3RhbGxfZmFpbCcpLCBFX0VSUk9SKTsKCX0KCWVsc2UgaWYgKCRzdGVwID09ICd1cGRh dGVfcHJlZnMnKSB7CgkJJHJlc3VsdCA9IGFkaV9kZXRyaXR1c191cGRhdGVfcHJlZnMoJ29w dGlvbnMnKTsKCQkkcmVzdWx0ID8gJG1lc3NhZ2UgPSBnVHh0KCdwcmVmZXJlbmNlc19zYXZl ZCcpIDogJG1lc3NhZ2UgPSBhcnJheShnVHh0KCdhZGlfcHJlZl91cGRhdGVfZmFpbCcpLCBF X0VSUk9SKTsKCX0KCgkvLyBnZW5lcmF0ZSBwYWdlCglwYWdldG9wKCdhZGlfZGV0cml0dXMg LSAnLmdUeHQoJ29wdGlvbnMnKSwgJG1lc3NhZ2UpOwoKCS8vIG9wdGlvbnMKCWVjaG8gdGFn KAoJCXRhZygnYWRpX2RldHJpdHVzICcuZ1R4dCgnb3B0aW9ucycpLCAnaDInKQoJCS8vIGxp bmsgdG8gcGx1Z2luIGFkbWluIHRhYgoJCS5ncmFmKGhyZWYoZ1R4dCgnYWRpX2RldHJpdHVz X2FkbWluJyksICc/ZXZlbnQ9YWRpX2RldHJpdHVzX2FkbWluJykpCgkJLy8gcHJlZnMKCQku YWRpX2RldHJpdHVzX3ByZWZfaW5wdXRzKCRldmVudCwgJ29wdGlvbnMnKQoJCS8vIHRleHRw YWNrIGxpbmtzCgkJLmdyYWYoaHJlZihnVHh0KCdpbnN0YWxsX3RleHRwYWNrJyksICc/ZXZl bnQ9Jy4kZXZlbnQuYS4nc3RlcD10ZXh0cGFjaycpLCAnIHN0eWxlPSJtYXJnaW4tdG9wOjNl bSInKQoJCS5ncmFmKGhyZWYoZ1R4dCgnYWRpX3RleHRwYWNrX29ubGluZScpLCAkYWRpX2Rl dHJpdHVzX3VybFsndGV4dHBhY2tfZG93bmxvYWQnXSkpCgkJLmdyYWYoaHJlZihnVHh0KCdh ZGlfdGV4dHBhY2tfZmVlZGJhY2snKSwgJGFkaV9kZXRyaXR1c191cmxbJ3RleHRwYWNrX2Zl ZWRiYWNrJ10pKQoJCSwgJ2RpdicKCQksICcgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyOyBt YXJnaW4tYm90dG9tOjNlbSInCgkpOwoKCWlmICgkYWRpX2RldHJpdHVzX2RlYnVnKSB7CgkJ ZWNobyAiZXZlbnQ9JGV2ZW50LCBzdGVwPSRzdGVwIi5icjsKCQllY2hvICckX1BPU1Q6JzsK CQlkbXAoJF9QT1NUKTsKCQllY2hvICdQUkVGUzonLmJyOwoJCWZvcmVhY2ggKCRhZGlfZGV0 cml0dXNfcHJlZnMgYXMgJG5hbWUgPT4gJHRoaXNfcHJlZikKCQkJZWNobyAkbmFtZS4nPScu YWRpX2RldHJpdHVzX3ByZWYoJG5hbWUpLmJyOwoJCWVjaG8gYnI7Cgl9Cn0KIjtzOjg6Imhl bHBfcmF3IjtzOjEwMjE1OiJoMS4gKmFkaV9kZXRyaXR1cyogLSBTd2VlcCB1cCB0aGUgcnVi YmlzaAoKQWZ0ZXIgeWVhcnMgb2YgZGV2ZWxvcG1lbnQsIG11bHRpcGxlIGVuaGFuY2VtZW50 cywgYSBzdWNjZXNzaW9uIG9mIFRleHRwYXR0ZXJuIHVwZ3JhZGVzLCBlbmRsZXNzIGZpZGRs aW5nIC4uLiB3ZWJzaXRlIGluc3RhbGxhdGlvbnMgY2FuIGdldCBhIGJpdCB1bnRpZHkuICBU aGlzIGlzIHdoZXJlICphZGlfZGV0cml0dXMqIGNvbWVzIGluLiBJdCdsbCBzY291ciB5b3Vy IHdlYnNpdGUncyBmaWxlc3lzdGVtIGFuZCBwbHVnaW5zIGZvciBpdGVtcyB0aGF0IGFyZSBy ZWR1bmRhbnQsIHN1cGVyZmx1b3VzIG9yIGV2ZW4gYWJzZW50LgoKSG93ZXZlciwgX25vIGNo YW5nZXMgYXJlIG1hZGVfLiAgSXQncyB1cCB0byB0aGUgd2Vic2l0ZSBhZG1pbmlzdHJhdG9y IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIGluZm9ybWF0aW9uIHByZXNlbnRlZC4K CmgyLiAqVXNhZ2UqCgpBZnRlciBpbnN0YWxsaW5nICYgYWN0aXZhdGluZyB0aGUgcGx1Z2lu IHlvdSdsbCBzZWUgYSBuZXcgaXRlbSB1bmRlciBfX0FkbWluX18uCgpUaGUgRGV0cml0dXMg dGFiIGxpc3RzIGEgbnVtYmVyIG9mIHdhcm5pbmdzIHJlbGF0ZWQgdG8gdGhlIHdlYnNpdGUn cyBmaWxlc3lzdGVtLCBwbHVnaW5zIGFuZCBwcmVmZXJlbmNlcy4KCmgyLiAqV2FybmluZ3Mq CgpJbiBzb21lIGNhc2VzIHRoZXkgbWF5IGJlIHNpZ25pZmljYW50LCBmb3IgZXhhbXBsZSBh IG1pc3NpbmcgX18uaHRhY2Nlc3NfXyBmaWxlLgoKSW4gb3RoZXIgY2FzZXMsIHlvdSBtYXkg dmlldyB0aGVtIGFzIGluY29uc2VxdWVudGlhbCBidXQgdW50aWR5LCBlLmcuIGFuIG9sZCBS RUFETUUgb3IgbGljZW5jZSBmaWxlIGxlZnQgYmVoaW5kIGZyb20gYSBwcmV2aW91cyBUWFAg dmVyc2lvbi4KCllvdSBtYXkgZXZlbiBjb25zaWRlciB0aGVtIGlycmVsZXZhbnQsIGUuZy4g YW4gZW1wdHkgZGlyZWN0b3J5LgoKVGhlcmUgd2lsbCB1bmRvdWJ0ZWRseSBiZSBzb21lIGZh bHNlIHBvc2l0aXZlcywgc28gYmUgcHJlcGFyZWQgdG8gdXNlIGEgcGluY2ggb2Ygc2FsdC4g WW91J3JlIHRoZSBib3NzIQoKaDIuICpGaW5lIHR1bmUgdGhlIHJlc3VsdHMqCgpZb3UgY2Fu IGVkdWNhdGUgKmFkaV9kZXRyaXR1cyogYnkgc2V0dGluZyBzb21lIHByZWZlcmVuY2VzLgoK KiAqSWdub3JlIG5vbi1saW5rZWQgZmlsZXMqIC0gdGhlIEZpbGVzIGRpcmVjdG9yeSBpcyBv ZnRlbiB1c2VkIGZvciBpdGVtcyBvdGhlciB0aGFuIHRob3NlIGxpbmtlZCB0byB0aGUgZGF0 YWJhc2UsIHNwZWNpZnkgYSBsaXN0IG9mIGZpbGVzIHRvIGlnbm9yZSAoZGVmYXVsdCA9ICou c3FsICouc3FsLmd6KQoqICpJZ25vcmUgbm9uLWxpbmtlZCBpbWFnZXMqIC0geW91ciBJbWFn ZXMgZGlyZWN0b3J5IG1heSBjb250YWluIGltYWdlcyBvdGhlciB0aGFuIHRob3NlIGxpbmtl ZCB0byB0aGUgZGF0YWJhc2UsIHNwZWNpZnkgYSBsaXN0IG9mIGZpbGVzIHRvIGlnbm9yZSAo ZGVmYXVsdCA9ICouc3ZnKQoqICpJZ25vcmUgZmlsZXN5c3RlbSBpdGVtcyogLSBsaXN0IG9m IHNwZWNpZmljIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRvIGlnbm9yZSAoZGVmYXVsdCA9ICov Lmh0YWNjZXNzLWRpc3QpCiogKlN0eWxlIGRpcmVjdG9yaWVzKiAtIGxpc3QgeW91ciBzdHls ZSBkaXJlY3RvcmllcyBzbyB0aGF0ICphZGlfZGV0cml0dXMqIGtub3dzIHRoZXkgc2hvdWxk IGV4aXN0IGFuZCBjYW4gY2hlY2sgdGhlbSBmb3IgYW5vbWFsaWVzIChkZWZhdWx0ID0gbm8g c3R5bGUgZGlyZWN0b3JpZXMpCiogKkFkZGl0aW9uYWwgZGlyZWN0b3JpZXMqIC0gbGlzdCBh bnkgb3RoZXIgZGlyZWN0b3JpZXMgdGhhdCBhcmUgZ2VudWluZSBhbmQgd2hvc2UgY29udGVu dHMgc2hvdWxkIGJlIGNoZWNrZWQgYnkgdGhlIHBsdWdpbiAoZGVmYXVsdCA9IG5vIGFkZGl0 aW9uYWwgZGlyZWN0b3JpZXMpCiogKk5vbi1saW5rZWQgZmlsZSBjb3VudCB0aHJlc2hvbGQq IC0gc3BlY2lmeSB3aGF0J3MgY29uc2lkZXJlZCBhbiAiZXhjZXNzaXZlIG51bWJlciIgb2Yg bm9uLWxpbmtlZCBmaWxlcyAoZGVmYXVsdCA9IDUpCiogKkZpbGUgc2l6ZSB0aHJlc2hvbGQq IC0gZGVmaW5lIHdoYXQgeW91IGNvbnNpZGVyIHRvIGJlIGEgbGFyZ2UgZmlsZSAtIEZpbGVz IGRpcmVjdG9yeSBvbmx5LCAoZGVmYXVsdCA9IDFNQikKKiAqSW1hZ2Ugc2l6ZSB0aHJlc2hv bGQqIC0gZGVmaW5lIHdoYXQgeW91IGNvbnNpZGVyIHRvIGJlIGEgbGFyZ2UgaW1hZ2UgLSBJ bWFnZXMgZGlyZWN0b3J5IG9ubHksIChkZWZhdWx0ID0gNTAwS0IpCiogKklnbm9yZSBwbHVn aW5zKiAtIGxpc3QgcGx1Z2lucyB0aGF0IG1heSBnZW5lcmF0ZSB3YXJuaW5ncyBidXQgYXJl IGFjdHVhbGx5IGdlbnVpbmUgKGRlZmF1bHQgPSBwYXBfY29tY29ubmVjdCkKCk5vdGVzOgoK KiBMaXN0IHlvdXIgZmlsZXMgb3IgZGlyZWN0b3JpZXMgb24gc2VwYXJhdGUgbGluZXMKKiBG aWxlIHNpemVzIGNhbiBiZSBlbnRlcmVkIDFNQiBvciAxMDQ4NTc2CiogV2lsZGNhcmRzIG1h eSBiZSB1c2VkCiogQWxsIGZpbGUvZGlyZWN0b3JpZXMvd2lsZGNhcmRzIHNwZWNpZmllZCBp biBwcmVmZXJlbmNlcyBhcmUgY2FzZSBzZW5zaXRpdmUKKiBQYXRocyBmb3IgIklnbm9yZSBm aWxlc3lzdGVtIGl0ZW1zIiwgIlN0eWxlIGRpcmVjdG9yaWVzIiBhbmQgIkFkZGl0aW9uYWwg ZGlyZWN0b3JpZXMiIGFyZSByZWxhdGl2ZSB0byB3ZWJzaXRlIHJvb3QKKiBQYXRocyBmb3Ig dW5saW5rZWQgZmlsZXMgb3IgaW1hZ2VzIGFyZSByZWxhdGl2ZSB0byB0aGVpciByZXNwZWN0 aXZlIGRpcmVjdG9yaWVzCgpoMi4gKldoZXJlIGFkaV9kZXRyaXR1cyBkb2VzIGl0cyBydW1t YWdpbmcqCgoqIFdlYnNpdGUgcm9vdCBkaXJlY3RvcnkKKiBTdGFuZGFyZCBUWFAgZGlyZWN0 b3JpZXM6IF9fdGV4dHBhdHRlcm4vX18sIHlvdXIgZmlsZXMgZGlyZWN0b3J5LCB5b3VyIGlt YWdlcyBkaXJlY3RvcnksIF9fdGhlbWVzL19fCiogU3R5bGUgZGlyZWN0b3JpZXMgc3BlY2lm aWVkIGluICphZGlfZGV0cml0dXMqIHByZWZlcmVuY2VzCiogRXh0cmEgZGlyZWN0b3JpZXMg c3BlY2lmaWVkIGluICphZGlfZGV0cml0dXMqIHByZWZlcmVuY2VzCiogSW5zdGFsbGVkIGFu ZCBjYWNoZWQgcGx1Z2lucywgYXMgd2VsbCB0aGUgcGx1Z2lucyBkaXJlY3RvcnkKKiBQcmVm ZXJlbmNlcwoKTm90ZSB0aGF0IHN1YmRpcmVjdG9yaWVzIGFyZSBub3QgdHJhdmVyc2VkIGFu eSBkZWVwZXIgdGhhbiB0aGUgaW1tZWRpYXRlIGxldmVsLgoKaDIuICpJdCdzIGdvb2QgdG8g bW9hbioKCkV4YW1wbGVzIG9mIHBlZGFudHJ5IGFyZToKCiogRW1wdHkgZGlyZWN0b3JpZXMg b3IgZmlsZXMuCiogSGlkZGVuIGl0ZW1zIHRoYXQgYXJlIG5vdCByZWNvZ25pc2VkLgoqIEhp ZGRlbiBpdGVtcyB0aGF0IGFyZSByZWNvZ25pc2VkIGJ1dCBhcmUgcG9zc2libHkgcXVlc3Rp b25hYmxlIChlLmcuIF9fLkRTX1N0b3JlX18sIF9fLnN2bl9fKS4KKiBNaXNzaW5nIGl0ZW1z IHRoYXQgcHJvYmFibHkgc2hvdWxkIGV4aXN0IChlLmcuIF9fLmh0YWNjZXNzX18pLgoqIFVu cmVjb2duaXNlZCBIVE1MLCBKU09OLCBQSFAsIFRleHRpbGUsIHRleHQgYW5kIGxvZyBmaWxl cyAoZXhjZXB0aW9ucyBhcmUgc3RhbmRhcmQgZmlsZXMgbGlrZSBfX2luZGV4LnBocF9fLCBf X1JFQURNRS50eHRfXyBldGMpLgoqIF9fZXJyb3JfbG9nX18gLSBQSFAgc2VydmVyIGVycm9y IGxvZ2ZpbGUuCiogX19ycGNfXyBkaXJlY3RvcnkgKGlmIG5vdCByZXF1aXJlZCBieSB5b3Vy IGNvbmZpZ3VyYXRpb24pLgoqIE9sZCBUZXh0cGF0dGVybiBsaWNlbmNlIGZpbGVzIChlLmcu IF9fTElDRU5TRS1CU0QtMy50eHRfXykuCiogT2xkIFRleHRwYXR0ZXJuIF9qc18gc2NyaXB0 cyBkaXJlY3RvcnkgJiBmaWxlLgoqIExhcmdlIGZpbGVzIC0gb3ZlciB0aGUgZmlsZSBzaXpl IHRocmVzaG9sZCBzcGVjaWZpZWQgaW4gcHJlZmVyZW5jZXMuCiogTGFyZ2UgaW1hZ2UgZmls ZXMgLSBvdmVyIHRoZSBpbWFnZSBzaXplIHRocmVzaG9sZCBzcGVjaWZpZWQgaW4gcHJlZmVy ZW5jZXMuCiogSW1hZ2UgdGh1bWJuYWlsIGZpbGUgcGVybWlzc2lvbnMgLSBsYWNrIG9mIHdy aXRhYmxpdHkgY2FuIGNhdXNlIGlzc3VlcyBpbiBUWFAgSW1hZ2UgdGFiLgoqIFVucmVhZGFi bGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMuCiogRXhjZXNzaXZlIG51bWJlcnMgb2YgZmlsZXMg LSBvdmVyLXRocmVzaG9sZCBjb3VudHMgb2Ygbm9uLWxpbmtlZCBmaWxlcy4KKiBVbnVzdWFs IGZpbGUgZm9ybWF0cyBpbiB5b3VyIHN0eWxlIGRpcmVjdG9yaWVzLgoqIEZsYXNoIGZpbGVz ICgqLnN3ZikKKiBTb21lIG9mIHRoZSBEaWFnbm9zdGljcyB0YWIgY2hlY2tzIGFyZSBkdXBs aWNhdGVkIGFzIHdlbGwgLSB0aGUgd3JpdGFiaWxpdHkgb2YgZmlsZXMvaW1hZ2VzL3RoZW1l cy9wbHVnaW5zIGRpcmVjdG9yaWVzIGFuZCB0aGUgcHJlc2VuY2Ugb2YgdGhlIF9fdGV4dHBh dHRlcm4vc2V0dXBfXyBmb2xkZXIuCiogUGx1Z2lucyB0aGF0IGhhdmUgZmlsZXMgaW4gX190 ZXh0cGF0dGVybi9wbHVnaW5zX18gYnV0IGFyZSBub3QgaW5zdGFsbGVkIGluIHRoZSBkYXRh YmFzZSAoVFhQIDQuOCsgb25seSkuCiogUHVibGljLXNpZGUgcGx1Z2lucyB0aGF0IGFyZSBu b3QgcmVmZXJlbmNlZCBpbiB0aGUgZGF0YWJhc2UsIGhhdmUgYmVlbiBtb2RpZmllZCwgYXJl IGluYWN0aXZlLCBvciBoYXZlIHVucmVnaXN0ZXJlZCB0YWdzLgoqIFByZWZlcmVuY2VzIHRo YXQgYXJlIHBlcmNlaXZlZCB0byBiZSByZWR1bmRhbnQgLSBwZXJoYXBzIGxlZnQgYmVoaW5k IGFmdGVyIGEgcGx1Z2luIGhhcyBiZWVuIGRlbGV0ZWQuCgpoMi4gKklzIHRoZXJlIGFueXRo aW5nIHRoYXQgd29uJ3QgYmUgY29tcGxhaW5lZCBhYm91dD8qCgoqIFN0YW5kYXJkIGZpbGVz ICYgZGlyZWN0b3JpZXMgaW4gd2Vic2l0ZSByb290LCBlLmcuIF9faW5kZXgucGhwX18sIF9f Y3NzLXBocF9fLCBfX3RleHRwYXR0ZXJuL19fIGV0Yy4KKiBfX2Zhdmljb24uaWNvX18gYW5k IGFsbCBvdGhlciBpbWFnZSBmaWxlcyBpbiB3ZWJzaXRlIHJvb3QuCiogX19yb2JvdHMudHh0 X18gJiBfX2NnaS1iaW4vX18gaW4gd2Vic2l0ZSByb290LgoqIF9fYnJvd3NlcmNvbmZpZy54 bWxfXywgX19zaXRlbWFwLnhtbF9fICYgd2VibWFuaWZlc3QgZmlsZXMgaW4gd2Vic2l0ZSBy b290IChleGNlcHQgdGhleSB3aWxsIHN0aWxsIGJlIHZhbGlkYXRlZCBmb3IgYXBwcm9wcmlh dGUgZmlsZSB0eXBlKS4KKiBIaWRkZW4gZmlsZXMgX18uaHRhY2Nlc3NfXywgX18uaHRhY2Nl c3MtZGlzdF9fLCBfXy5mdHBxdW90YV9fLCBfXy53ZWxsLWtub3duX18uCiogSW1hZ2UgZmls ZXMgaW4geW91ciBpbWFnZXMgZGlyZWN0b3J5IHRoYXQgYXJlIGxpbmtlZCB0byB0aGUgZGF0 YWJhc2UuCiogRmlsZXMgaW4geW91ciBmaWxlcyBkaXJlY3RvcnkgdGhhdCBhcmUgbGlua2Vk IHRvIHRoZSBkYXRhYmFzZS4KKiBBY3RpdmUgYWRtaW4tc2lkZSBwbHVnaW5zIC0gYmVjYXVz ZSwgb2YgY291cnNlLCB0aGV5IG11c3QgYmUgaW4gdXNlIQoKaDIuICpNYW5pZmVzdGF0aW9u IG1pc2htYXNoKgoKQXMgb2YgVFhQIDQuOCwgcGx1Z2lucyBhcmUgc3RvcmVkIGluIHRoZSBm aWxlc3lzdGVtIGFzIHdlbGwgYXMgdGhlIGRhdGFiYXNlLiBUaGlzIG1lYW5zIHRoZXJlIGlz IHBvdGVudGlhbCBmb3IgbWlzbWF0Y2hlcy4gICphZGlfZGV0cml0dXMqIGZsYWdzIHBsdWdp bnM6CgoqIHRoYXQgaGF2ZSBoYWQgdGhlaXIgY29kZSBtb2RpZmllZCAoaW4gdGhlIHRyYWRp dGlvbmFsIHNlbnNlKQoqIHdoZXJlIHRoZSBwbHVnaW4gY29kZSBvbiBmaWxlIGRvZXNuJ3Qg bWF0Y2ggdGhlIGRhdGFiYXNlICh0aGlzIHNob3VsZG4ndCBub3JtYWxseSBoYXBwZW4sIHVu bGVzcyBwZXJoYXBzIHRoZXJlJ3MgYmVlbiBhbiBGVFAgaGljY3VwKQoqIHdoZXJlIHRoZSBw bHVnaW4ncyB0eXBlIG9yIGxvYWQgb3JkZXIgaXMgZGlmZmVyZW50IGZyb20gdGhhdCBzcGVj aWZpZWQgZHVyaW5nIGluc3RhbGxhdGlvbgoqKiB0eXBlIGFuZCBsb2FkIG9yZGVyIG1pc21h dGNoIGRldGVjdGlvbiBpcyBkZXBlbmRlbnQgb24gdGhlIGF2YWlsYWJsaXR5IG9mIHRoZSBw bHVnaW4ncyBfX21hbmlmZXN0Lmpzb25fXyBmaWxlCioqIF9fbWFuaWZlc3QuanNvbl9fIG1h eSBub3QgYWx3YXlzIGJlIHByZXNlbnQsIGZvciBleGFtcGxlLCBpbiB3ZWJzaXRlcyB0aGF0 IGhhdmUgYmVlbiBtaWdyYXRlZCBmcm9tIGVhcmxpZXIgcmVsZWFzZXMKCk1pc3NpbmcgbWFu aWZlc3QgZmlsZXMgd2lsbCBiZSBsaXN0ZWQuICBUaGUgbGFjayBvZiBhIG1hbmlmZXN0IGZp bGUgX2lzIG5vdCBhbiBpc3N1ZSBmb3IgcGx1Z2luIG9yIHdlYnNpdGUgb3BlcmF0aW9uXy4K CmgyLiAqQ1NTIC0gdW51c3VhbCBvciBtaXN1bmRlcnN0b29kPyoKClBIUCBpcyBub3QgaW5m YWxsaWJsZSB3aGVuIGRldGVybWluaW5nIGZpbGUgdHlwZXMuICBGcm9tIHRlc3RpbmcsIENT UyBmaWxlcyBjYW4gYXBwZWFyIHRvIGJlICd0ZXh0L3BsYWluJyAoZmFpciBlbm91Z2gpIG9y ICd0ZXh0L3gtYXNtJyAoZG8gd2hhdD8pLiAgVGhlcmUgaXMgYSAndGV4dC9jc3MnIHR5cGUs IGJ1dCBJIGhhdmVuJ3Qgc2VlbiBvbmUgeWV0ISAgSG93ZXZlciwgYW55dGhpbmcgZWxzZSBp cyBkZWVtZWQgInVudXN1YWwiIC0gd2hldGhlciB0aGF0J3MgYSBiaWcgZGVhbCBhbnl3YXks IEknbSBub3Qgc3VyZS4KCmgyLiAqUXVlc3Rpb25pbmcgdGhlIHF1ZXJpZXMqCgoqIF9fLkRT X1N0b3JlX18gLSBPSyBpbiBhIGxvY2FsIE1hYyBkZXZlbG9wbWVudCBzaXRlLCBidXQgbm8g cG9pbnQgaGF2aW5nIGl0IGluIGEgbGl2ZSBzZXR1cC4KKiBfLnN2bl8gLSBzdGlsbCBydW5u aW5nIFN1YnZlcnNpb24/IFRoaXMgc3ViZm9sZGVyIGNhbiB0YWtlIHVwIGEgbG90IG9mIHNw YWNlLgoqIF9fLmdpdCpfXyAtIHVzaW5nIEdpdD8gVGhlc2UgY2FuIGFsc28gdGFrZSB1cCBh IGxvdCBvZiBzcGFjZS4KKiBNaXNzaW5nIF9fLmh0YWNjZXNzX18gLSB3aXRob3V0IHRoZW0s IHRoaXJkIHBhcnRpZXMgY2FuIGRvIGRpcmVjdG9yeSBsaXN0aW5ncy4gIF9fdGV4dHBhdHRl cm4vLmh0YWNjZXNzX18gaXMgc3VwcGxpZWQgYnkgZGVmYXVsdCwgYW5kIG90aGVyIGRpcmVj dG9yaWVzIGhhdmUgc2VydmluZyBzdWdnZXN0aW9ucyAoX18uaHRhY2Nlc3MtZGlzdF9fKS4K KiBfX2pzX18gc2NyaXB0cyBkaXJlY3RvcnkgLSB0aGlzIGhhcyBub3QgYmVlbiBwcmVzZW50 IGluIFRYUCBkaXN0cmlidXRpb25zIHNpbmNlIDQuNS4gIEFzIGxvbmcgYXMgeW91J3JlIG5v dCB1c2luZyBpdCB5b3UgY2FuIGJpbiBpdC4KKiBfX2pxdWVyeS5qc19fIGZpbGUgLSB0aGlz IGhhcyBub3QgYmVlbiBwcmVzZW50IGluIFRYUCBkaXN0cmlidXRpb25zIHNpbmNlIDQuNi4g IEFzIGxvbmcgYXMgeW91J3JlIG5vdCB1c2luZyBpdCB5b3UgY2FuIGJpbiBpdC4KCmgyLiAq V2hhdCdzIHlvdXIgcHJlZmVyZW5jZT8qCgpUaGUgcGx1Z2luIHdpbGwgbG9vayBhdCBwcmVm ZXJlbmNlcyBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIGFuZCBhdHRlbXB0IHRvIGZsYWcgdGhv c2Ugd2hpY2ggYXJlIF9wb3NzaWJseSByZWR1bmRhbnRfIC0gcGVyaGFwcyBkdWUgdG8gZGVs ZXRlZCBwbHVnaW5zIG5vdCB0aWR5aW5nIHVwIGFmdGVyIHRoZW1zZWx2ZXMuCgpUaGlzIHBy b2Nlc3MgcmVsaWVzIG9uIHBsdWdpbnMgc3RvcmluZyB0aGVpciBwcmVmZXJlbmNlcyBhc3Nv Y2lhdGVkIHdpdGggcmVjb2duaXNhYmxlIGV2ZW50cy4gIFRoZXNlIGV2ZW50cyBhcmUgdGFr ZW4gZnJvbSB0aGUgY2FsbGJhY2sgbGlzdCBjcmVhdGVkIGJ5IFRYUCBBZG1pbiB3aGljaCBp cyBwb3B1bGF0ZWQgd2hlbiBwbHVnaW4gYXV0aG9ycyB1c2UgQHJlZ2lzdGVyX2NhbGxiYWNr KCdwbHVnaW5fZnVuY3Rpb24nLCAncGx1Z2luX2V2ZW50JylALiAgU29tZSBwbHVnaW5zLCBl c3BlY2lhbGx5IHRob3NlIHdpdGhvdXQgdGhlaXIgb3duIHRhYnMsIG1heSBiZSBsaXN0ZWQg ZXJyb25lb3VzbHkuCgpOb3RlIHRoYXQgcHJlZmVyZW5jZXMgYmVsb25naW5nIHRvIGluYWN0 aXZlIHBsdWdpbnMgd2lsbCBhbHNvIGJlIGZsYWdnZWQuCgpJdCBzaG91bGQgYmUgZmFpcmx5 IG9idmlvdXMgd2hpY2ggcGx1Z2lucyByZWxhdGUgdG8gdGhlIHJlZHVuZGFudCBwcmVmZXJl bmNlcyBsaXN0ZWQuICBJZiB5b3UncmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgcHJlZmVy ZW5jZXMsIHRoZW4geW91J2xsIG5lZWQgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YWJhc2UgZGly ZWN0bHkgLSB1c2luZyBmb3IgZXhhbXBsZTogInNtZF9wcmVmYWxpemVyIjpodHRwczovL2Zv cnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTMyMjcyLCBNeVNRTCBDTEks IHBocE15QWRtaW4sIG9yIFNlcXVlbCBQcm8uCgpoMi4gKkxpbWl0YXRpb25zKgoKKiBNdWx0 aS1zaXRlIFRYUCBpbnN0YWxsYXRpb25zIGFyZSB3aG9sZSBuZXcga2V0dGxlIG9mIHdvcm1z LgoqIExvd2VyIGxldmVscyBvZiBzdWJkaXJlY3RvcmllcyBhcmUgbm90IGV4YW1pbmVkLgoq IE1hYyBhbGlhc2VzIGFyZSBzZWVuIGFzIHRleHQgZmlsZXMuCiogR2VuZXJhdGVzIGZhbHNl IHdhcm5pbmdzIGZvciBzb21lIHB1YmxpYy1zaWRlIHBsdWdpbnMgKHNpbWlsYXIgdG8gKnBh cF9jb21jb25uZWN0KikgLSBpLmUuIHRob3NlIHdpdGhvdXQgYW55IHRhZ3MuIFlvdSBjYW4g YWx3YXlzIGFkZCB0aGVtIHRvIHRoZSAiSWdub3JlIHBsdWdpbiIgcHJlZmVyZW5jZSBsaXN0 LgoqIE5vdCB0ZXN0ZWQgd2l0aCBtdWx0aS1ieXRlIGNoYXJhY3RlciBmaWxlbmFtZXMuCiog UHJlZmVyZW5jZXMgYmVsb25naW5nIHRvIGluYWN0aXZlIHBsdWdpbnMgd2lsbCBiZSBmbGFn Z2VkIGFzICJQb3NzaWJseSByZWR1bmRhbnQiLgoqIFByZWZlcmVuY2VzIHRoYXQgYXJlIGdl bnVpbmVseSByZWR1bmRhbnQgYnV0IGFyZSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlIHdpdGgg bGl2ZSBldmVudHMgKGUuZy4gImFkbWluIikgd29uJ3QgYmUgZGV0ZWN0ZWQuCgpoMi4gKlBy aXZpbGVnZXMqCgpZb3UgY2FuIGFkanVzdCB3aG8gZ2V0cyB0byB1c2UgdGhlIHBsdWdpbiBi eSBzZXR0aW5nIHRoZSBwcml2aWxlZ2VzIGluIG9wdGlvbnMuIERlZmF1bHQgPSBQdWJsaXNo ZXIgb25seS4KCmgyLiAqVGV4dHBhY2sqCgpUbyBpbnN0YWxsIHRoZSBUZXh0cGFjaywgZ28g dG8gdGhlIHBsdWdpbidzIE9wdGlvbnMgdGFiIGFuZCBjbGljayBfSW5zdGFsbCB0ZXh0cGFj a18uICBUaGlzIHdpbGwgY29weSAmIGluc3RhbGwgaXQgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIu IFRoZSBudW1iZXIgb2YgbGFuZ3VhZ2Ugc3RyaW5ncyBpbnN0YWxsZWQgZm9yIHlvdXIgbGFu Z3VhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQuCgpJZiB0aGUgVGV4dHBhY2sgaW5zdGFsbGF0aW9u IGZhaWxzIChwb3NzaWJseSBkdWUgdG8gYW4gZXJyb3IgYWNjZXNzaW5nIHRoZSByZW1vdGUg c2l0ZSksIHRoZSBhbHRlcm5hdGl2ZSBpcyB0byBjbGljayB0aGUgIlRleHRwYWNrIGFsc28g YXZhaWxhYmxlIG9ubGluZSI6aHR0cDovL3d3dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1L3Rl eHRwYWNrIGxpbmsuICBUaGlzIHdpbGwgdGFrZSB5b3UgdG8gYSB3ZWJzaXRlIHdoZXJlIHRo ZSBUZXh0cGFjayBjYW4gYmUgbWFudWFsbHkgY29waWVkICYgcGFzdGVkIGludG8gdGhlIFRY UCBBZG1pbiAtIExhbmd1YWdlIHRhYi4KCkFkZGl0aW9ucyBhbmQgY29ycmVjdGlvbnMgdG8g dGhlIFRleHRwYWNrIGFyZSB3ZWxjb21lIC0gcGxlYXNlIHVzZSB0aGUgIlRleHRwYWNrIGZl ZWRiYWNrIjpodHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUvdGV4dHBhY2svP3Bs dWdpbj1hZGlfZGV0cml0dXMgZm9ybS4KCmgyKGFkaV9leHRyYXMpLiAqQWRkaXRpb25hbCBp bmZvcm1hdGlvbioKCnAoYWRpX2V4dHJhcykuIFN1cHBvcnQgYW5kIGZ1cnRoZXIgaW5mb3Jt YXRpb24gY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlICJUZXh0cGF0dGVybiBzdXBwb3J0IGZv cnVtIjpodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9NTEx MjcuIEEgY29weSBvZiB0aGlzIGhlbHAgaXMgYWxzbyBhdmFpbGFibGUgIm9ubGluZSI6aHR0 cDovL3d3dy5ncmVhdG9jZWFubWVkaWEuY29tLmF1L3R4cC8/cGx1Z2luPWFkaV9kZXRyaXR1 cy4gIE1vcmUgYWRpX3BsdWdpbnMgY2FuIGJlIGZvdW5kICJoZXJlIjpodHRwOi8vd3d3Lmdy ZWF0b2NlYW5tZWRpYS5jb20uYXUvdHhwLy4iO3M6MzoibWQ1IjtzOjMyOiIwMmU0NzYzMmFl NjYwZDQ2YjljYzI1MWM1OWU4YTA3NSI7fQ==