# Name: smd_user_manager v0.11 # Type: Admin/Public side plugin # Manage user accounts, groups and privileges # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 8 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE2OiJzbWRfdXNlcl9tYW5hZ2VyIjtzOjY6ImF1dGhvciI7 czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVm ZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjExIjtzOjExOiJkZXNjcmlwdGlv biI7czo0MzoiTWFuYWdlIHVzZXIgYWNjb3VudHMsIGdyb3VwcyBhbmQgcHJpdmlsZWdlcyI7 czo0OiJjb2RlIjtzOjYzOTg2OiIvKioNCiAqIHNtZF91c2VyX21hbmFnZXINCiAqDQogKiBB IFRleHRwYXR0ZXJuIENNUyBwbHVnaW4gZm9yIGNvbXBsZXRlIHVzZXIgYWRtaW5pc3RyYXRp b246DQogKiAgLT4gU2VhcmNoIC8gZmlsdGVyIC8gYWx0ZXIgaW5mbyBvbiB1c2VycyAod2l0 aCBhc3NldCBjb3VudHMpDQogKiAgLT4gQ3JlYXRlIC8gYWx0ZXIgZ3JvdXBzIChyb2xlcykN CiAqICAtPiBDcmVhdGUgLyBjdXN0b21pc2UgcHJpdnMgKGFyZWFzKQ0KICogIC0+IE9ubGlu ZSB1c2VyIGxpc3QNCiAqDQogKiBAYXV0aG9yIFN0ZWYgRGF3c29uDQogKiBAbGluayAgIGh0 dHA6Ly9zdGVmZGF3c29uLmNvbS8NCiAqLw0KaWYgKCFkZWZpbmVkKCdTTURfVU1fUFJJVlMn KSkgew0KCWRlZmluZSgiU01EX1VNX1BSSVZTIiwgJ3NtZF91bV9wcml2cycpOw0KfQ0KaWYg KCFkZWZpbmVkKCdTTURfVU1fR1JPVVBTJykpIHsNCglkZWZpbmUoIlNNRF9VTV9HUk9VUFMi LCAnc21kX3VtX2dyb3VwcycpOw0KfQ0KDQppZihAdHhwaW50ZXJmYWNlID09ICdhZG1pbicp IHsNCglnbG9iYWwgJHNtZF91bV9ldmVudCwgJHNtZF91bV9zdHlsZXMsICRzbWRfdW1fcHJl ZnMsICR0eHBfcGVybWlzc2lvbnMsICR0eHBfZ3JvdXBzLCAkdHhwX3VzZXIsICRldmVudCwg JHN0ZXA7DQoJJHNtZF91bV9ldmVudCA9ICdzbWRfdW0nOw0KDQoJLy8gU3R5bGVzIGluY2x1 ZGUgYSBoYWNrIGZvciBSZW1vcmEgKCNuYXYgbGkgdWwpIHRvIHByZXZlbnQgbWVudSBmcm9t IGRpc2FwcGVhcmluZyB1bmRlciB0aGUNCgkvLyBwcml2cyBjb250ZW50LiBUaGlzIG9ubHkg b2NjdXJzIGJlY2F1c2UgdGhlIC5zbWRfdW1fcHJpdmdyb3VwIGNsYXNzIHVzZXMgcG9zaXRp b246cmVsYXRpdmUuDQoJLy8gTmVlZHMgd29ya2Fyb3VuZCBhcyBpdCBhZmZlY3RzIG90aGVy IHBsdWdpbnMuDQoJJHNtZF91bV9zdHlsZXMgPSBhcnJheSgNCgkJJ2NvbnRyb2wtcGFuZWwn ID0+DQonI3NtZF91bV9jb250cm9sIHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0NCiNzbWRfdW1f Y29udHJvbCAuc2VhcmNoLWZvcm0sICNzbWRfdW1fY29udHJvbCAuc21kX3VtX3RpdGxlLCAu c21kX3VtX2J1dHRvbnMgeyBkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luOjAgMzBweDsg fQ0KLnNtZF91bV9wcml2Z3JvdXAgeyBtYXJnaW46MTBweCBhdXRvOyB3aWR0aDo1MCU7IHBv c2l0aW9uOnJlbGF0aXZlOyB9DQouc21kX3VtX3ByaXZncm91cCBoMiB7IHRleHQtYWxpZ246 bGVmdDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQ0KLnNtZF9hY3RpdmUgeyBmb250LXdlaWdodDpi b2xkOyB9DQouc21kX3VtX3ByaXZzYXZlIHsgcG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6LTU1 cHg7IHRvcDowOyB9DQouc21kX3VtX3RpdGxlIHsgZm9udC1zaXplOiAxMzAlOyBtYXJnaW46 MCAzMHB4IDEwcHghaW1wb3J0YW50OyB9DQouc21kX3VtX2FjdGl2ZV91c2VycyB7IG1hcmdp bjoxNXB4IGF1dG87IHRleHQtYWxpZ246Y2VudGVyOyB3aWR0aDo4MCU7IH0NCi5zbWRfdW1f c2VsZWN0ZWQgeyBiYWNrZ3JvdW5kLWNvbG9yOiNlMmRmY2U7IH0NCi5zbWRfdW1fZ3JwX25h bWUsIC5zbWRfdW1fcHJ2X25hbWUsIC5zbWRfdW1fcmVzZXRfY29sIHsgY3Vyc29yOnBvaW50 ZXI7IH0NCi5zbWRfdW1fY2hlY2tib3gsIC5zbWRfdW1fcHJ2X2hkciB7IHRleHQtYWxpZ246 Y2VudGVyIWltcG9ydGFudDsgfQ0KI25hdiBsaSB1bCB7IHotaW5kZXg6MTAwMDA7IH0nLA0K CSk7DQoNCglhZGRfcHJpdnMoJHNtZF91bV9ldmVudC4nLnVzci5saXN0JywgJzEsIDIsIDMn KTsNCglhZGRfcHJpdnMoJHNtZF91bV9ldmVudC4nLnVzci5lZGl0JywgJzEsIDInKTsNCglh ZGRfcHJpdnMoJHNtZF91bV9ldmVudC4nLnVzci5jcmVhdGUnLCAnMScpOw0KCWFkZF9wcml2 cygkc21kX3VtX2V2ZW50LicuZ3JwJywgJzEnKTsNCglhZGRfcHJpdnMoJHNtZF91bV9ldmVu dC4nLnBydicsICcxJyk7DQoJYWRkX3ByaXZzKCRzbWRfdW1fZXZlbnQuJy5wcmYnLCAnMScp Ow0KCXJlZ2lzdGVyX3RhYignYWRtaW4nLCAkc21kX3VtX2V2ZW50LCBzbWRfdW1fZ1R4dCgn c21kX3VtX3RhYl9uYW1lJykpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdW1fZGlzcGF0 Y2hlcicsICdhZG1pbicpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdW1fZGlzcGF0Y2hl cicsICRzbWRfdW1fZXZlbnQpOw0KCXJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfdW1fZGlzcGF0 Y2hlcicsICRzbWRfdW1fZXZlbnQuJy51c3IuZWRpdC5vd24nKTsNCglyZWdpc3Rlcl9jYWxs YmFjaygnc21kX3VtX3VzZXJzX3RhYicsICdhZG1pbl9zaWRlJywgJ2hlYWRfZW5kJyk7DQoJ cmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF91bV93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUu c21kX3VzZXJfbWFuYWdlcicpOw0KDQoJLy8gTG9nIHRoZSB0aW1lIG9mIHRoaXMgYWNjZXNz IGF0dGVtcHQNCgkkY3Vycl91c2VycyA9IHVuc2VyaWFsaXplKGdldF9wcmVmKCdzbWRfdW1f Y3VycmVudF91c2VycycsICcnKSk7DQoJJGN1cnJfdXNlcnNbJHR4cF91c2VyXSA9IHRpbWUo KTsNCglzZXRfcHJlZignc21kX3VtX2N1cnJlbnRfdXNlcnMnLCBzZXJpYWxpemUoJGN1cnJf dXNlcnMpLCAnc21kX3VtJywgUFJFRl9ISURERU4sICcnLCAwKTsNCg0KCS8vIE1lcmdlIGlu IHRoZSBncm91cHMgb25seSBmb3Igbm93DQoJc21kX3VtX3ByaXZfbWVyZ2UoMSwgMCk7DQoJ aW5jbHVkZV9vbmNlIHR4cGF0aC4nL2xpYi90eHBsaWJfYWRtaW4ucGhwJzsNCg0KCS8vIFBl cm1pdCB1c2VyIHNlbGYtZWRpdGluZw0KCSRzbWRfdW1fZ3JwcyA9IGFycmF5X2tleXMoc21k X3VtX2dldF9ncm91cHMoMCkpOw0KCXVuc2V0KCRzbWRfdW1fZ3Jwc1swXSk7IC8vIFJlbW92 ZSBOb25lIHVzZXINCgkkYWxscHJpdnMgPSBqb2luKCcsJywkc21kX3VtX2dycHMpOw0KCWFk ZF9wcml2cygkc21kX3VtX2V2ZW50LCAkYWxscHJpdnMpOyAvLyBSZXF1aXJlZCB0byBkaXNw bGF5IGFueXRoaW5nIGF0IGFsbCBvbiB0aGUgVXNlciBNYW5hZ2VyIHRhYg0KCWFkZF9wcml2 cygkc21kX3VtX2V2ZW50LicudXNyLmVkaXQub3duJywgJGFsbHByaXZzKTsNCg0KCS8vIE5v dyB0aGUgcHJpdnMgYXJlIGVzdGFibGlzaGVkIGZvciBhbGwgYWRtaW4gc3RlcHMgc28gd2Ug Y2FuIGdvIGFoZWFkDQoJLy8gYW5kIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiBPbmUgY2F2ZWF0 OiBpZiB3ZSdyZSBzYXZpbmcgdGhlIHByaXZzIHdlDQoJLy8gbmVlZCB0byBkZWxheSB0aGUg ZGF0YWJhc2UgbWVyZ2UgdW50aWwgYWZ0ZXIgdGhlIHJlc2V0cyBoYXZlIGJlZW4gYXBwbGll ZCwNCgkvLyBvdGhlcndpc2Ugd2Ugd29uJ3Qga25vdyB3aGF0IHRoZSBkZWZhdWx0cyAoaW4g YWRtaW5fY29uZmlnLnBocCkgYXJlDQoJJGRvX3ByaXZzID0gKCgkc3RlcCA9PSAnc21kX3Vt X3ByaXZzJykgJiYgcHMoJ3NtZF91bV9wcml2X3NhdmUnKSkgPyAwIDogMTsNCglzbWRfdW1f cHJpdl9tZXJnZSgwLCAkZG9fcHJpdnMpOw0KDQoJJHNtZF91bV9wcmVmcyA9IGFycmF5KA0K CQknc21kX3VtX2hpZXJhcmNoaWNhbF9ncm91cHMnID0+IGFycmF5KA0KCQkJJ2h0bWwnICAg ICA9PiAneWVzbm9yYWRpbycsDQoJCQkndHlwZScgICAgID0+IFBSRUZfSElEREVOLA0KCQkJ J3Bvc2l0aW9uJyA9PiAxMCwNCgkJCSdkZWZhdWx0JyAgPT4gJzAnLA0KCQkpLA0KCQknc21k X3VtX2FkbWluX2dyb3VwJyA9PiBhcnJheSgNCgkJCSdodG1sJyAgICAgPT4gJ3NlbGVjdGxp c3QnLA0KCQkJJ3R5cGUnICAgICA9PiBQUkVGX0hJRERFTiwNCgkJCSdwb3NpdGlvbicgPT4g MjAsDQoJCQknY29udGVudCcgID0+IGFycmF5KGdldF9ncm91cHMoKSwgZmFsc2UpLA0KCQkJ J2RlZmF1bHQnICA9PiAnMScsDQoJCSksDQoJCSdzbWRfdW1fbWF4X3NlYXJjaF9saW1pdCcg PT4gYXJyYXkoDQoJCQknaHRtbCcgICAgID0+ICd0ZXh0X2lucHV0JywNCgkJCSd0eXBlJyAg ICAgPT4gUFJFRl9ISURERU4sDQoJCQkncG9zaXRpb24nID0+IDMwLA0KCQkJJ2RlZmF1bHQn ICA9PiAnNTAwJywNCgkJKSwNCgkJJ3NtZF91bV9wYXNzX2xlbmd0aCcgPT4gYXJyYXkoDQoJ CQknaHRtbCcgICAgID0+ICd0ZXh0X2lucHV0JywNCgkJCSd0eXBlJyAgICAgPT4gUFJFRl9I SURERU4sDQoJCQkncG9zaXRpb24nID0+IDQwLA0KCQkJJ2RlZmF1bHQnICA9PiAnMTInLA0K CQkpLA0KCQknc21kX3VtX2FjdGl2ZV90aW1lb3V0JyA9PiBhcnJheSgNCgkJCSdodG1sJyAg ICAgPT4gJ3RleHRfaW5wdXQnLA0KCQkJJ3R5cGUnICAgICA9PiBQUkVGX0hJRERFTiwNCgkJ CSdwb3NpdGlvbicgPT4gNTAsDQoJCQknZGVmYXVsdCcgID0+ICc2MCcsDQoJCSksDQoJCSdz bWRfdW1fc2VsZl9hbHRlcicgPT4gYXJyYXkoDQoJCQknaHRtbCcgICAgID0+ICd5ZXNub3Jh ZGlvJywNCgkJCSd0eXBlJyAgICAgPT4gUFJFRl9ISURERU4sDQoJCQkncG9zaXRpb24nID0+ IDYwLA0KCQkJJ2RlZmF1bHQnICA9PiAnMCcsDQoJCSksDQoJKTsNCn0NCg0KLy8gKioqKioq KioqKioqKioqKioqKioNCi8vIEFETUlOIFNJREUgSU5URVJGQUNFDQovLyAqKioqKioqKioq KioqKioqKioqKg0KLy8gUGx1Z2luIGp1bXAgb2ZmIHBvaW50DQpmdW5jdGlvbiBzbWRfdW1f ZGlzcGF0Y2hlcigkZXZ0LCAkc3RwKSB7DQoJZ2xvYmFsICRzbWRfdW1fZXZlbnQsICR0eHBf cGVybWlzc2lvbnMsICR0eHBfdXNlciwgJGV2ZW50Ow0KDQoJb2JfZW5kX2NsZWFuKCk7IC8v IEtpbGwgYW55IGV4aXN0aW5nIEFkbWluIHRhYiBwYW5lbC4uLg0KCW9iX3N0YXJ0KCk7IC8v IC4uLiBhbmQgc3RhcnQgYWdhaW4NCg0KCSRldmVudCA9ICRzbWRfdW1fZXZlbnQ7DQoJJHN0 cCA9IGdwcygnc3RlcCcpOw0KCSRhdmFpbGFibGVfc3RlcHMgPSBhcnJheSgNCgkJJ3NtZF91 bScgICAgICAgICAgICAgICA9PiBmYWxzZSwNCgkJJ3NtZF91bV9lZGl0JyAgICAgICAgICA9 PiBmYWxzZSwNCgkJJ3NtZF91bV9zYXZlJyAgICAgICAgICA9PiB0cnVlLA0KCQknc21kX3Vt X3NhdmVfbmV3JyAgICAgID0+IHRydWUsDQoJCSdzbWRfdW1fZ3JvdXBzJyAgICAgICAgPT4g dHJ1ZSwNCgkJJ3NtZF91bV9wcml2cycgICAgICAgICA9PiB0cnVlLA0KCQknc21kX3VtX3By ZWZzJyAgICAgICAgID0+IHRydWUsDQoJCSdzbWRfdW1fbXVsdGlfZWRpdCcgICAgPT4gdHJ1 ZSwNCgkJJ3NtZF91bV9jaGFuZ2VfcGFzcycgICA9PiB0cnVlLA0KCQknc21kX3VtX2NoYW5n ZV9wYWdlYnknID0+IHRydWUsDQoJCSdzbWRfdW1fdGFibGVfaW5zdGFsbCcgPT4gdHJ1ZSwN CgkJJ3NtZF91bV90YWJsZV9yZW1vdmUnICA9PiB0cnVlLA0KCQknc2F2ZV9wYW5lX3N0YXRl JyAgICAgID0+IHRydWUsDQoJKTsNCg0KCWlmICghaGFzX3ByaXZzKCRzbWRfdW1fZXZlbnQu Jy51c3IubGlzdCcpKSB7DQoJCSRzdHAgPSAoJHN0cCkgPyAkc3RwIDogJ3NtZF91bV9lZGl0 JzsNCgkJJHVpZCA9IHNhZmVfZmllbGQoJ3VzZXJfaWQnLCAndHhwX3VzZXJzJywgIm5hbWU9 JyIgLiBkb1NsYXNoKCR0eHBfdXNlcikgLiAiJyIpOw0KCQlpZiAoJHVpZCkgew0KCQkJLy8g SW5qZWN0IHRoaXMgdmFsdWUgc28gdGhlIGVkaXQgc3RlcCBwaWNrcyBpdCB1cCBhbmQgZWRp dHMgb25seSB0aGUgY3VycmVudCB1c2VyLg0KCQkJLy8gVGhlIGVkaXQvc2F2ZSBzdGVwcyB3 aWxsIHZlcmlmeSBpZiB0aGUgY3VycmVudCB1c2VyIGlzIHRoZSBvbmUgdHJ5aW5nIHRvIGJl IGVkaXRlZA0KCQkJLy8gdG8gcHJldmVudCBwZW9wbGUgYWRkaW5nICZ1c2VyX2lkPU4gdG8g dGhlIFVSTA0KCQkJJF9QT1NUWyd1c2VyX2lkJ10gPSAkdWlkOw0KCQl9DQogICB9DQoJaWYg KCRzdHAgPT0gJ3NhdmVfcGFuZV9zdGF0ZScpIHsNCgkJc21kX3VtX3NhdmVfcGFuZV9zdGF0 ZSgpOw0KCX0gZWxzZSBpZiAoISRzdHAgb3IgIWJvdW5jZXIoJHN0cCwgJGF2YWlsYWJsZV9z dGVwcykpIHsNCgkJJHN0cCA9ICRzbWRfdW1fZXZlbnQ7DQoJfQ0KCSRzdHAoKTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBUcnkgdG8gaGlkZSB0aGUgQWRtaW4t PlVzZXJzIHRhYiBpbiB0aGUgc2Vjb25kYXJ5IG5hdiB2aWEgalF1ZXJ5Lg0KLy8gTWF5IGZh aWwgd2l0aCBpbnZlbnRpdmUgRE9NIHN0cnVjdHVyZXMgLyB0aGVtZXMNCi8vIChub3RlIHRv IHNlbGY6IGNhbXBhaWduIGZvciBpbXByb3ZlbWVudCBpbiB0aGlzIGFyZWEgYmVjYXVzZSBq UXVlcnkgc21lbGxzIGhhY2tpc2gpDQpmdW5jdGlvbiBzbWRfdW1fdXNlcnNfdGFiKCkgew0K CSR1c2VyU3RyID0gZ1R4dCgndGFiX3NpdGVfYWRtaW4nKTsNCgllY2hvIDw8PCBFT0pTDQo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJalF1ZXJ5KGZ1bmN0aW9uKCkgew0K CQlqUXVlcnkoImFbaHJlZj0nP2V2ZW50PWFkbWluJ10iKS5lYWNoKGZ1bmN0aW9uKCkgew0K CQkJbWUgPSBqUXVlcnkodGhpcyk7DQoJCQlpZiAobWUudGV4dCgpID09ICJ7JHVzZXJTdHJ9 Iikgew0KCQkJCW1lLnBhcmVudCgpLmhpZGUoKTsNCgkJCX0NCgkJfSk7DQoJfSk7DQo8L3Nj cmlwdD4NCkVPSlM7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gc21kX3VtX3dlbGNvbWUoJGV2dCwgJHN0cCkgew0KCSRtc2cgPSAnJzsNCglzd2l0Y2gg KCRzdHApIHsNCgkJY2FzZSAnaW5zdGFsbGVkJzoNCgkJCXNtZF91bV90YWJsZV9pbnN0YWxs KDApOw0KCQkJJG1zZyA9ICdTdXBlciBkdXBlciB1c2VycyEnOw0KCQkJYnJlYWs7DQoJCWNh c2UgJ2RlbGV0ZWQnOg0KCQkJc21kX3VtX3RhYmxlX3JlbW92ZSgwKTsNCgkJCWJyZWFrOw0K CX0NCglyZXR1cm4gJG1zZzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQov LyBNYWluIHVzZXIgZGlzcGxheSBsaXN0DQpmdW5jdGlvbiBzbWRfdW0oJG1zZz0nJykgew0K CWdsb2JhbCAkc21kX3VtX2V2ZW50LCAkc21kX3VtX3ByZWZzLCAkdHhwX3VzZXIsICRzbWRf dW1fbGlzdF9wYWdlYnksICRzbWRfdW1fc3R5bGVzOw0KDQoJcmVxdWlyZV9wcml2cygkc21k X3VtX2V2ZW50LicudXNyLmxpc3QnKTsNCg0KCWlmICghc21kX3VtX3RhYmxlX2V4aXN0KDEp KSB7DQoJCXNtZF91bV90YWJsZV9pbnN0YWxsKDApOw0KCX0NCg0KCXBhZ2V0b3Aoc21kX3Vt X2dUeHQoJ3NtZF91bV90YWJfbmFtZScpLicgJnJhcXVvOyAnLnNtZF91bV9nVHh0KCdzbWRf dW1fdXNyX2xibCcpLCAkbXNnKTsNCglleHRyYWN0KHNtZF91bV9idXR0b25zKCd1c3InKSk7 DQoNCglleHRyYWN0KGdwc2EoYXJyYXkoJ3BhZ2UnLCAnc29ydCcsICdkaXInLCAnY3JpdCcs ICdzZWFyY2hfbWV0aG9kJykpKTsNCglpZiAoJHNvcnQgPT09ICcnKSAkc29ydCA9IGdldF9w cmVmKCdzbWRfdW1fc29ydF9jb2x1bW4nLCAnbG9naW4nKTsNCglpZiAoJGRpciA9PT0gJycp ICRkaXIgPSBnZXRfcHJlZignc21kX3VtX3NvcnRfZGlyJywgJ2Rlc2MnKTsNCgkkZGlyID0g KCRkaXIgPT0gJ2FzYycpID8gJ2FzYycgOiAnZGVzYyc7DQoNCglzd2l0Y2ggKCRzb3J0KSB7 DQoJCWNhc2UgJ3JlYWxfbmFtZSc6DQoJCQkkc29ydF9zcWwgPSAnUmVhbE5hbWUgJy4kZGly LicsIGxhc3RfYWNjZXNzIGRlc2MnOw0KCQlicmVhazsNCg0KCQljYXNlICdlbWFpbCc6DQoJ CQkkc29ydF9zcWwgPSAnZW1haWwgJy4kZGlyLicsIGxhc3RfYWNjZXNzIGRlc2MnOw0KCQli cmVhazsNCg0KCQljYXNlICdwcml2cyc6DQoJCQkkc29ydF9zcWwgPSAncHJpdnMgJy4kZGly LicsIGxhc3RfYWNjZXNzIGRlc2MnOw0KCQlicmVhazsNCg0KCQljYXNlICdhcnRpY2xlX2Nv dW50JzoNCgkJCSRzb3J0X3NxbCA9ICdhcnRpY2xlX2NvdW50ICcuJGRpci4nLCBsYXN0X2Fj Y2VzcyBkZXNjJzsNCgkJYnJlYWs7DQoNCgkJY2FzZSAnaW1hZ2VfY291bnQnOg0KCQkJJHNv cnRfc3FsID0gJ2ltYWdlX2NvdW50ICcuJGRpci4nLCBsYXN0X2FjY2VzcyBkZXNjJzsNCgkJ YnJlYWs7DQoNCgkJY2FzZSAnZmlsZV9jb3VudCc6DQoJCQkkc29ydF9zcWwgPSAnZmlsZV9j b3VudCAnLiRkaXIuJywgbGFzdF9hY2Nlc3MgZGVzYyc7DQoJCWJyZWFrOw0KDQoJCWNhc2Ug J2xpbmtfY291bnQnOg0KCQkJJHNvcnRfc3FsID0gJ2xpbmtfY291bnQgJy4kZGlyLicsIGxh c3RfYWNjZXNzIGRlc2MnOw0KCQlicmVhazsNCg0KCQljYXNlICdsYXN0X2xvZ2luJzoNCgkJ CSRzb3J0X3NxbCA9ICdsYXN0X2FjY2VzcyAnLiRkaXI7DQoJCWJyZWFrOw0KDQoJCWRlZmF1 bHQ6DQoJCQkkc29ydCA9ICduYW1lJzsNCgkJCSRzb3J0X3NxbCA9ICduYW1lICcuJGRpci4n LCBsYXN0X2FjY2VzcyBkZXNjJzsNCgkJYnJlYWs7DQoJfQ0KDQoJc2V0X3ByZWYoJ3NtZF91 bV9zb3J0X2NvbHVtbicsICRzb3J0LCAnc21kX3VtJywgUFJFRl9ISURERU4sICcnLCAwLCBQ UkVGX1BSSVZBVEUpOw0KCXNldF9wcmVmKCdzbWRfdW1fc29ydF9kaXInLCAkZGlyLCAnc21k X3VtJywgUFJFRl9ISURERU4sICcnLCAwLCBQUkVGX1BSSVZBVEUpOw0KDQoJJHN3aXRjaF9k aXIgPSAoJGRpciA9PSAnZGVzYycpID8gJ2FzYycgOiAnZGVzYyc7DQoNCgkkY3JpdGVyaWEg PSAxOw0KDQoJJGNvdW50X2NvbHVtbnMgPSBhcnJheSgnYXJ0aWNsZV9jb3VudCcsICdpbWFn ZV9jb3VudCcsICdmaWxlX2NvdW50JywgJ2xpbmtfY291bnQnKTsNCg0KCWlmICgkc2VhcmNo X21ldGhvZCBhbmQgJGNyaXQgIT0gJycpIHsNCgkJJGNyaXRfZXNjYXBlZCA9IGRvU2xhc2go c3RyX3JlcGxhY2UoYXJyYXkoJ1xcJywnJScsJ18nLCdcJycpLCBhcnJheSgnXFxcXCcsJ1xc JScsJ1xcXycsICdcXFwnJyksICRjcml0KSk7DQoNCgkJLy8gUGVybWl0IHNlYXJjaGluZyBi eSBwcml2aWxlZ2UgbmFtZSAoc29ydCBvZikNCgkJaWYgKCRzZWFyY2hfbWV0aG9kID09ICdw cml2aWxlZ2VzJyAmJiAhaXNfbnVtZXJpYygkY3JpdF9lc2NhcGVkKSkgew0KCQkJJGxldmVs cyA9IGdldF9ncm91cHMoKTsNCgkJCWZvcmVhY2ggKCRsZXZlbHMgYXMgJGlkeCA9PiAkZ3Jv dXApIHsNCgkJCQlpZiAoc3RycG9zKHN0cnRvbG93ZXIoJGdyb3VwKSwgc3RydG9sb3dlcigk Y3JpdF9lc2NhcGVkKSkgIT09IGZhbHNlKSB7DQoJCQkJCSRjcml0X2VzY2FwZWQgPSAkaWR4 Ow0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBQZXJtaXQgPCwgPSwg YW5kID4gb3BlcmF0b3JzIGluIGNvdW50IHNlYXJjaGVzLg0KCQkvLyBudWxsY2hlY2sgaXMg bm90IHJlcXVpcmVkIGZvciBwcml2cyBzZWFyY2hlcyBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBh IHRydWUgMCAod2hlcmVhcyBpbiB0aGUgY29tcHV0ZWQNCgkJLy8gY29sdW1ucyBpdCdzIGVt cHR5L251bGwpDQoJCSRvcGVyYXRvciA9ICc9JzsNCgkJJG51bGxjaGVjayA9ICcnOw0KCQlp ZiAoaW5fYXJyYXkoJHNlYXJjaF9tZXRob2QsICRjb3VudF9jb2x1bW5zKSB8fCAkc2VhcmNo X21ldGhvZCA9PSAncHJpdmlsZWdlcycpIHsNCgkJCXByZWdfbWF0Y2goJy8oWzw9Pl0rKT8o WzAtOV0rKS8nLCAkY3JpdF9lc2NhcGVkLCAkbWF0Y2hlcyk7DQoJCQkkb3BlcmF0b3IgPSAo aXNzZXQoJG1hdGNoZXNbMV0pICYmICRtYXRjaGVzWzFdICE9ICcnKSA/ICRtYXRjaGVzWzFd IDogJz0nOw0KCQkJJGNyaXRfZXNjYXBlZCA9IChpc3NldCgkbWF0Y2hlc1syXSkgJiYgJG1h dGNoZXNbMl0gIT0gJycpID8gJG1hdGNoZXNbMl0gOiAkY3JpdF9lc2NhcGVkOw0KCQkJJGNo YXJfb25lID0gc3Vic3RyKCRvcGVyYXRvciwgMCwgMSk7DQoJCQkkY2hhcl90d28gPSBzdWJz dHIoJG9wZXJhdG9yLCAxLCAxKTsNCgkJCSRudWxsY2hlY2sgPSAoJGNoYXJfb25lID09ICc8 JyB8fCAoJGNoYXJfb25lID09ICc+JyAmJiAkY2hhcl90d28gPT0gJz0nICYmICRjcml0X2Vz Y2FwZWQgPT0gJzAnKSkgPyAnIE9SIElTTlVMTCgnLiRzZWFyY2hfbWV0aG9kLicpJyA6ICcn Ow0KCQl9DQoNCgkJJGNyaXRzcWwgPSBhcnJheSgNCgkJCSdsb2dpbl9uYW1lJyAgICA9PiAi bmFtZSBsaWtlICclJGNyaXRfZXNjYXBlZCUnIiwNCgkJCSdyZWFsX25hbWUnICAgICA9PiAi UmVhbE5hbWUgbGlrZSAnJSRjcml0X2VzY2FwZWQlJyIsDQoJCQknZW1haWwnICAgICAgICAg PT4gImVtYWlsIGxpa2UgJyUkY3JpdF9lc2NhcGVkJSciLA0KCQkJJ3ByaXZpbGVnZXMnICAg ID0+ICJwcml2cyAkb3BlcmF0b3IgJyRjcml0X2VzY2FwZWQnIiwNCgkJCSdhcnRpY2xlX2Nv dW50JyA9PiAiYXJ0aWNsZV9jb3VudCAkb3BlcmF0b3IgJyRjcml0X2VzY2FwZWQnJG51bGxj aGVjayIsDQoJCQknaW1hZ2VfY291bnQnICAgPT4gImltYWdlX2NvdW50ICRvcGVyYXRvciAn JGNyaXRfZXNjYXBlZCckbnVsbGNoZWNrIiwNCgkJCSdmaWxlX2NvdW50JyAgICA9PiAiZmls ZV9jb3VudCAkb3BlcmF0b3IgJyRjcml0X2VzY2FwZWQnJG51bGxjaGVjayIsDQoJCQknbGlu a19jb3VudCcgICAgPT4gImxpbmtfY291bnQgJG9wZXJhdG9yICckY3JpdF9lc2NhcGVkJyRu dWxsY2hlY2siLA0KCQkpOw0KDQoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCRzZWFyY2hfbWV0 aG9kLCAkY3JpdHNxbCkpIHsNCgkJCSRjcml0ZXJpYSA9ICRjcml0c3FsWyRzZWFyY2hfbWV0 aG9kXTsNCgkJCSRsaW1pdCA9IGdldF9wcmVmKCdzbWRfdW1fbWF4X3NlYXJjaF9saW1pdCcs ICRzbWRfdW1fcHJlZnNbJ3NtZF91bV9tYXhfc2VhcmNoX2xpbWl0J11bJ2RlZmF1bHQnXSk7 DQoJCX0gZWxzZSB7DQoJCQkkc2VhcmNoX21ldGhvZCA9ICcnOw0KCQkJJGNyaXQgPSAnJzsN CgkJfQ0KCX0gZWxzZSB7DQoJCSRzZWFyY2hfbWV0aG9kID0gJyc7DQoJCSRjcml0ID0gJyc7 DQoJfQ0KDQoJLy8gU2luY2UgdGhlICpfY291bnQgY29sdW1ucyBhcmUgY29tcHV0ZWQgd2Ug bmVlZCB0byBzb21lIGppZ2dlcnkgcG9rZXJ5IGhlcmUuDQoJLy8gVGh1cywgaWYgd2UncmUg bG9va2luZyBmb3IgY291bnRzIG9mICd6ZXJvJyB0aGUgYWN0dWFsIHNlYXJjaCB2YWx1ZSBz aG91bGQgYmUgaXNudWxsKCkNCglpZiAoaW5fYXJyYXkoJHNlYXJjaF9tZXRob2QsICRjb3Vu dF9jb2x1bW5zKSAmJiAkb3BlcmF0b3IgPT0gJz0nICYmICRjcml0X2VzY2FwZWQgPT0gJzAn KSB7DQoJCSRjcml0ZXJpYSA9ICJJU05VTEwoJHNlYXJjaF9tZXRob2QpIjsNCgl9DQoNCgkv LyBUaGUgZmllbGRzLCBqb2lucyBhbmQgc3ViLXF1ZXJpZXMgdGhhdCBtYWtlIHVwIHRoZSBy ZWFsIGFuZCBjb21wdXRlZCBjb2x1bW5zDQoJJGZpZWxkcyA9ICd0eHUudXNlcl9pZCwgdHh1 Lm5hbWUsIHR4dS5SZWFsTmFtZSwgdHh1LmVtYWlsLCB0eHUucHJpdnMsIHVuaXhfdGltZXN0 YW1wKHR4dS5sYXN0X2FjY2VzcykgYXMgbGFzdF9sb2dpbiwgdHhwLnRvdGFsIEFTIGFydGlj bGVfY291bnQsIHR4aS50b3RhbCBBUyBpbWFnZV9jb3VudCwgdHhmLnRvdGFsIEFTIGZpbGVf Y291bnQsIHR4bC50b3RhbCBBUyBsaW5rX2NvdW50JzsNCgkkY2xhdXNlID0gJyBGUk9NICcu UEZYLid0eHBfdXNlcnMgYXMgdHh1DQoJCUxFRlQgSk9JTiAoU0VMRUNUIEF1dGhvcklELCBj b3VudChJRCkgQVMgdG90YWwgRlJPTSAnLlBGWC4ndGV4dHBhdHRlcm4gR1JPVVAgQlkgQXV0 aG9ySUQpIEFTIHR4cCBPTiB0eHAuQXV0aG9ySUQgPSB0eHUubmFtZQ0KCQlMRUZUIEpPSU4g KFNFTEVDVCBhdXRob3IsIGNvdW50KGlkKSBBUyB0b3RhbCBGUk9NICcuUEZYLid0eHBfaW1h Z2UgR1JPVVAgQlkgYXV0aG9yKSBBUyB0eGkgT04gdHhpLmF1dGhvciA9IHR4dS5uYW1lDQoJ CUxFRlQgSk9JTiAoU0VMRUNUIGF1dGhvciwgY291bnQoaWQpIEFTIHRvdGFsIEZST00gJy5Q RlguJ3R4cF9maWxlIEdST1VQIEJZIGF1dGhvcikgQVMgdHhmIE9OIHR4Zi5hdXRob3IgPSB0 eHUubmFtZQ0KCQlMRUZUIEpPSU4gKFNFTEVDVCBhdXRob3IsIGNvdW50KGlkKSBBUyB0b3Rh bCBGUk9NICcuUEZYLid0eHBfbGluayBHUk9VUCBCWSBhdXRob3IpIEFTIHR4bCBPTiB0eGwu YXV0aG9yID0gdHh1Lm5hbWUnOw0KDQoJLy8gUGVyZm9ybSBhIGNvdW50IG9uIHRoZSByZWxl dmFudCBzZWFyY2ggaXRlbS4gRG9pbmcgYSBjb3VudCgqKSBpcyBhd2t3YXJkIGR1ZSB0byB0 aGUgY29tcHV0ZWQgY29sdW1ucw0KCS8vIHNvIGEgc3RyYWlnaHQgcXVlcnkgaXMgcGVyZm9y bWVkIHdpdGggYSBsb29wIHRvIGluY3JlbWVudCB0aGUgdG90YWwuIGdldFRoaW5nKCkgb3Ig Z2V0Um93cyBmb3Igc29tZSByZWFzb24NCgkvLyBmYWlsZWQgdW5kZXIgY2VydGFpbiBjb25k aXRpb25zDQoJJHRvdGFsID0gMDsNCgkkdG90cnMgPSBzYWZlX3F1ZXJ5KCdTRUxFQ1QgJy4k ZmllbGRzLiRjbGF1c2UuJyBIQVZJTkcgJy4kY3JpdGVyaWEpOw0KCXdoaWxlICgkcm93ID0g bmV4dFJvdygkdG90cnMpKSB7DQoJCSR0b3RhbCsrOw0KCX0NCg0KCSRidG5iYXIgPSAnPHNw YW4gY2xhc3M9InNtZF91bV9idXR0b25zIj4nLiRidG5Vc3IuJGJ0bkdycC4kYnRuUHJ2LiRi dG5QcmYuJzwvc3Bhbj4nOw0KCSRuZXdidG4gPSBoYXNfcHJpdnMoJHNtZF91bV9ldmVudC4n LnVzci5jcmVhdGUnKSA/ICc8YSBjbGFzcz0ibmF2bGluayIgaHJlZj0iP2V2ZW50PScuJHNt ZF91bV9ldmVudC5hLidzdGVwPXNtZF91bV9lZGl0Ij4nIC5zbWRfdW1fZ1R4dCgnc21kX3Vt X25ld191c2VyJykuICc8L2E+JyA6ICcnOw0KDQoJLy8gSW5qZWN0IHN0eWxlcw0KCWVjaG8g JzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+JyAuICRzbWRfdW1fc3R5bGVzWydjb250cm9sLXBh bmVsJ10gLiAnPC9zdHlsZT4nOw0KDQoJZWNobyAnPGRpdiBpZD0iJy4kc21kX3VtX2V2ZW50 LidfY29udHJvbCIgY2xhc3M9InR4cC1jb250cm9sLXBhbmVsIj4nOw0KDQoJaWYgKCR0b3Rh bCA8IDEpIHsNCgkJaWYgKCRjcml0ZXJpYSAhPSAxKSB7DQoJCQllY2hvIG4uc21kX3VtX3Nl YXJjaF9mb3JtKCRjcml0LCAkc2VhcmNoX21ldGhvZCkuJGJ0bmJhci4NCgkJCQluLmdyYWYo Z1R4dCgnbm9fcmVzdWx0c19mb3VuZCcpLCAnIGNsYXNzPSJpbmRpY2F0b3IiJykuJzwvZGl2 Pic7DQoJCX0NCgkJcmV0dXJuOw0KCX0NCg0KCSRsaW1pdCA9IG1heCgkc21kX3VtX2xpc3Rf cGFnZWJ5LCAxNSk7DQoNCglsaXN0KCRwYWdlLCAkb2Zmc2V0LCAkbnVtUGFnZXMpID0gcGFn ZXIoJHRvdGFsLCAkbGltaXQsICRwYWdlKTsNCg0KCWVjaG8gbi5zbWRfdW1fc2VhcmNoX2Zv cm0oJGNyaXQsICRzZWFyY2hfbWV0aG9kKS4kYnRuYmFyLic8L2Rpdj4nOw0KDQoJLy8gUmV0 cmlldmUgdGhlIHVzZXIgaW5mbyBhbmQgcmVsYXRlZCBjb3VudHMNCgkkcnMgPSBzYWZlX3F1 ZXJ5KCdTRUxFQ1QgJy4kZmllbGRzLiRjbGF1c2UuJyBIQVZJTkcgJy4kY3JpdGVyaWEuJyBP UkRFUiBCWSAnLiRzb3J0X3NxbC4nIExJTUlUICcuJG9mZnNldC4nLCAnLiRsaW1pdCk7DQoN CglpZiAoJHJzKSB7DQoJCWVjaG8gbi4nPGRpdiBjbGFzcz0idHhwLWxpc3QiPic7DQoJCWVj aG8gJzxmb3JtIGFjdGlvbj0iaW5kZXgucGhwIiBpZD0ic21kX3VtX2Zvcm0iIG1ldGhvZD0i cG9zdCIgbmFtZT0ibG9uZ2Zvcm0iIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0 KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4nLg0KCQlzdGFydFRhYmxlKCdsaXN0JywgJycsICds aXN0JykuDQoJCW4uJzx0aGVhZD4nLg0KCQl0cih0ZGEoJG5ld2J0biwgJyBjbGFzcz0ibm9s aW5lIicpKS4NCgkJbi50cigNCgkJCWNvbHVtbl9oZWFkKCdsb2dpbl9uYW1lJywgJ25hbWUn LCAnc21kX3VtJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCwg KCgnbmFtZScgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKS4nbmFtZSBsb2dpbi1uYW1lJyku DQoJCQljb2x1bW5faGVhZCgncmVhbF9uYW1lJywgJ3JlYWxfbmFtZScsICdzbWRfdW0nLCB0 cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAoKCdyZWFsX25hbWUn ID09ICRzb3J0KSA/ICIkZGlyICIgOiAnJykuJ25hbWUgcmVhbC1uYW1lJykuDQoJCQljb2x1 bW5faGVhZCgnZW1haWwnLCAnZW1haWwnLCAnc21kX3VtJywgdHJ1ZSwgJHN3aXRjaF9kaXIs ICRjcml0LCAkc2VhcmNoX21ldGhvZCwgKCgnZW1haWwnID09ICRzb3J0KSA/ICIkZGlyICIg OiAnJykuJ2VtYWlsJykuDQoJCQljb2x1bW5faGVhZCgncHJpdmlsZWdlcycsICdwcml2cycs ICdzbWRfdW0nLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kLCAo KCdwcml2cycgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKS4ncHJpdnMnKS4NCgkJCWNvbHVt bl9oZWFkKCdsYXN0X2xvZ2luJywgJ2xhc3RfbG9naW4nLCAnc21kX3VtJywgdHJ1ZSwgJHN3 aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21ldGhvZCwgKCgnbGFzdF9sb2dpbicgPT0gJHNv cnQpID8gIiRkaXIgIiA6ICcnKS4nZGF0ZSBsYXN0LWxvZ2luIG1vZGlmaWVkJykuDQoJCQlj b2x1bW5faGVhZChzbWRfdW1fZ1R4dCgnc21kX3VtX2FydGljbGVfY291bnQnKSwgJ2FydGlj bGVfY291bnQnLCAnc21kX3VtJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNo X21ldGhvZCwgKCgnYXJ0aWNsZV9jb3VudCcgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKSku DQoJCQljb2x1bW5faGVhZChzbWRfdW1fZ1R4dCgnc21kX3VtX2ltYWdlX2NvdW50JyksICdp bWFnZV9jb3VudCcsICdzbWRfdW0nLCB0cnVlLCAkc3dpdGNoX2RpciwgJGNyaXQsICRzZWFy Y2hfbWV0aG9kLCAoKCdpbWFnZV9jb3VudCcgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKSku DQoJCQljb2x1bW5faGVhZChzbWRfdW1fZ1R4dCgnc21kX3VtX2ZpbGVfY291bnQnKSwgJ2Zp bGVfY291bnQnLCAnc21kX3VtJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNo X21ldGhvZCwgKCgnZmlsZV9jb3VudCcgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKSkuDQoJ CQljb2x1bW5faGVhZChzbWRfdW1fZ1R4dCgnc21kX3VtX2xpbmtfY291bnQnKSwgJ2xpbmtf Y291bnQnLCAnc21kX3VtJywgdHJ1ZSwgJHN3aXRjaF9kaXIsICRjcml0LCAkc2VhcmNoX21l dGhvZCwgKCgnbGlua19jb3VudCcgPT0gJHNvcnQpID8gIiRkaXIgIiA6ICcnKSkuDQoJCQlo Q2VsbCgnJywgJycsICcgY2xhc3M9Im11bHRpLWVkaXQiJykNCgkJKS4NCgkJbi4nPC90aGVh ZD4nOw0KDQoJCSRhc3NldHMgPSBzYWZlX2NvbHVtbignbmFtZScsICd0eHBfdXNlcnMnLCAn MT0xJyk7DQoJCSRhc3NpZ25fYXNzZXRzID0gJGFzc2V0cyA/ICc8bGFiZWwgZm9yPSJhc3Np Z25fYXNzZXRzIj4nLmFkZHNsYXNoZXMoZ1R4dCgnYXNzaWduX2Fzc2V0c190bycpKS5zcC4n PC9sYWJlbD48c3Bhbj4nLnN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICctJyksIGFycmF5KCcn LCAnJiM0NTsnKSwgc3RyX3JlcGxhY2UoJzwvJywgJzxcLycsIGFkZHNsYXNoZXMoc2VsZWN0 SW5wdXQoJ2Fzc2lnbl9hc3NldHMnLCAkYXNzZXRzLCAnJywgdHJ1ZSkpKSkuJzxcL3NwYW4+ JyA6ICcnOw0KCQkkcGVybWl0dGVkX3VzZXJzID0gc21kX3VtX2dldF9ncm91cHMoMSk7DQoJ CSRwcml2bGlzdCA9IHN0cl9yZXBsYWNlKGFycmF5KCJcbiIsICctJyksIGFycmF5KCcnLCAn JiM0NTsnKSwgc3RyX3JlcGxhY2UoJzwvJywgJzxcLycsIGFkZHNsYXNoZXMoc2VsZWN0SW5w dXQoJ3ByaXZzJywgJHBlcm1pdHRlZF91c2VycywgJycpKSkpOw0KDQoJCSR0Zm9vdCA9IG4u Jzx0Zm9vdD4nLnRyKA0KCQkJdGRhKA0KCQkJCSgoaGFzX3ByaXZzKCRzbWRfdW1fZXZlbnQu Jy51c3IuZWRpdCcpKQ0KCQkJCQk/IHNlbGVjdF9idXR0b25zKCkuDQoJCQkJCXNtZF91bV9t dWx0aWVkaXRfZm9ybSgkcGFnZSwgJHNvcnQsICRkaXIsICRjcml0LCAkc2VhcmNoX21ldGhv ZCkuJzxwIGlkPSJzbWRfdW1fanMiPjwvcD4nDQoJCQkJCTogJycpDQoJCQksICcgY2xhc3M9 Im11bHRpLWVkaXQiIGNvbHNwYW49IjEwIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IGJv cmRlcjogbm9uZTsiJykNCgkJKS5uLic8L3Rmb290Pic7DQoNCgkJZWNobyAkdGZvb3Q7DQoJ CWVjaG8gPDw8RU9KUw0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KalF1ZXJ5 KGZ1bmN0aW9uKCkgew0KCWpRdWVyeSgnI3dpdGhzZWxlY3RlZCcpLmF0dHIoJ29uY2hhbmdl JywgJycpLmNoYW5nZShmdW5jdGlvbigpIHsNCgkJc3dpdGNoKGpRdWVyeSh0aGlzKS52YWwo KSkgew0KCQkJY2FzZSAiY2hhbmdlcHJpdmlsZWdlIjoNCgkJCQlqUXVlcnkoJyNzbWRfdW1f anMnKS5lbXB0eSgpLmFwcGVuZCgnPHNwYW4+eyRwcml2bGlzdH08L3NwYW4+Jyk7DQoJCQli cmVhazsNCgkJCWNhc2UgImRlbGV0ZSI6DQoJCQkJalF1ZXJ5KCcjc21kX3VtX2pzJykuZW1w dHkoKS5hcHBlbmQoJ3skYXNzaWduX2Fzc2V0c30nKTsNCgkJCWJyZWFrOw0KCQkJZGVmYXVs dDoNCgkJCQlqUXVlcnkoJyNzbWRfdW1fanMnKS5lbXB0eSgpOw0KCQkJYnJlYWs7DQoJCX0N Cgl9KTsNCn0pOw0KPC9zY3JpcHQ+DQpFT0pTOw0KCQllY2hvICc8dGJvZHk+JzsNCg0KCQkk Y3RyID0gMTsNCgkJJGN1cnJfcHJpdiA9IHNhZmVfZmllbGQoJ3ByaXZzJywgJ3R4cF91c2Vy cycsICJuYW1lID0gJyIgLmRvU2xhc2goJHR4cF91c2VyKS4gIiciKTsNCg0KCQl3aGlsZSAo JHJvdyA9IG5leHRSb3coJHJzKSkgew0KCQkJZXh0cmFjdChkb1NwZWNpYWwoJHJvdykpOw0K DQoJCQkkcGVybWl0dGVkID0gc21kX3VtX2Nhbl9lZGl0KCRjdXJyX3ByaXYsICRuYW1lLCAk cHJpdnMpOw0KDQoJCQllY2hvIHRyKA0KCQkJCXRkKCAoKCRwZXJtaXR0ZWQpID8gZUxpbmso JHNtZF91bV9ldmVudCwgJ3NtZF91bV9lZGl0JywgJ3VzZXJfaWQnLCAkdXNlcl9pZCwgJG5h bWUpIDogJG5hbWUpLCAnJywgJ25hbWUgbG9naW4tbmFtZSBhY3Rpb25zJykuDQoJCQkJdGQo JFJlYWxOYW1lLCAnJywgJ25hbWUgcmVhbC1uYW1lJykuDQoJCQkJdGQoJzxhIGhyZWY9Im1h aWx0bzonLiRlbWFpbC4nIj4nLiRlbWFpbC4nPC9hPicsICcnLCAnZW1haWwnKS4NCgkJCQl0 ZChzbWRfdW1fZ2V0X3ByaXZfbGV2ZWwoJHByaXZzKSwgJycsICdwcml2cycpLg0KCQkJCXRk KCgkbGFzdF9sb2dpbiA/IHNhZmVfc3RyZnRpbWUoJyViJiMxNjA7JVknLCAkbGFzdF9sb2dp bikgOiAnJyksICcnLCAnZGF0ZSBsYXN0LWxvZ2luIG1vZGlmaWVkJykuDQoJCQkJdGQoKCRh cnRpY2xlX2NvdW50KSA/IGVMaW5rKCdsaXN0JywgJ2xpc3QnLCAnc2VhcmNoX21ldGhvZCcs ICdhdXRob3InLCAkYXJ0aWNsZV9jb3VudCwgJ2NyaXQnLCAkbmFtZSkgOiAnMCcpLg0KCQkJ CXRkKCgkaW1hZ2VfY291bnQpID8gZUxpbmsoJ2ltYWdlJywgJ2ltYWdlX2xpc3QnLCAnc2Vh cmNoX21ldGhvZCcsICdhdXRob3InLCAkaW1hZ2VfY291bnQsICdjcml0JywgJG5hbWUpIDog JzAnKS4NCgkJCQl0ZCgoJGZpbGVfY291bnQpID8gZUxpbmsoJ2ZpbGUnLCAnZmlsZV9saXN0 JywgJ3NlYXJjaF9tZXRob2QnLCAnYXV0aG9yJywgJGZpbGVfY291bnQsICdjcml0JywgJG5h bWUpIDogJzAnKS4NCgkJCQl0ZCgoJGxpbmtfY291bnQpID8gZUxpbmsoJ2xpbmsnLCAnbGlu a19lZGl0JywgJ3NlYXJjaF9tZXRob2QnLCAnYXV0aG9yJywgJGxpbmtfY291bnQsICdjcml0 JywgJG5hbWUpIDogJzAnKS4NCgkJCQl0ZCgoKGhhc19wcml2cygkc21kX3VtX2V2ZW50Licu dXNyLmVkaXQnKSAmJiAkdHhwX3VzZXIgIT0gJHJvd1snbmFtZSddICYmIGFycmF5X2tleV9l eGlzdHMoJHByaXZzLCAkcGVybWl0dGVkX3VzZXJzKSkgPyBmSW5wdXQoJ2NoZWNrYm94Jywg J3NlbGVjdGVkW10nLCAkcm93WyduYW1lJ10sICdjaGVja2JveCcpIDogJycpLCAnJywgJ211 bHRpLWVkaXQnKQ0KCQkJLCAnIGNsYXNzPSInLigoJGN0ciUyID09IDApID8gJ2V2ZW4nIDog J29kZCcpLiciJw0KCQkJKTsNCg0KCQkJJGN0cisrOw0KCQl9DQoNCgkJZWNobyAnPC90Ym9k eT4nLg0KCQluLmVuZFRhYmxlKCkuDQoJCW4udElucHV0KCkuDQoJCW4uJzwvZm9ybT4nLg0K DQoJCW4uJzxkaXYgaWQ9InVzZXJzX25hdmlnYXRpb24iIGNsYXNzPSJ0eHAtbmF2aWdhdGlv biI+Jy4NCgkJbmF2X2Zvcm0oJ3NtZF91bScsICRwYWdlLCAkbnVtUGFnZXMsICRzb3J0LCAk ZGlyLCAkY3JpdCwgJHNlYXJjaF9tZXRob2QsICR0b3RhbCwgJGxpbWl0KS4NCg0KCQlwYWdl YnlfZm9ybSgnc21kX3VtJywgJHNtZF91bV9saXN0X3BhZ2VieSkuDQoJCW4uJzwvZGl2Picu bi5zbWRfdW1fYWN0aXZlX3VzZXJzKCkuJzwvZGl2Pic7DQoJfQ0KfQ0KDQovLyBDYW4gdGhp cyBsb2dnZWQtaW4gdXNlciBlZGl0IHRoZSBnaXZlbiB1c2VyIGFjY291bnQ/DQpmdW5jdGlv biBzbWRfdW1fY2FuX2VkaXQoJGN1cnJfcHJpdiwgJG5hbWUsICRwcml2cykgew0KCWdsb2Jh bCAkc21kX3VtX2V2ZW50LCAkc21kX3VtX3ByZWZzLCAkdHhwX3VzZXI7DQoNCgkkcGVybWl0 dGVkID0gZmFsc2U7IC8vIEFzc3VtZSBubyBlZGl0aW5nIHJpZ2h0cyB1bmxlc3NzIG90aGVy d2lzZSBzdGF0ZWQNCg0KCSR0aWVyZWQgPSBnZXRfcHJlZignc21kX3VtX2hpZXJhcmNoaWNh bF9ncm91cHMnLCAkc21kX3VtX3ByZWZzWydzbWRfdW1faGllcmFyY2hpY2FsX2dyb3Vwcydd WydkZWZhdWx0J10pOw0KCSRwcm90ZWN0ZWQgPSBnZXRfcHJlZignc21kX3VtX2FkbWluX2dy b3VwJywgJHNtZF91bV9wcmVmc1snc21kX3VtX2FkbWluX2dyb3VwJ11bJ2RlZmF1bHQnXSk7 DQoNCgkvLyBGb3Igc29tZSByZWFzb24gY2hlY2tpbmcgKCRwcml2cyAhPSAnJykgZG9lc24n dCB3b3JrICpzaHJ1ZyoNCglpZiAoICgkbmFtZSAhPSAnJykgJiYgKCRwcml2cyA9PSAwIHx8 ICRwcml2cykgKSB7DQoJCSRwZXJtaXR0ZWQgPSBoYXNfcHJpdnMoJHNtZF91bV9ldmVudC4n LnVzci5lZGl0Lm93bicpICYmICgkbmFtZSA9PSAkdHhwX3VzZXIpOw0KCQkkY2FuX2VkaXQg PSBoYXNfcHJpdnMoJHNtZF91bV9ldmVudC4nLnVzci5lZGl0Jyk7DQoJCWlmICgkY2FuX2Vk aXQpIHsNCgkJCSRwZXJtaXR0ZWQgfD0gJGNhbl9lZGl0Ow0KCQkJaWYgKCR0aWVyZWQpIHsN CgkJCQkkcGVybWl0dGVkICY9ICgoJHByaXZzID49ICRjdXJyX3ByaXYpIHx8ICgkcHJpdnMg PT0gMCkpOw0KCQkJfQ0KCQkJaWYgKCRwcm90ZWN0ZWQpIHsNCgkJCQkkcGVybWl0dGVkICY9 ICgoJHByaXZzICE9ICRwcm90ZWN0ZWQpIHx8ICgkY3Vycl9wcml2ID09ICRwcm90ZWN0ZWQp KTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXJldHVybiAkcGVybWl0dGVkOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEVkaXQgYSBzaW5nbGUgVXNlcg0KZnVuY3Rpb24g c21kX3VtX2VkaXQoJG1zZz0nJykgew0KCWdsb2JhbCAkdHhwX3VzZXIsICRzbWRfdW1fZXZl bnQsICRzbWRfdW1fc3R5bGVzOw0KDQoJJHZhcnMgPSBhcnJheSgndXNlcl9pZCcsICduYW1l JywgJ1JlYWxOYW1lJywgJ2VtYWlsJywgJ3ByaXZzJyk7DQoJZXh0cmFjdChncHNhKCR2YXJz KSk7DQoNCgkkcnMgPSBhcnJheSgpOw0KCSRjdXJyX3ByaXYgPSBzYWZlX2ZpZWxkKCdwcml2 cycsICd0eHBfdXNlcnMnLCAibmFtZSA9ICciIC5kb1NsYXNoKCR0eHBfdXNlcikuICInIik7 DQoNCglpZiAoJHVzZXJfaWQpIHsNCgkJJHVzZXJfaWQgPSBhc3NlcnRfaW50KCR1c2VyX2lk KTsNCgkJJHJzID0gc2FmZV9yb3coJyonLCAndHhwX3VzZXJzJywgInVzZXJfaWQgPSAkdXNl cl9pZCIpOw0KCQlleHRyYWN0KCRycyk7DQoJfSBlbHNlIGlmICghaGFzX3ByaXZzKCRzbWRf dW1fZXZlbnQuJy51c3IuY3JlYXRlJykpIHsNCgkJLy8gSWYgdGhlIGN1cnJlbnQgdXNlciBk b2Vzbid0IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gY3JlYXRlIG5ldyB1c2Vycw0KCQkv LyB0aGVuIHRoaXMgRWRpdCByZXF1ZXN0IHdpdGhvdXQgdXNlcl9pZCBpcyBhIHNlbGYtZWRp dA0KCQkkcnMgPSBzYWZlX3JvdygnKicsICd0eHBfdXNlcnMnLCAibmFtZSA9ICciIC5kb1Ns YXNoKCR0eHBfdXNlcikuICInIik7DQoJCWV4dHJhY3QoJHJzKTsNCgl9DQoNCgkvLyBDaGVj ayBmb3IgZWRpdCAvIGNyZWF0aW9uIHJpZ2h0cw0KCSRwZXJtaXR0ZWQgPSAoJHVzZXJfaWQp ID8gc21kX3VtX2Nhbl9lZGl0KCRjdXJyX3ByaXYsICRuYW1lLCAkcHJpdnMpIDogaGFzX3By aXZzKCRzbWRfdW1fZXZlbnQuJy51c3IuY3JlYXRlJyk7DQoNCglpZiAoISRwZXJtaXR0ZWQp DQoJCWV4aXQocGFnZVRvcCgnUmVzdHJpY3RlZCcpLic8cCBzdHlsZT0ibWFyZ2luLXRvcDoz ZW07dGV4dC1hbGlnbjpjZW50ZXIiPicuDQoJCQlnVHh0KCdyZXN0cmljdGVkX2FyZWEnKS4n PC9wPicpOw0KDQoJJGNhcHRpb24gPSBnVHh0KCgkdXNlcl9pZCkgPyAnZWRpdF9hdXRob3In IDogJ2FkZF9uZXdfYXV0aG9yJyk7DQoNCglwYWdldG9wKHNtZF91bV9nVHh0KCdzbWRfdW1f dGFiX25hbWUnKS4nICZyYXF1bzsgJy5zbWRfdW1fZ1R4dCgnc21kX3VtX3Vzcl9sYmwnKSwg JG1zZyk7DQoJZXh0cmFjdChzbWRfdW1fYnV0dG9ucygndXNyJykpOw0KDQoJJGJ0bmJhciA9 ICc8c3BhbiBjbGFzcz0ic21kX3VtX2J1dHRvbnMiPicuJGJ0blVzci4kYnRuR3JwLiRidG5Q cnYuJGJ0blByZi4nPC9zcGFuPic7DQoNCgkvLyBJbmplY3Qgc3R5bGVzDQoJZWNobyAnPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4nIC4gJHNtZF91bV9zdHlsZXNbJ2NvbnRyb2wtcGFuZWwn XSAuICc8L3N0eWxlPic7DQoNCgllY2hvICc8ZGl2IGlkPSInLiRzbWRfdW1fZXZlbnQuJ19j b250cm9sIiBjbGFzcz0idHhwLWNvbnRyb2wtcGFuZWwiPicNCgkJLiAnPHNwYW4gY2xhc3M9 InNtZF91bV90aXRsZSI+Jy4kY2FwdGlvbi4nPC9zcGFuPicgLiAkYnRuYmFyIC4gJzwvZGl2 Pic7DQoNCgllY2hvICc8ZGl2IGlkPSInLiRzbWRfdW1fZXZlbnQuJ19jb250YWluZXIiIGNs YXNzPSJ0eHAtZWRpdCI+JzsNCgllY2hvIGZvcm0oDQoNCgkJc3RhcnRUYWJsZSgnZWRpdCcs ICcnLCAnZWRpdC1wYW5lJykuDQoNCgkJdHIoDQoJCQlmTGFiZWxDZWxsKCdsb2dpbl9uYW1l JywgJycsICduYW1lJykuDQoJCQkoJHVzZXJfaWQgPyB0ZChzdHJvbmcoJG5hbWUpKSA6IGZJ bnB1dENlbGwoJ25hbWUnLCAkbmFtZSwgJycsIDMwKSkNCgkJLCAnIGNsYXNzPSJuYW1lIGxv Z2luLW5hbWUiJykNCg0KCQkudHIoDQoJCQlmTGFiZWxDZWxsKCdyZWFsX25hbWUnLCAnJywg J1JlYWxOYW1lJykuDQoJCQlmSW5wdXRDZWxsKCdSZWFsTmFtZScsICRSZWFsTmFtZSwgJycs IDMwKQ0KCQksICcgY2xhc3M9Im5hbWUgcmVhbC1uYW1lIicpDQoNCgkJLnRyKA0KCQkJZkxh YmVsQ2VsbCgnZW1haWwnLCAnJywgJ2VtYWlsJykuDQoJCQlmSW5wdXRDZWxsKCdlbWFpbCcs ICRlbWFpbCwgJycsIDMwKQ0KCQksICcgY2xhc3M9ImVtYWlsIicpDQoNCgkJLnRyKA0KCQkJ ZkxhYmVsQ2VsbCgncHJpdmlsZWdlcycsICcnLCAncHJpdnMnKS4NCgkJCXRkKA0KCQkJCSgk dHhwX3VzZXIgIT0gJG5hbWUNCgkJCQkJPyBzZWxlY3RJbnB1dCgncHJpdnMnLCBzbWRfdW1f Z2V0X2dyb3VwcygxKSwgJHByaXZzKQ0KCQkJCQk6IGhJbnB1dCgncHJpdnMnLCAkcHJpdnMp LnN0cm9uZyhzbWRfdW1fZ2V0X3ByaXZfbGV2ZWwoJHByaXZzKSkNCgkJCQkpDQoJCQkJLnNw LnBvcEhlbHAoJ2Fib3V0X3ByaXZpbGVnZXMnKQ0KCQkJKQ0KCQksICcgY2xhc3M9InByaXZz IicpDQoNCgkJLnBsdWdnYWJsZV91aSgnYXV0aG9yX3VpJywgJ2V4dGVuZF9kZXRhaWxfZm9y bScsICcnLCAkcnMpDQoNCgkJLnRyKA0KCQkJdGQoKQ0KCQkJLnRkKA0KCQkJCWZJbnB1dCgn c3VibWl0JywgJycsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKS4oJHVzZXJfaWQgPyAnJyA6 IHNwLnBvcEhlbHAoJ2FkZF9uZXdfYXV0aG9yJykpDQoJCQkpDQoJCSkNCg0KCQkuZW5kVGFi bGUoKQ0KDQoJCS5lSW5wdXQoJHNtZF91bV9ldmVudCkuDQoJCSgkdXNlcl9pZCA/IGhJbnB1 dCgndXNlcl9pZCcsICR1c2VyX2lkKS5zSW5wdXQoJ3NtZF91bV9zYXZlJykgOiBzSW5wdXQo J3NtZF91bV9zYXZlX25ldycpKQ0KCSwgJycsICcnLCAncG9zdCcsICdlZGl0LWZvcm0nLCAn JywgJ3VzZXJfZWRpdCcpOw0KCWVjaG8gc21kX3VtX2NoYW5nZV9wYXNzX2Zvcm0oJG5hbWUs ICR1c2VyX2lkKTsNCgllY2hvICc8L2Rpdj4nOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCi8vIFZpcnR1YWxseSBjbG9uZWQgZnJvbSBBZG1pbi0+VXNlcnMNCmZ1bmN0 aW9uIHNtZF91bV9zYXZlKCkgew0KCWdsb2JhbCAkc21kX3VtX2V2ZW50LCAkdHhwX3VzZXI7 DQoNCglleHRyYWN0KGRvU2xhc2gocHNhKGFycmF5KCdwcml2cycsICd1c2VyX2lkJywgJ1Jl YWxOYW1lJywgJ2VtYWlsJykpKSk7DQoJJHByaXZzICAgPSBhc3NlcnRfaW50KCRwcml2cyk7 DQoJJHVzZXJfaWQgPSBhc3NlcnRfaW50KCR1c2VyX2lkKTsNCgkkbmFtZSA9IHNhZmVfZmll bGQoJ25hbWUnLCAndHhwX3VzZXJzJywgInVzZXJfaWQgPSAkdXNlcl9pZCIpOw0KCSRjdXJy X3ByaXYgPSBzYWZlX2ZpZWxkKCdwcml2cycsICd0eHBfdXNlcnMnLCAibmFtZSA9ICciIC5k b1NsYXNoKCR0eHBfdXNlcikuICInIik7DQoNCgkvLyBDaGVjayBmb3IgaGFja2luZyBhdHRl bXB0cw0KCSRwZXJtaXR0ZWQgPSBzbWRfdW1fY2FuX2VkaXQoJGN1cnJfcHJpdiwgJG5hbWUs ICRwcml2cyk7DQoNCglpZiAoISRwZXJtaXR0ZWQpDQoJCWV4aXQocGFnZVRvcCgnUmVzdHJp Y3RlZCcpLic8cCBzdHlsZT0ibWFyZ2luLXRvcDozZW07dGV4dC1hbGlnbjpjZW50ZXIiPicu DQoJCQlnVHh0KCdyZXN0cmljdGVkX2FyZWEnKS4nPC9wPicpOw0KDQoJaWYgKCFpc192YWxp ZF9lbWFpbCgkZW1haWwpKSB7DQoJCXNtZF91bV9lZGl0KGFycmF5KGdUeHQoJ2VtYWlsX3Jl cXVpcmVkJyksIEVfRVJST1IpKTsNCgkJcmV0dXJuOw0KCX0NCg0KCSRycyA9IHNhZmVfdXBk YXRlKCd0eHBfdXNlcnMnLCAiDQoJCXByaXZzICAgID0gJHByaXZzLA0KCQlSZWFsTmFtZSA9 ICckUmVhbE5hbWUnLA0KCQllbWFpbCAgICA9ICckZW1haWwnIiwNCgkJInVzZXJfaWQgPSAk dXNlcl9pZCINCgkpOw0KDQoJaWYgKCRycykgew0KCQkkbXNnID0gZ1R4dCgnYXV0aG9yX3Vw ZGF0ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkUmVhbE5hbWUpKTsNCgl9IGVsc2Ugew0KCQkk bXNnID0gJyc7DQoJfQ0KDQoJJHNtZF91bV9ldmVudCgkbXNnKTsNCn0NCg0KLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQovLyBWaXJ0dWFsbHkgY2xvbmVkIGZyb20gQWRtaW4tPlVz ZXJzDQpmdW5jdGlvbiBzbWRfdW1fc2F2ZV9uZXcoKSB7DQoJZ2xvYmFsICRzbWRfdW1fZXZl bnQsICRzbWRfdW1fcHJlZnM7DQoNCglyZXF1aXJlX3ByaXZzKCRzbWRfdW1fZXZlbnQuJy51 c3IuY3JlYXRlJyk7DQoNCglleHRyYWN0KGRvU2xhc2gocHNhKGFycmF5KCdwcml2cycsICdu YW1lJywgJ2VtYWlsJywgJ1JlYWxOYW1lJykpKSk7DQoNCgkkcHJpdnMgID0gYXNzZXJ0X2lu dCgkcHJpdnMpOw0KCSRsZW5ndGggPSBmdW5jdGlvbl9leGlzdHMoJ21iX3N0cmxlbicpID8g bWJfc3RybGVuKCRuYW1lLCAnOGJpdCcpIDogc3RybGVuKCRuYW1lKTsNCg0KCWlmICgkbmFt ZSBhbmQgJGxlbmd0aCA8PSA2NCBhbmQgaXNfdmFsaWRfZW1haWwoJGVtYWlsKSkgew0KCQkk ZXhpc3RzID0gc2FmZV9maWVsZCgnbmFtZScsICd0eHBfdXNlcnMnLCAibmFtZSA9ICciIC4k bmFtZS4gIiciKTsNCg0KCQlpZiAoJGV4aXN0cykgew0KCQkJc21kX3VtX2VkaXQoYXJyYXko Z1R4dCgnYXV0aG9yX2FscmVhZHlfZXhpc3RzJywgYXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUp KSwgRV9FUlJPUikpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJJHBhc3NfbGVuID0gZ2V0X3By ZWYoJ3NtZF91bV9wYXNzX2xlbmd0aCcsICRzbWRfdW1fcHJlZnNbJ3NtZF91bV9wYXNzX2xl bmd0aCddWydkZWZhdWx0J10pOw0KCQkkcGFzc3dvcmQgPSBnZW5lcmF0ZV9wYXNzd29yZCgk cGFzc19sZW4pOw0KCQkkaGFzaCA9IGRvU2xhc2godHhwX2hhc2hfcGFzc3dvcmQoJHBhc3N3 b3JkKSk7DQoJCSRub25jZSA9IGRvU2xhc2gobWQ1KHVuaXFpZChtdF9yYW5kKCksIFRSVUUp KSk7DQoNCgkJJHJzID0gc2FmZV9pbnNlcnQoJ3R4cF91c2VycycsICINCgkJCXByaXZzICAg ID0gJHByaXZzLA0KCQkJbmFtZSAgICAgPSAnJG5hbWUnLA0KCQkJZW1haWwgICAgPSAnJGVt YWlsJywNCgkJCVJlYWxOYW1lID0gJyRSZWFsTmFtZScsDQoJCQlub25jZSAgICA9ICckbm9u Y2UnLA0KCQkJcGFzcyAgICAgPSAnJGhhc2gnDQoJCSIpOw0KDQoJCWlmICgkcnMpIHsNCgkJ CS8vIFRPRE86IGNvbnNpZGVyIGNsb25pbmcgc2VuZF9wYXNzd29yZCgpIGJlY2F1c2Ugb25s eSBwZW9wbGUgd2l0aCBhZG1pbi5lZGl0IGNhbiBydW4gaXQgKGkuZS4gUHVibGlzaGVycykN CgkJCXNlbmRfcGFzc3dvcmQoJFJlYWxOYW1lLCAkbmFtZSwgJGVtYWlsLCAkcGFzc3dvcmQp Ow0KCQkJJG1zZyA9IGdUeHQoJ3Bhc3N3b3JkX3NlbnRfdG8nKS5zcC4kZW1haWw7DQoJCQkk c21kX3VtX2V2ZW50KCRtc2cpOw0KCQl9IGVsc2Ugew0KCQkJJG1zZyA9IGFycmF5KGdUeHQo J2Vycm9yX2FkZGluZ19uZXdfYXV0aG9yJyksIEVfRVJST1IpOw0KCQkJc21kX3VtX2VkaXQo JG1zZyk7DQoJCX0NCgl9IGVsc2Ugew0KCQkkbXNnID0gYXJyYXkoZ1R4dCgnZXJyb3JfYWRk aW5nX25ld19hdXRob3InKSwgRV9FUlJPUik7DQoJCXNtZF91bV9lZGl0KCRtc2cpOw0KCX0N Cg0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIEdyb3VwIG1hbmFnZW1l bnQgcGFuZWwNCmZ1bmN0aW9uIHNtZF91bV9ncm91cHMoJG1zZz0nJykgew0KCWdsb2JhbCAk c21kX3VtX2V2ZW50LCAkdHhwX3VzZXIsICRzbWRfdW1fc3R5bGVzLCAkdHhwX2dyb3Vwcywg JHR4cF9wZXJtaXNzaW9uczsNCg0KCXJlcXVpcmVfcHJpdnMoJHNtZF91bV9ldmVudC4nLmdy cCcpOw0KDQoJaWYgKCFzbWRfdW1fdGFibGVfZXhpc3QoKSkgew0KCQlzbWRfdW1fdGFibGVf aW5zdGFsbCgwKTsNCgl9DQoNCgkvLyBIYW5kbGUgYW55IGZvcm0gYWN0aW9ucw0KCWlmIChw cygnc21kX3VtX2dyb3VwX3NhdmUnKSkgew0KCQkkZXhjbHVkZWQgPSBzbWRfdW1fZ2V0X2dy b3VwcygwKTsNCgkJJGlkcyA9IHBzKCdzbWRfdW1fZ3JvdXBfaWQnKTsNCgkJJG5hbWVzID0g cHMoJ3NtZF91bV9ncm91cF9uYW1lJyk7DQoJCSR0aXRsZXMgPSBwcygnc21kX3VtX2dyb3Vw X3RpdGxlJyk7DQoNCgkJZm9yZWFjaCgkaWRzIGFzICRpZHggPT4gJGlkKSB7DQoJCQkkdGl0 bGUgPSAkdGl0bGVzWyRpZHhdOw0KCQkJJG5hbWUgPSBzdHJ0b2xvd2VyKHNhbml0aXplRm9y VXJsKCRuYW1lc1skaWR4XSkpOw0KCQkJLy8gQ2FuJ3QgY3JlYXRlIGR1cGxpY2F0ZSB0eXBl cw0KCQkJaWYgKCFpbl9hcnJheSgkbmFtZSwgJGV4Y2x1ZGVkKSkgew0KCQkJCXNhZmVfdXBk YXRlKFNNRF9VTV9HUk9VUFMsICJuYW1lPSciIC4gZG9TbGFzaCgkbmFtZSkgLiAiJyIsICJp ZD0nIiAuIGRvU2xhc2goJGlkKSAuICInIik7DQoJCQl9DQoJCQlzbWRfdW1fdXBzZXJ0X2xh bmcoJHRpdGxlLCAkbmFtZSk7DQoJCX0NCg0KCQkkbXNnID0gc21kX3VtX2dUeHQoJ3NtZF91 bV9ncnBfc2F2ZWQnKTsNCg0KCX0gZWxzZSBpZiAocHMoJ3NtZF91bV9ncm91cF9hZGQnKSkg ew0KCQkkdGl0bGUgPSBwcygnc21kX3VtX25ld19ncnAnKTsNCgkJJG5hbWUgPSBwcygnc21k X3VtX25ld19ncnBfbmFtZScpOw0KCQkkbmFtZSA9ICgkbmFtZSA9PSAnJykgPyBzdHJ0b2xv d2VyKHNhbml0aXplRm9yVXJsKCR0aXRsZSkpIDogJG5hbWU7DQoJCWlmICgkbmFtZSkgew0K CQkJJGV4aXN0cyA9IHNhZmVfZmllbGQoJ2lkJywgU01EX1VNX0dST1VQUywgIm5hbWU9JyIu ZG9TbGFzaCgkbmFtZSkuIiciKTsNCgkJCWlmICgkZXhpc3RzKSB7DQoJCQkJJG1zZyA9IGFy cmF5KHNtZF91bV9nVHh0KCdzbWRfdW1fZ3JwX2V4aXN0cycsIGFycmF5KCd7aWR9JyA9PiAk ZXhpc3RzKSksIEVfVVNFUl9XQVJOSU5HKTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gSXQncyBu b3QgYXRvbWljIGJ1dCBpdCdsbCBkbywgZ2l2ZW4gdGhhdDoNCgkJCQkvLyAgYSkgbm9ybWFs bHkgb25seSBvbmUgcGVyc29uIGFkbWluaXN0ZXJzIHRoaXMgcGx1Z2luDQoJCQkJLy8gIGIp IGdyb3VwcyBhcmUgYWRkZWQgb25lIGF0IGEgdGltZQ0KCQkJCSRjdXJyX21heCA9IHNhZmVf ZmllbGQoIk1BWChpZCkiLCBTTURfVU1fR1JPVVBTLCAnMT0xJyk7DQoJCQkJJG5ld19wcml2 ID0gKCRjdXJyX21heCArIDEpOw0KCQkJCXNhZmVfaW5zZXJ0KFNNRF9VTV9HUk9VUFMsICJp ZD0nIiAuICRuZXdfcHJpdiAuICInLCBuYW1lPSciIC4gZG9TbGFzaCgkbmFtZSkgLiAiJyIp Ow0KCQkJCXNtZF91bV91cHNlcnRfbGFuZygkdGl0bGUsICRuYW1lKTsNCg0KCQkJCSRiYXNl ZF9vbiA9IHBzKCdzbWRfdW1fbmV3X2dycF9iYXNlZF9vbicpOw0KCQkJCWlmICgkYmFzZWRf b24gIT0gJycpIHsNCgkJCQkJYXNzZXJ0X2ludCgkYmFzZWRfb24pOw0KCQkJCQkvLyBDYW4n dCByZWx5IG9uIHRoZSBwcml2cyBiZWluZyBpbiB0aGUgZGF0YWJhc2Ugc28gcmVzb3J0IHRv IHRoZSAobWVyZ2VkKSBhcnJheQ0KCQkJCQlmb3JlYWNoICgkdHhwX3Blcm1pc3Npb25zIGFz ICRhcmVhID0+ICRwcml2cykgew0KCQkJCQkJJHByaXZzID0gZG9fbGlzdCgkcHJpdnMpOw0K CQkJCQkJaWYgKGluX2FycmF5KCRiYXNlZF9vbiwgJHByaXZzKSkgew0KCQkJCQkJCXNhZmVf aW5zZXJ0KFNNRF9VTV9QUklWUywgImFyZWE9JyIgLiBkb1NsYXNoKCRhcmVhKSAuICInLCBw cml2PSciIC4gZG9TbGFzaCgkbmV3X3ByaXYpIC4gIiciKTsNCgkJCQkJCX0NCgkJCQkJfQ0K CQkJCX0NCg0KCQkJCSRtc2cgPSBzbWRfdW1fZ1R4dCgnc21kX3VtX2dycF9jcmVhdGVkJywg YXJyYXkoJ3tuYW1lfScgPT4gJG5hbWUpKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCSRtc2cg PSBhcnJheShzbWRfdW1fZ1R4dCgnc21kX3VtX25hbWVfcmVxdWlyZWQnKSwgRV9FUlJPUik7 DQoJCX0NCgl9IGVsc2UgaWYgKHBzKCdzbWRfdW1fZ3JvdXBfZGVsJykpIHsNCgkJJGlkID0g c3RyX3JlcGxhY2UoJ3NtZF91bV9kZWxfJywgJycsIHBzKCdzbWRfdW1fZ3JwX2RlbCcpKTsN CgkJYXNzZXJ0X2ludCgkaWQpOw0KDQoJCSRhZmZlY3RlZF91c2VycyA9IHNhZmVfY29sdW1u KCd1c2VyX2lkJywgJ3R4cF91c2VycycsICJwcml2cyA9ICciLmRvU2xhc2goJGlkKS4iJyIp Ow0KCQlpZiAoJGFmZmVjdGVkX3VzZXJzKSB7DQoJCQkvLyBTZXQgYWxsIG9ycGhhbmVkIHVz ZXJzIHRvIG5vIHByaXZzIC0tIGNhbiBhbHdheXMgYXNzaWduIHRoZW0gYSBuZXcgZ3JvdXAg ZnJvbSB0aGUgbWFpbiBzY3JlZW4gbGF0ZXINCgkJCSRyZXQgPSBzYWZlX3VwZGF0ZSgndHhw X3VzZXJzJywgInByaXZzPTAiLCAidXNlcl9pZCBJTiAoJyIuIGpvaW4oIicsJyIsIGRvU2xh c2goJGFmZmVjdGVkX3VzZXJzKSkgLiInKSIpOw0KCQl9DQoNCgkJLy8gVE9ETzogZG91Ymxl IGNoZWNrIHRoaXMgaXNuJ3QgYSBjb3JlIGdyb3VwPw0KCQkkcmVkID0gc2FmZV9kZWxldGUo U01EX1VNX0dST1VQUywgImlkPSciLmRvU2xhc2goJGlkKS4iJyIpOw0KDQoJCWlmICgkcmVk KSB7DQoJCQkkcmV0ID0gc2FmZV9kZWxldGUoU01EX1VNX1BSSVZTLCAicHJpdj0nIi5kb1Ns YXNoKCRpZCkuIiciKTsNCgkJCSRtc2cgPSBzbWRfdW1fZ1R4dCgnc21kX3VtX2dycF9kZWxl dGVkJykgLiAoJGFmZmVjdGVkX3VzZXJzID8gc21kX3VtX2dUeHQoJ3NtZF91bV9ncnBfYWZm ZWN0ZWQnLCBhcnJheSgne251bX0nID0+IGNvdW50KCRhZmZlY3RlZF91c2VycykpKSA6ICcn KTsNCgkJfQ0KCX0NCg0KCS8vIFJlbmRlciB0aGUgcGFnZQ0KCXBhZ2V0b3Aoc21kX3VtX2dU eHQoJ3NtZF91bV90YWJfbmFtZScpLicgJnJhcXVvOyAnLnNtZF91bV9nVHh0KCdzbWRfdW1f Z3JwX2xibCcpLCAkbXNnKTsNCglleHRyYWN0KHNtZF91bV9idXR0b25zKCdncnAnKSk7DQoN CgkkYnRuYmFyID0gJzxzcGFuIGNsYXNzPSJzbWRfdW1fYnV0dG9ucyI+Jy4kYnRuVXNyLiRi dG5HcnAuJGJ0blBydi4kYnRuUHJmLic8L3NwYW4+JzsNCgkkZ3JvdXBsaXN0ID0gc21kX3Vt X2dldF9ncm91cHMoMSk7DQoJdW5zZXQoJGdyb3VwbGlzdFswXSk7IC8vIERvbid0IHdhbnQg Tm9uZSBwcml2cw0KCSRncm91cGxpc3QgPSBzZWxlY3RJbnB1dCgnc21kX3VtX25ld19ncnBf YmFzZWRfb24nLCAkZ3JvdXBsaXN0LCAnJywgdHJ1ZSk7DQoNCgkvLyBJbmplY3Qgc3R5bGVz DQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4nIC4gJHNtZF91bV9zdHlsZXNbJ2Nv bnRyb2wtcGFuZWwnXSAuICc8L3N0eWxlPic7DQoNCgkvLyBOZXcgZ3JvdXANCgllY2hvICc8 ZGl2IGlkPSInLiRzbWRfdW1fZXZlbnQuJ19jb250cm9sIiBjbGFzcz0idHhwLWNvbnRyb2wt cGFuZWwiPicNCgkJLiBmb3JtKA0KCQkJZ3JhZigNCgkJCQknPGxhYmVsIGZvcj0ic21kX3Vt X25ld19ncnAiPicgLiBzbWRfdW1fZ1R4dCgnc21kX3VtX2dycF9uZXcnKSAuICc8L2xhYmVs Picuc3ANCgkJCQkuZklucHV0KCd0ZXh0JywgJ3NtZF91bV9uZXdfZ3JwJywgJycsICcnLCAn JywgJycsICcnLCAnJywgJ3NtZF91bV9uZXdfZ3JwJykuc3ANCgkJCQkuJzxsYWJlbCBmb3I9 InNtZF91bV9uZXdfZ3JwX25hbWUiPicgLiBzbWRfdW1fZ1R4dCgnc21kX3VtX2dycF9uZXdf bmFtZScpIC4gJzwvbGFiZWw+Jy5zcA0KCQkJCS5mSW5wdXQoJ3RleHQnLCAnc21kX3VtX25l d19ncnBfbmFtZScsICcnLCAnJywgJycsICcnLCAnJywgJycsICdzbWRfdW1fbmV3X2dycF9u YW1lJykuc3ANCgkJCQkuJzxsYWJlbCBmb3I9InNtZF91bV9uZXdfZ3JwX2Jhc2VkX29uIj4n IC4gc21kX3VtX2dUeHQoJ3NtZF91bV9iYXNlZF9vbicpIC4gJzwvbGFiZWw+Jy5zcA0KCQkJ CS4kZ3JvdXBsaXN0LnNwDQoJCQkJLmZJbnB1dCgnc3VibWl0JywgJ3NtZF91bV9ncm91cF9h ZGQnLCBnVHh0KCdjcmVhdGUnKSwgJ3NtYWxsZXJib3gnKQ0KCQkJCS5lSW5wdXQoJHNtZF91 bV9ldmVudCkNCgkJCQkuc0lucHV0KCdzbWRfdW1fZ3JvdXBzJykNCgkJCQkpDQoJCQksICcn LCcnLCdwb3N0Jywnc2VhcmNoLWZvcm0nDQoJCQkpDQoJCS4gJGJ0bmJhciAuICc8L2Rpdj4n Ow0KDQoJLy8gUmV0cmlldmUgdGhlIGdyb3VwIGluZm8gYW5kIHVzZXIgY291bnRzIHBlciBw cml2aWxlZ2UgbGV2ZWwNCgkkZmllbGRzID0gJ3NtZGcuaWQsIHNtZGcubmFtZSwgc21kZy5j b3JlLCB0eHUudG90YWwgQVMgdXNlcl9jb3VudCc7DQoJJGNsYXVzZSA9ICcgRlJPTSAnLlBG WC4nc21kX3VtX2dyb3VwcyBBUyBzbWRnDQoJCUxFRlQgSk9JTiAoU0VMRUNUIHByaXZzLCBj b3VudChwcml2cykgQVMgdG90YWwgRlJPTSAnLlBGWC4ndHhwX3VzZXJzIEdST1VQIEJZIHBy aXZzKSBBUyB0eHUgT04gc21kZy5pZCA9IHR4dS5wcml2cyc7DQoNCgkkcnMgPSBnZXRSb3dz KCdTRUxFQ1QgJyAuICRmaWVsZHMuJGNsYXVzZSAuICcgT1JERVIgQlkgaWQnKTsNCg0KCWlm ICgkcnMpIHsNCgkJZWNobyBuLic8ZGl2IGNsYXNzPSJ0eHAtbGlzdCI+JzsNCgkJZWNobyAn PGZvcm0gYWN0aW9uPSJpbmRleC5waHAiIGlkPSJzbWRfdW1fZ3JwX2Zvcm0iIG1ldGhvZD0i cG9zdCIgbmFtZT0ibG9uZ2Zvcm0iIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5KFwnJy5nVHh0 KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4nLg0KCQlzdGFydFRhYmxlKCdsaXN0JywgJycsICds aXN0JykuDQoJCW4uJzx0aGVhZD4nLg0KCQluLnRyKA0KCQkJaENlbGwoJ0lEJywgJycsICcg Y2xhc3M9ImlkIicpLg0KCQkJaENlbGwoJ25hbWUnLCAnJywgJyBjbGFzcz0ibmFtZSInKS4N CgkJCWhDZWxsKCd0aXRsZScsICcnLCAnIGNsYXNzPSJuYW1lIicpLg0KCQkJaENlbGwoJycs ICcnLCAnJykNCgkJKS4NCgkJbi4nPC90aGVhZD4nOw0KDQoJCSR0Zm9vdCA9IG4uJzx0Zm9v dD4nDQoJCQkudHIoDQoJCQkJdGRhKCcmbmJzcDsnLCAnIGNsYXNzPSJub2xpbmUiJykNCgkJ CQkuIHRkYSgnJm5ic3A7JywgJyBjbGFzcz0ibm9saW5lIicpDQoJCQkJLiB0ZGEoZklucHV0 KCdzdWJtaXQnLCAnc21kX3VtX2dyb3VwX3NhdmUnLCBnVHh0KCdzYXZlJyksICdwdWJsaXNo JyksICcgY2xhc3M9Im5vbGluZSInKQ0KCQkJKS4nPC90Zm9vdD4nOw0KCQllY2hvICR0Zm9v dDsNCgkJZWNobyA8PDxFT0pTDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpm dW5jdGlvbiBzbWRfdW1fcHJlc3ViKG9iaikgew0KCWpRdWVyeSgnI3NtZF91bV9ncnBfZGVs JykudmFsKGpRdWVyeShvYmopLmF0dHIoJ2lkJykpOw0KfQ0KPC9zY3JpcHQ+DQpFT0pTOw0K DQoJCWVjaG8gJzx0Ym9keT4nOw0KCQkkY3RyID0gMTsNCg0KCQlmb3JlYWNoICgkcnMgYXMg JHJvdykgew0KCQkJZXh0cmFjdChkb1NwZWNpYWwoJHJvdykpOw0KCQkJJHVzZXJfY291bnQg PSBlbXB0eSgkdXNlcl9jb3VudCkgPyAwIDogJHVzZXJfY291bnQ7DQoJCQkkZExpbmsgPSAo JGNvcmUpID8gJyZuYnNwOycgOiBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdW1fZ3JvdXBfZGVs JywgIsOXIiwgJ3NtYWxsZXJib3gnLCAnJywgJ3NtZF91bV9wcmVzdWIodGhpcyknLCAnJywg JycsICdzbWRfdW1fZGVsXycuJGlkKQ0KCQkJCS5lSW5wdXQoJHNtZF91bV9ldmVudCkNCgkJ CQkuc0lucHV0KCdzbWRfdW1fZ3JvdXBzJykNCgkJCQkudElucHV0KCk7DQoJCQllY2hvIHRy KA0KCQkJCXRkYSgNCgkJCQkJaElucHV0KCdzbWRfdW1fZ3JvdXBfaWRbXScsICRpZCkNCgkJ CQkJLigoJHVzZXJfY291bnQpID8gZUxpbmsoJHNtZF91bV9ldmVudCwgJycsICdzZWFyY2hf bWV0aG9kJywgJ3ByaXZpbGVnZXMnLCAkaWQsICdjcml0JywgJGlkKSA6ICRpZCkNCgkJCQks ICcgY2xhc3M9ImlkIicNCgkJCQkJLigoJHVzZXJfY291bnQpID8gJyB0aXRsZT0iJyAuIHNt ZF91bV9nVHh0KCdzbWRfdW1fdXNlcl9jb3VudCcpIC4gJHVzZXJfY291bnQgLiAnIic6ICcn KQ0KCQkJCSkNCgkJCQkudGQoZklucHV0KCd0ZXh0JywgJ3NtZF91bV9ncm91cF9uYW1lW10n LCAkbmFtZSksICcnLCAnbmFtZScpDQoJCQkJLnRkKGZJbnB1dCgndGV4dCcsICdzbWRfdW1f Z3JvdXBfdGl0bGVbXScsIGdUeHQoJG5hbWUpKSwgJycsICduYW1lJykNCgkJCQkudGQoJGRM aW5rKQ0KCQkJLCAnIGNsYXNzPSInLigoJGN0ciUyID09IDApID8gJ2V2ZW4nIDogJ29kZCcp LiciJw0KCQkJKTsNCg0KCQkJJGN0cisrOw0KCQl9DQoNCgkJZWNobyBmSW5wdXQoJ2hpZGRl bicsICdzbWRfdW1fZ3JwX2RlbCcsICcnLCAnJywgJycsICcnLCAnJywgJycsICdzbWRfdW1f Z3JwX2RlbCcpICwgJzwvdGJvZHk+Jy4NCgkJCW4uZW5kVGFibGUoKS4NCgkJCW4uZUlucHV0 KCRzbWRfdW1fZXZlbnQpLg0KCQkJbi5zSW5wdXQoJ3NtZF91bV9ncm91cHMnKS4NCgkJCW4u dElucHV0KCkuDQoJCQluLic8L2Zvcm0+Jy4NCgkJCW4uc21kX3VtX2FjdGl2ZV91c2Vycygp Lg0KCQkJbi4nPC9kaXY+JzsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KLy8gUHJpdnMgbWFuYWdlbWVudCBwYW5lbA0KZnVuY3Rpb24gc21kX3VtX3ByaXZzKCRt c2c9JycpIHsNCglnbG9iYWwgJHNtZF91bV9ldmVudCwgJHNtZF91bV9wcmVmcywgJHNtZF91 bV9zdHlsZXMsICR0eHBfdXNlciwgJHR4cF9wZXJtaXNzaW9uczsNCg0KCXJlcXVpcmVfcHJp dnMoJHNtZF91bV9ldmVudC4nLnBydicpOw0KDQoJaWYgKCFzbWRfdW1fdGFibGVfZXhpc3Qo KSkgew0KCQlzbWRfdW1fdGFibGVfaW5zdGFsbCgwKTsNCgl9DQoNCglpZiAocHMoJ3NtZF91 bV9wcml2X3NhdmUnKSkgew0KCQkkYXJlYXMgPSBwcygnc21kX3VtX2FyZWFzJyk7DQoJCWZv cmVhY2ggKCRhcmVhcyBhcyAkYXJlYSkgew0KCQkJJGFyX2Zha2VuYW1lID0gc3RyX3JlcGxh Y2UoJy4nLCAnLS0tJywgJGFyZWEpOw0KCQkJJHByaXZzID0gcHMoJGFyX2Zha2VuYW1lKTsN CgkJCSRhcmVhID0gc3RydG9sb3dlcihzYW5pdGl6ZUZvclBhZ2UoJGFyZWEpKTsNCg0KCQkJ Ly8gRGVsZXRlIHRoZSBvbGQgYXJlYSBwcml2cyBpZiB0aGV5IGV4aXN0DQoJCQlzYWZlX2Rl bGV0ZShTTURfVU1fUFJJVlMsICJhcmVhPSciLmRvU2xhc2goJGFyZWEpLiInIik7DQoNCgkJ CWlmIChpc19hcnJheSgkcHJpdnMpKSB7DQoJCQkJZm9yZWFjaCAoJHByaXZzIGFzICRwcml2 KSB7DQoJCQkJCS8vIFJlc2V0IHNob3VsZCBhbHdheXMgYmUgZmlyc3QgaW4gdGhlIGxpc3Qg c2luY2UgaXQncyB0aGUgZmlyc3QgY2hlY2tib3ggY29sDQoJCQkJCS8vIElmIHJlc2V0LCBk b24ndCBhZGQgdGhlIHByaXZzIGFnYWluICh0aHVzIHRoZXkgd2lsbCBiZSByZWFkIGZyb20g YWRtaW5fY29uZmlnLnBocCkNCgkJCQkJaWYgKCRwcml2ID09ICdzbWRfdW1fcmVzZXQnKSB7 DQoJCQkJCQlicmVhazsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCWFzc2VydF9pbnQoJHByaXYp Ow0KCQkJCQkJc2FmZV9pbnNlcnQoU01EX1VNX1BSSVZTLCAiYXJlYT0nIiAuIGRvU2xhc2go JGFyZWEpIC4gIicsIHByaXY9JyIgLiBkb1NsYXNoKCRwcml2KSAuICInIik7DQoJCQkJCX0N CgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkvLyBNZXJnZSB0aGUgY2hhbmdlcyBpbnRvIHRoZSBw cml2IHRhYmxlDQoJCXNtZF91bV9wcml2X21lcmdlKDAsMSk7DQoJCSRtc2cgPSBzbWRfdW1f Z1R4dCgnc21kX3VtX3Bydl9zYXZlZCcpOw0KCX0gZWxzZSBpZiAocHMoJ3NtZF91bV9wcml2 X2FkZCcpKSB7DQoJCSRuYW1lID0gcHMoJ3NtZF91bV9uZXdfcHJ2Jyk7DQoJCSRuYW1lID0g c3RydG9sb3dlcihzYW5pdGl6ZUZvclBhZ2UoJG5hbWUpKTsNCg0KCQlpZiAoJG5hbWUpIHsN CgkJCWlmIChzdHJwb3MoJG5hbWUsICdzbWRfdW0nKSA9PT0gMCkgew0KCQkJCS8vIENhbid0 IGNyZWF0ZSBwcml2cyBmb3IgdGhpcyBwbHVnaW4NCgkJCQkkbXNnID0gYXJyYXkoc21kX3Vt X2dUeHQoJ3NtZF91bV9wcnZfc21kX3VtJyksIEVfVVNFUl9XQVJOSU5HKTsNCgkJCX0gZWxz ZSB7DQoJCQkJJGV4aXN0cyA9IGFycmF5X2tleV9leGlzdHMoJG5hbWUsICR0eHBfcGVybWlz c2lvbnMpOw0KCQkJCWlmICgkZXhpc3RzKSB7DQoJCQkJCSRtc2cgPSBhcnJheShzbWRfdW1f Z1R4dCgnc21kX3VtX3Bydl9leGlzdHMnKSwgRV9VU0VSX1dBUk5JTkcpOw0KCQkJCX0gZWxz ZSB7DQoJCQkJCXNhZmVfaW5zZXJ0KFNNRF9VTV9QUklWUywgImFyZWE9JyIgLiBkb1NsYXNo KCRuYW1lKSAuICInIik7DQoNCgkJCQkJc21kX3VtX3ByaXZfbWVyZ2UoMCwxKTsNCgkJCQkJ JG1zZyA9IHNtZF91bV9nVHh0KCdzbWRfdW1fcHJ2X2NyZWF0ZWQnLCBhcnJheSgne2FyZWF9 JyA9PiAkbmFtZSkpOw0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIHsNCgkJCSRtc2cgPSBhcnJh eShzbWRfdW1fZ1R4dCgnc21kX3VtX25hbWVfcmVxdWlyZWQnKSwgRV9FUlJPUik7DQoJCX0N Cgl9DQoNCglwYWdldG9wKHNtZF91bV9nVHh0KCdzbWRfdW1fdGFiX25hbWUnKS4nICZyYXF1 bzsgJy5zbWRfdW1fZ1R4dCgnc21kX3VtX3Bydl9sYmwnKSwgJG1zZyk7DQoJZXh0cmFjdChz bWRfdW1fYnV0dG9ucygncHJ2JykpOw0KDQoJJGJ0bmJhciA9ICc8c3BhbiBjbGFzcz0ic21k X3VtX2J1dHRvbnMiPicuJGJ0blVzci4kYnRuR3JwLiRidG5QcnYuJGJ0blByZi4nPC9zcGFu Pic7DQoNCgkvLyBJbmplY3Qgc3R5bGVzDQoJZWNobyAnPHN0eWxlIHR5cGU9InRleHQvY3Nz Ij4nIC4gJHNtZF91bV9zdHlsZXNbJ2NvbnRyb2wtcGFuZWwnXSAuICc8L3N0eWxlPic7DQoN CgllY2hvICc8ZGl2IGlkPSInLiRzbWRfdW1fZXZlbnQuJ19jb250cm9sIiBjbGFzcz0idHhw LWNvbnRyb2wtcGFuZWwiPicNCgkJLiBmb3JtKA0KCQkJZ3JhZigNCgkJCQknPGxhYmVsIGZv cj0ic21kX3VtX25ld19wcnYiPicgLiBzbWRfdW1fZ1R4dCgnc21kX3VtX3Bydl9uZXcnKSAu ICc8L2xhYmVsPicuc3ANCgkJCQkuZklucHV0KCd0ZXh0JywgJ3NtZF91bV9uZXdfcHJ2Jywg JycsICcnLCAnJywgJycsICcnLCAnJywgJ3NtZF91bV9uZXdfcHJ2JykNCgkJCQkuZklucHV0 KCdzdWJtaXQnLCAnc21kX3VtX3ByaXZfYWRkJywgZ1R4dCgnY3JlYXRlJyksICdzbWFsbGVy Ym94JykNCgkJCQkuZUlucHV0KCRzbWRfdW1fZXZlbnQpDQoJCQkJLnNJbnB1dCgnc21kX3Vt X3ByaXZzJykNCgkJCQkpDQoJCQksICcnLCcnLCdwb3N0Jywnc2VhcmNoLWZvcm0nDQoJCQkp DQoJCS4gJGJ0bmJhciAuICc8L2Rpdj4nOw0KDQoJJGdyb3VwbGlzdF9uYW1lID0gc21kX3Vt X2dldF9ncm91cHMoMCk7DQoJJGdyb3VwbGlzdF90aXRsZSA9IHNtZF91bV9nZXRfZ3JvdXBz KDEpOw0KDQoJdW5zZXQoJGdyb3VwbGlzdF9uYW1lWzBdKTsgLy8gRG9uJ3Qgd2FudCBOb25l IHByaXZzDQoJdW5zZXQoJGdyb3VwbGlzdF90aXRsZVswXSk7IC8vIERpdHRvDQoNCgkkY3Vy cl9hcmVhID0gJyc7DQoJJGFyZWFfY291bnQgPSAwOw0KCSR0aGF0dHMgPSAnIGNsYXNzPSJz bWRfdW1fZ3JwX25hbWUiIHRpdGxlPSInIC4gc21kX3VtX2dUeHQoJ3NtZF91bV9zZWxfZ3Jw JykgLiAnIic7DQoJJGhlYWRlcnMgPSAnPHRoZWFkPicudHIoDQoJCWhDZWxsKCcnLCAnJywg JyBjbGFzcz0ic21kX3VtX3NlbF9hcmVhIiB0aXRsZT0iJyAuIHNtZF91bV9nVHh0KCdzbWRf dW1fc2VsX2FsbCcpIC4gJyInKQ0KCQkuaENlbGwoc21kX3VtX2dUeHQoJ3NtZF91bV9yZXNl dCcpLCAnJywgJyBjbGFzcz0ic21kX3VtX3Jlc2V0X2NvbCIgdGl0bGU9IicgLiBzbWRfdW1f Z1R4dCgnc21kX3VtX3NlbF9yZXNldCcpIC4gJyInKQ0KCQkuaENlbGwoam9pbignPC90aD48 dGgnLiR0aGF0dHMuJz4nLCAkZ3JvdXBsaXN0X3RpdGxlKSwgJycsICR0aGF0dHMpDQoJLCAn IGNsYXNzPSJzbWRfdW1fcHJ2X2hkciInKS4gJzwvdGhlYWQ+JzsNCg0KCSR2aXogPSBkb19s aXN0KGdldF9wcmVmKCdwYW5lX3NtZF91bV9wcml2X3Zpc2libGUnKSk7DQoNCgkkY3RyID0g MTsNCgllY2hvIDw8PEVPSlMNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1 bmN0aW9uIHNtZF91bV9wcmVzdWIob2JqKSB7DQoJalF1ZXJ5KCcjc21kX3VtX3Bydl9kZWwn KS52YWwoalF1ZXJ5KG9iaikuYXR0cignaWQnKSk7DQp9DQoNCmpRdWVyeS5mbi5zbWRfdW1f cm93c2VsID0gZnVuY3Rpb24oaWR4KSB7DQoJcmV0dXJuIGpRdWVyeSgndHI6bnRoLWNoaWxk KCcrKGlkeCsxKSsnKSB0ZC5zbWRfdW1fY2hlY2tib3gnLCB0aGlzKTsNCn0NCmpRdWVyeS5m bi5zbWRfdW1fY29sc2VsID0gZnVuY3Rpb24oaWR4KSB7DQoJcmV0dXJuIGpRdWVyeSgndHIg dGQ6bnRoLWNoaWxkKCcrKGlkeCsxKSsnKScsIHRoaXMpOw0KfQ0KDQovLyBBZmZlY3QgYWxs IGhpZ2hsaWdodGVkIGNoZWNrYm94ZXMgb24ga2V5cHJlc3MNCmZ1bmN0aW9uIHNtZF91bV90 b2dnbGVDaGVja2JveChldikgew0KCWtleSA9IGV2LmtleUNvZGU7DQoJb2JqID0galF1ZXJ5 KCcuc21kX3VtX3NlbGVjdGVkIDpjaGVja2JveCcpOw0KCXN3aXRjaChrZXkpIHsNCgkJY2Fz ZSA2NzoNCgkJCS8vIChjKWhlY2sgc2VsZWN0ZWQgYm94ZXMNCgkJCW9iai5wcm9wKCdjaGVj a2VkJywgdHJ1ZSk7DQoJCWJyZWFrOw0KCQljYXNlIDY4Og0KCQkJLy8gKGQpZXNlbGVjdCBh bGwgc2VsZWN0ZWQgcm93cy9jb2xzDQoJCQlqUXVlcnkoJy5zbWRfdW1fc2VsZWN0ZWQsIC5z bWRfdW1fcnNlbCwgLnNtZF91bV9jc2VsJykucmVtb3ZlQ2xhc3MoJ3NtZF91bV9zZWxlY3Rl ZCBzbWRfdW1fcnNlbCBzbWRfdW1fY3NlbCcpOw0KCQlicmVhazsNCgkJDQoJCWNhc2UgODQ6 DQoJCQkvLyAodClvZ2dsZSBzZWxlY3RlZCBib3hlcw0KCQkJb2JqLmVhY2goZnVuY3Rpb24o KSB7DQoJCQkJY2IgPSBqUXVlcnkodGhpcyk7DQoJCQkJaWYgKGNiLnByb3AoJ2NoZWNrZWQn KSA9PSB0cnVlKSB7DQoJCQkJCWNiLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7DQoJCQkJfSBl bHNlIHsNCgkJCQkJY2IucHJvcCgnY2hlY2tlZCcsIHRydWUpOw0KCQkJCX0NCgkJCX0pOw0K CQlicmVhazsNCgkJY2FzZSA4NToNCgkJCS8vICh1KW5jaGVjayBzZWxlY3RlZCBib3hlcw0K CQkJb2JqLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7DQoJCWJyZWFrOw0KCX0NCn0NCg0KalF1 ZXJ5KGZ1bmN0aW9uKCkgew0KCWpRdWVyeShkb2N1bWVudCkuYmluZCgna2V5dXAnLCBzbWRf dW1fdG9nZ2xlQ2hlY2tib3gpOw0KDQoJLy8gUm93IHNlbGVjdG9yDQoJalF1ZXJ5KCcuc21k X3VtX3Bydl9uYW1lJykuY2xpY2soZnVuY3Rpb24oKSB7DQoJCXRyID0galF1ZXJ5KHRoaXMp LmNsb3Nlc3QoJ3RyJyk7DQoJCXJvd251bSA9IHRyLmluZGV4KCk7DQoJCW9iaiA9IGpRdWVy eSh0cikucGFyZW50KCkuc21kX3VtX3Jvd3NlbChyb3dudW0pOw0KDQoJCS8vIENhbid0IHVz ZSB0b2dnbGVDbGFzcyBiZWNhdXNlIGl0IHdvdWxkIHVudG9nZ2xlIGFueSBjb2xzIHRoYXQg d2VyZSBhbHJlYWR5IHNlbGVjdGVkDQoJCWlmIChqUXVlcnkodGhpcykuaGFzQ2xhc3MoJ3Nt ZF91bV9yc2VsJykpIHsNCgkJCW9iai5yZW1vdmVDbGFzcygnc21kX3VtX3NlbGVjdGVkJyk7 DQoJCX0gZWxzZSB7DQoJCQlvYmouYWRkQ2xhc3MoJ3NtZF91bV9zZWxlY3RlZCcpOw0KCQl9 DQoJCWpRdWVyeSh0aGlzKS50b2dnbGVDbGFzcygnc21kX3VtX3JzZWwnKTsNCgl9KTsNCg0K CS8vIENvbHVtbiBzZWxlY3Rvcg0KCWpRdWVyeSgnLnNtZF91bV9ncnBfbmFtZSwgLnNtZF91 bV9yZXNldF9jb2wnKS5jbGljayhmdW5jdGlvbigpIHsNCgkJY29sbnVtID0galF1ZXJ5KHRo aXMpLmluZGV4KCk7DQoJCXRib2R5ID0galF1ZXJ5KHRoaXMpLnBhcmVudCgpLnBhcmVudCgp Lm5leHQoJ3Rib2R5Jyk7DQoJCW9iaiA9IGpRdWVyeSh0Ym9keSkuc21kX3VtX2NvbHNlbChj b2xudW0pOw0KDQoJCS8vIENhbid0IHVzZSB0b2dnbGVDbGFzcyBiZWNhdXNlIGl0IHdvdWxk IHVudG9nZ2xlIGFueSByb3dzIHRoYXQgd2VyZSBhbHJlYWR5IHNlbGVjdGVkDQoJCWlmIChj b2xudW0gPiAwKSB7DQoJCQlpZiAoalF1ZXJ5KHRoaXMpLmhhc0NsYXNzKCdzbWRfdW1fY3Nl bCcpKSB7DQoJCQkJb2JqLnJlbW92ZUNsYXNzKCdzbWRfdW1fc2VsZWN0ZWQnKTsNCgkJCX0g ZWxzZSB7DQoJCQkJb2JqLmFkZENsYXNzKCdzbWRfdW1fc2VsZWN0ZWQnKTsNCgkJCX0NCgkJ fQ0KCQlqUXVlcnkodGhpcykudG9nZ2xlQ2xhc3MoJ3NtZF91bV9jc2VsJyk7DQoJfSk7DQoN CgkvLyBXaG9sZSB0YWJsZSBzZWxlY3Rvcg0KCWpRdWVyeSgnLnNtZF91bV9zZWxfYXJlYScp LmNsaWNrKGZ1bmN0aW9uKCkgew0KCQltZSA9IGpRdWVyeSh0aGlzKTsNCgkJdGhlYWQgPSBt ZS5wYXJlbnQoKS5wYXJlbnQoKTsNCgkJdGJvZHkgPSB0aGVhZC5uZXh0KCd0Ym9keScpOw0K CQl0Ym9keS50b2dnbGVDbGFzcygnc21kX3VtX2FsbHNlbCcpOw0KCQlpZiAodGJvZHkuaGFz Q2xhc3MoJ3NtZF91bV9hbGxzZWwnKSkgew0KCQkJdGJvZHkuZmluZCgnLnNtZF91bV9wcnZf bmFtZScpLnJlbW92ZUNsYXNzKCdzbWRfdW1fcnNlbCcpLmNsaWNrKCk7DQoJCQltZS5uZXh0 QWxsKCcuc21kX3VtX2dycF9uYW1lJykuYWRkQ2xhc3MoJ3NtZF91bV9jc2VsJyk7DQoJCX0g ZWxzZSB7DQoJCQl0Ym9keS5maW5kKCcuc21kX3VtX3Bydl9uYW1lJykuYWRkQ2xhc3MoJ3Nt ZF91bV9yc2VsJykuY2xpY2soKTsNCgkJCW1lLm5leHRBbGwoJy5zbWRfdW1fZ3JwX25hbWUn KS5yZW1vdmVDbGFzcygnc21kX3VtX2NzZWwnKTsNCgkJfQ0KCX0pOw0KDQp9KTsNCjwvc2Ny aXB0Pg0KRU9KUzsNCg0KCWVjaG8gbi4nPGRpdiBjbGFzcz0idHhwLWxpc3QiPic7DQoJZWNo byAnPGZvcm0gYWN0aW9uPSJpbmRleC5waHAiIGlkPSJzbWRfdW1fcHJpdmlsZWdlX2Zvcm0i IG1ldGhvZD0icG9zdCIgbmFtZT0ibG9uZ2Zvcm0iIG9uc3VibWl0PSJyZXR1cm4gdmVyaWZ5 KFwnJy5nVHh0KCdhcmVfeW91X3N1cmUnKS4nXCcpIj4nOw0KCWVjaG8gZUlucHV0KCRzbWRf dW1fZXZlbnQpLnNJbnB1dCgnc21kX3VtX3ByaXZzJykudElucHV0KCk7DQoJZm9yZWFjaCAo JHR4cF9wZXJtaXNzaW9ucyBhcyAkYXJlYSA9PiAkcHJpdnMpIHsNCgkJJHByaXZfbGlzdCA9 IGRvX2xpc3QoJHByaXZzKTsNCgkJJGFyZWFfcGFydHMgPSBkb19saXN0KCRhcmVhLCAnLicp Ow0KCQlpZiAocHJlZ19tYXRjaCgnL14oW0EtWmEtejAtOV17MywzfSlcXy8nLCAkYXJlYV9w YXJ0c1swXSwgJG1hdGNoZXMpKSB7DQoJCQkvLyBQbHVnaW4NCgkJCSRhcmVhX3BhcnRzWzBd ID0gJG1hdGNoZXNbMV07DQoJCX0NCgkJLy8gU3RhcnQgb2YgYSBuZXcgYXJlYSBzbyBjbG9z ZSB0aGUgcHJldmlvdXMgb25lIGFuZCBzdGFydCBhIG5ldyBibG9jaw0KCQlpZiAoJGN1cnJf YXJlYSAhPSAkYXJlYV9wYXJ0c1swXSkgew0KCQkJaWYgKCRhcmVhX2NvdW50ID4gMCkgew0K CQkJCWVjaG8gJzwvdGJvZHk+JyAuIGVuZFRhYmxlKCkgLiAnPC9kaXY+PC9kaXY+JzsNCgkJ CX0NCgkJCSRhcmVhX2hlYWQgPSBnVHh0KCRhcmVhX3BhcnRzWzBdKTsNCgkJCSRpc192aXog PSBpbl9hcnJheSgkYXJlYV9wYXJ0c1swXSwgJHZpeik7DQoJCQkkcmVmID0gJ3NtZF91bV9w cml2XycuJGFyZWFfcGFydHNbMF07DQoJCQllY2hvICc8ZGl2IGNsYXNzPSJzbWRfdW1fcHJp dmdyb3VwIj48aDIgY2xhc3M9InBsYWluIGxldmVyJy4oJGlzX3ZpeiA/ICcgZXhwYW5kZWQn IDogJycpLiciPjxhIGhyZWY9IiMnLiRyZWYuJyI+JyAuICRhcmVhX3BhcnRzWzBdIC4gKCgk YXJlYV9wYXJ0c1swXSAhPSAkYXJlYV9oZWFkKSA/ICcgKCcgLiBnVHh0KCRhcmVhX3BhcnRz WzBdKS4nKScgOiAnJykgLiAnPC9hPjwvaDI+JzsNCgkJCWVjaG8gJzxkaXYgaWQ9IicuJHJl Zi4nIiBjbGFzcz0idG9nZ2xlIiBzdHlsZT0iZGlzcGxheTonLigkaXNfdml6ID8gJ2Jsb2Nr JyA6ICdub25lJykuJyI+JzsNCgkJCWVjaG8gZklucHV0KCdzdWJtaXQnLCAnc21kX3VtX3By aXZfc2F2ZScsIGdUeHQoJ3NhdmUnKSwgJ3NtYWxsZXJib3ggc21kX3VtX3ByaXZzYXZlJyk7 DQoJCQllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsNCgkJCWVjaG8gJGhlYWRlcnM7DQoJCQll Y2hvICc8dGJvZHk+JzsNCgkJfQ0KDQoJCSRwcml2Ym94ZXMgPSBhcnJheSgpOw0KCQkkc2Fm ZV9hcmVhID0gc3RyX3JlcGxhY2UoJy4nLCAnLS0tJywgJGFyZWEpLidbXSc7DQoJCWZvcmVh Y2ggKCRncm91cGxpc3RfbmFtZSBhcyAkaWQgPT4gJHByaXYpIHsNCgkJCS8vLyBEb3RzIGFy ZW4ndCB2YWxpZCBjaGFyYWN0ZXJzIGZvciBhIG5hbWUgc28gcmVwbGFjZSB0aGVtIG5vdyBh bmQgc3dhcCB0aGVtIGJhY2sgdXBvbiBTYXZlDQoJCQkkcHJpdmJveGVzW10gPSB0ZChjaGVj a2JveCgkc2FmZV9hcmVhLCAkaWQsIChpbl9hcnJheSgkaWQsICRwcml2X2xpc3QpKSksICcn LCAnc21kX3VtX2NoZWNrYm94Jyk7DQoJCX0NCg0KCQllY2hvIHRyKA0KCQkJdGRhKCRhcmVh LmhJbnB1dCgnc21kX3VtX2FyZWFzW10nLCAkYXJlYSksICcgY2xhc3M9InNtZF91bV9wcnZf bmFtZSIgdGl0bGU9IicgLiBzbWRfdW1fZ1R4dCgnc21kX3VtX3NlbF9wcnYnKSAuICciJykN CgkJCS50ZChjaGVja2JveCgkc2FmZV9hcmVhLCAnc21kX3VtX3Jlc2V0JywgMCksICcnLCAn c21kX3VtX3Jlc2V0Ym94JykNCgkJCS5qb2luKG4sICRwcml2Ym94ZXMpDQoJCQksICcgY2xh c3M9IicuKCgkY3RyJTIgPT0gMCkgPyAnZXZlbicgOiAnb2RkJykuJyInDQoJCSk7DQoJCSRj dXJyX2FyZWEgPSAkYXJlYV9wYXJ0c1swXTsNCgkJJGFyZWFfY291bnQrKzsNCgkJJGN0cisr Ow0KCX0NCg0KCWVjaG8gZW5kVGFibGUoKSAuJzwvZGl2PjwvZGl2PicgLiBmSW5wdXQoJ2hp ZGRlbicsICdzbWRfdW1fcHJ2X2RlbCcsICcnLCAnJywgJycsICcnLCAnJywgJycsICdzbWRf dW1fcHJ2X2RlbCcpIC4gJzwvZm9ybT4nLnNtZF91bV9hY3RpdmVfdXNlcnMoKS4nPC9kaXY+ JzsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBQcmVmcyBtYW5hZ2Vt ZW50IHBhbmVsDQpmdW5jdGlvbiBzbWRfdW1fcHJlZnMoJG1zZz0nJykgew0KCWdsb2JhbCAk c21kX3VtX2V2ZW50LCAkc21kX3VtX3ByZWZzLCAkc21kX3VtX3N0eWxlcywgJHR4cF91c2Vy Ow0KDQoJcmVxdWlyZV9wcml2cygkc21kX3VtX2V2ZW50LicucHJmJyk7DQoNCglpZiAoIXNt ZF91bV90YWJsZV9leGlzdCgpKSB7DQoJCXNtZF91bV90YWJsZV9pbnN0YWxsKDApOw0KCX0N Cg0KCWlmIChwcygnc21kX3VtX3ByZWZfc2F2ZScpKSB7DQoJCWZvcmVhY2ggKCRzbWRfdW1f cHJlZnMgYXMgJGlkeCA9PiAkcHJlZm9iaikgew0KCQkJJHZhbCA9IHBzKCRpZHgpOw0KCQkJ JHZhbCA9IChpc19hcnJheSgkdmFsKSkgPyBqb2luKCcsICcsICR2YWwpIDogJHZhbDsNCgkJ CXNldF9wcmVmKCRpZHgsICR2YWwsICRzbWRfdW1fZXZlbnQsICRwcmVmb2JqWyd0eXBlJ10s ICRwcmVmb2JqWydodG1sJ10sICRwcmVmb2JqWydwb3NpdGlvbiddKTsNCgkJfQ0KDQoJCSRt c2cgPSBzbWRfdW1fZ1R4dCgnc21kX3VtX3ByZl9zYXZlZCcpOw0KCX0NCg0KCXBhZ2V0b3Ao c21kX3VtX2dUeHQoJ3NtZF91bV90YWJfbmFtZScpLicgJnJhcXVvOyAnLnNtZF91bV9nVHh0 KCdzbWRfdW1fcHJmX2xibCcpLCAkbXNnKTsNCglleHRyYWN0KHNtZF91bV9idXR0b25zKCdw cmYnKSk7DQoNCgkkYnRuYmFyID0gJzxzcGFuIGNsYXNzPSJzbWRfdW1fYnV0dG9ucyI+Jy4k YnRuVXNyLiRidG5HcnAuJGJ0blBydi4kYnRuUHJmLic8L3NwYW4+JzsNCg0KCS8vIEluamVj dCBzdHlsZXMNCgllY2hvICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicgLiAkc21kX3VtX3N0 eWxlc1snY29udHJvbC1wYW5lbCddIC4gJzwvc3R5bGU+JzsNCg0KCWVjaG8gJzxkaXYgaWQ9 IicuJHNtZF91bV9ldmVudC4nX2NvbnRyb2wiIGNsYXNzPSJ0eHAtY29udHJvbC1wYW5lbCI+ JyAuICRidG5iYXIgLiAnPC9kaXY+JzsNCg0KCSRvdXQgPSBhcnJheSgpOw0KCSRvdXRbXSA9 IG4uJzxkaXYgY2xhc3M9InR4cC1saXN0Ij4nOw0KCSRvdXRbXSA9ICc8Zm9ybSBuYW1lPSJz bWRfdW1fcHJlZnMiIGlkPSJzbWRfdW1fcHJlZnMiIGFjdGlvbj0iaW5kZXgucGhwIiBtZXRo b2Q9InBvc3QiPic7DQoJJG91dFtdID0gZUlucHV0KCRzbWRfdW1fZXZlbnQpLnNJbnB1dCgn c21kX3VtX3ByZWZzJyk7DQoJJG91dFtdID0gc3RhcnRUYWJsZSgnbGlzdCcpOw0KCSRvdXRb XSA9IHRyKHRkY3Moc3Ryb25nKHNtZF91bV9nVHh0KCdzbWRfdW1fcHJmX2xlZ2VuZCcpKSwg MikpOw0KCWZvcmVhY2ggKCRzbWRfdW1fcHJlZnMgYXMgJGlkeCA9PiAkcHJlZm9iaikgew0K CQkkc3Vib3V0ID0gYXJyYXkoKTsNCgkJJHN1Ym91dFtdID0gdGRhKCc8bGFiZWwgZm9yPSIn LiRpZHguJyI+Jy5zbWRfdW1fZ1R4dCgkaWR4KS4nPC9sYWJlbD4nLCAnIGNsYXNzPSJub2xp bmUiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsi Jyk7DQoJCSR2YWwgPSBnZXRfcHJlZigkaWR4LCAkcHJlZm9ialsnZGVmYXVsdCddLCAxKTsN CgkJc3dpdGNoICgkcHJlZm9ialsnaHRtbCddKSB7DQoJCQljYXNlICd0ZXh0X2lucHV0JzoN CgkJCQkkc3Vib3V0W10gPSBmSW5wdXRDZWxsKCRpZHgsICR2YWwsICcnLCAnJywgJycsICRp ZHgpOw0KCQkJYnJlYWs7DQoJCQljYXNlICd5ZXNub3JhZGlvJzoNCgkJCQkkc3Vib3V0W10g PSB0ZGEoeWVzbm9SYWRpbygkaWR4LCAkdmFsKSwnIGNsYXNzPSJub2xpbmUiJyk7DQoJCQli cmVhazsNCgkJCWNhc2UgJ2NoZWNrYm94c2V0JzoNCgkJCQkkdmFscyA9IGRvX2xpc3QoJHZh bCk7DQoJCQkJJGxjbG91dCA9IGFycmF5KCk7DQoJCQkJZm9yZWFjaCAoJHByZWZvYmpbJ2Nv bnRlbnQnXSBhcyAkY2IgPT4gJHZhbCkgew0KCQkJCQkkY2hlY2tlZCA9IGluX2FycmF5KCRj YiwgJHZhbHMpOw0KCQkJCQkkbGNsb3V0W10gPSBjaGVja2JveCgkaWR4LidbXScsICRjYiwg JGNoZWNrZWQpLiAkdmFsOw0KCQkJCX0NCgkJCQkkc3Vib3V0W10gPSB0ZGEoam9pbihuLCAk bGNsb3V0KSwnIGNsYXNzPSJub2xpbmUiJyk7DQoJCQlicmVhazsNCgkJCWNhc2UgJ3NlbGVj dGxpc3QnOg0KCQkJCSRzdWJvdXRbXSA9IHRkYShzZWxlY3RJbnB1dCgkaWR4LCAkcHJlZm9i alsnY29udGVudCddWzBdLCAkdmFsLCAkcHJlZm9ialsnY29udGVudCddWzFdKSwnIGNsYXNz PSJub2xpbmUiJyk7DQoJCQlicmVhazsNCgkJfQ0KCQkkb3V0W10gPSB0cihqb2luKG4gLCRz dWJvdXQpKTsNCgl9DQoNCgkkb3V0W10gPSB0cih0ZGEoJyZuYnNwOycsICcgY2xhc3M9Im5v bGluZSInKSAuIHRkYShmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfdW1fcHJlZl9zYXZlJywgZ1R4 dCgnc2F2ZScpLCAncHVibGlzaCcpLCAnIGNsYXNzPSJub2xpbmUiJykpOw0KCSRvdXRbXSA9 IGVuZFRhYmxlKCkudElucHV0KCk7DQoJJG91dFtdID0gJzwvZm9ybT4nLnNtZF91bV9hY3Rp dmVfdXNlcnMoKS4nPC9kaXY+JzsNCg0KCWVjaG8gam9pbihuLCAkb3V0KTsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDb21tb24gYnV0dG9ucyBmb3IgdGhlIGlu dGVyZmFjZQ0KZnVuY3Rpb24gc21kX3VtX2J1dHRvbnMoJGN1cnI9J3VzcicpIHsNCglnbG9i YWwgJHNtZF91bV9ldmVudDsNCg0KCSRncnAgPSBoYXNfcHJpdnMoJHNtZF91bV9ldmVudC4n LmdycCcpOw0KCSRwcmYgPSBoYXNfcHJpdnMoJHNtZF91bV9ldmVudC4nLnByZicpOw0KCSRw cnYgPSBoYXNfcHJpdnMoJHNtZF91bV9ldmVudC4nLnBydicpOw0KCSR1c3IgPSAoJGdycCB8 fCAkcHJmIHx8ICRwcnYpOyAvLyBEb24ndCBzaG93IHVzciBidXR0b24gaWYgaXQncyB0aGUg b25seSB0YWIgYXZhaWxhYmxlDQoNCgkkcmV0ID0gYXJyYXkgKA0KCQknYnRuR3JwJyAgICAg ID0+ICggKCRncnApID8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4k c21kX3VtX2V2ZW50LmEuJ3N0ZXA9c21kX3VtX2dyb3VwcyIgc3R5bGU9ImRpc3BsYXk6aW5s aW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNtZF91bV9nVHh0KCdzbWRfdW1f Z3JwX2xibCcpLCAnc21hbGxlcmJveCcuKCRjdXJyPT0nZ3JwJz8nIHNtZF9hY3RpdmUnOicn KSkudElucHV0KCkuJzwvZm9ybT4nIDogJycpLA0KCQknYnRuUHJmJyAgICAgID0+ICggKCRw cmYpID8gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9Jy4kc21kX3VtX2V2 ZW50LmEuJ3N0ZXA9c21kX3VtX3ByZWZzIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklu cHV0KCdzdWJtaXQnLCAnc3VibWl0Jywgc21kX3VtX2dUeHQoJ3NtZF91bV9wcmZfbGJsJyks ICdzbWFsbGVyYm94Jy4oJGN1cnI9PSdwcmYnPycgc21kX2FjdGl2ZSc6JycpKS50SW5wdXQo KS4nPC9mb3JtPicgOiAnJyksDQoJCSdidG5QcnYnICAgICAgPT4gKCAoJHBydikgPyAnPGZv cm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD0nLiRzbWRfdW1fZXZlbnQuYS4nc3Rl cD1zbWRfdW1fcHJpdnMiIHN0eWxlPSJkaXNwbGF5OmlubGluZSI+Jy5mSW5wdXQoJ3N1Ym1p dCcsICdzdWJtaXQnLCBzbWRfdW1fZ1R4dCgnc21kX3VtX3Bydl9sYmwnKSwgJ3NtYWxsZXJi b3gnLigkY3Vycj09J3Bydic/JyBzbWRfYWN0aXZlJzonJykpLnRJbnB1dCgpLic8L2Zvcm0+ JyA6ICcnKSwNCgkJJ2J0blVzcicgICAgICA9PiAoICgkdXNyKSA/ICc8Zm9ybSBtZXRob2Q9 InBvc3QiIGFjdGlvbj0iP2V2ZW50PScuJHNtZF91bV9ldmVudC5hLidzdGVwPXNtZF91bSIg c3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIHNt ZF91bV9nVHh0KCdzbWRfdW1fdXNyX2xibCcpLCAnc21hbGxlcmJveCcuKCRjdXJyPT0ndXNy Jz8nIHNtZF9hY3RpdmUnOicnKSkudElucHV0KCkuJzwvZm9ybT4nIDogJycpLA0KCSk7DQoJ cmV0dXJuICRyZXQ7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLy8gQWx0 ZXIgdGhlIHBhZ2VieSBxdWFudGl0eQ0KZnVuY3Rpb24gc21kX3VtX2NoYW5nZV9wYWdlYnko KSB7DQoJZ2xvYmFsICRzbWRfdW1fZXZlbnQ7DQoJZXZlbnRfY2hhbmdlX3BhZ2VieSgnc21k X3VtJyk7DQoJJHNtZF91bV9ldmVudCgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCi8vIFRoZSB1c2VyIHBhbmVsIHNlYXJjaCBkcm9wZG93biBsaXN0DQpmdW5jdGlv biBzbWRfdW1fc2VhcmNoX2Zvcm0oJGNyaXQsICRtZXRob2QpIHsNCglnbG9iYWwgJHNtZF91 bV9ldmVudDsNCg0KCSRtZXRob2RzID0JYXJyYXkoDQoJCSdsb2dpbl9uYW1lJyAgICA9PiBn VHh0KCdsb2dpbl9uYW1lJyksDQoJCSdyZWFsX25hbWUnICAgICA9PiBnVHh0KCdyZWFsX25h bWUnKSwNCgkJJ2VtYWlsJyAgICAgICAgID0+IGdUeHQoJ2VtYWlsJyksDQoJCSdwcml2aWxl Z2VzJyAgICA9PiBnVHh0KCdwcml2aWxlZ2VzJyksDQoJCSdhcnRpY2xlX2NvdW50JyA9PiBz bWRfdW1fZ1R4dCgnc21kX3VtX2FydGljbGVfY291bnQnKSwNCgkJJ2ltYWdlX2NvdW50JyAg ID0+IHNtZF91bV9nVHh0KCdzbWRfdW1faW1hZ2VfY291bnQnKSwNCgkJJ2ZpbGVfY291bnQn ICAgID0+IHNtZF91bV9nVHh0KCdzbWRfdW1fZmlsZV9jb3VudCcpLA0KCQknbGlua19jb3Vu dCcgICAgPT4gc21kX3VtX2dUeHQoJ3NtZF91bV9saW5rX2NvdW50JyksDQoJKTsNCg0KCXJl dHVybiBzZWFyY2hfZm9ybSgkc21kX3VtX2V2ZW50LCAnJywgJGNyaXQsICRtZXRob2RzLCAk bWV0aG9kLCAnbG9naW4nKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpm dW5jdGlvbiBzbWRfdW1fZ2V0X3ByaXZfbGV2ZWwoJHByaXYpIHsNCgkkbGV2ZWxzID0gZ2V0 X2dyb3VwcygpOw0KCXJldHVybiAkbGV2ZWxzWyRwcml2XTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQovLyBNZXJnZS9lZGl0IHRoZSBncm91cHMgJiBwcml2cyBpbnRv IHRoZSBleGlzdGluZyBnbG9iYWwgYXJyYXlzDQpmdW5jdGlvbiBzbWRfdW1fcHJpdl9tZXJn ZSgkZG9fZ3JwPTEsICRkb19wcml2PTEpIHsNCglnbG9iYWwgJHR4cF9ncm91cHMsICRzbWRf dW1fcHJlZnMsICR0eHBfcGVybWlzc2lvbnM7DQoNCglpZiAoJGRvX2dycCAmJiBzbWRfdW1f dGFibGVfZXhpc3QoU01EX1VNX0dST1VQUykpIHsNCgkJJG5ld19ncm91cHMgPSBzYWZlX3Jv d3MoJ2lkLCBuYW1lJywgU01EX1VNX0dST1VQUywgJzE9MScpOw0KCQlmb3JlYWNoICgkbmV3 X2dyb3VwcyBhcyAkcm93KSB7DQoJCQkkdHhwX2dyb3Vwc1skcm93WydpZCddXSA9ICRyb3db J25hbWUnXTsNCgkJfQ0KCQlrc29ydCgkdHhwX2dyb3Vwcyk7DQoJfQ0KCWlmICgkZG9fcHJp diAmJiBzbWRfdW1fdGFibGVfZXhpc3QoU01EX1VNX1BSSVZTKSkgew0KCQkkbmV3X3ByaXZz ID0gc2FmZV9yb3dzKCdhcmVhLCBHUk9VUF9DT05DQVQocHJpdikgQVMgcHJpdnMnLCBTTURf VU1fUFJJVlMsICcxPTEgR1JPVVAgQlkgYXJlYSBPUkRFUiBCWSBhcmVhJyk7DQoNCgkJLy8g QWxsb3cgdGhpcyBwbHVnaW4ncyBzdHJpbmdzIHRvIGJlIHNraXBwZWQgaWYgd2UgZG9uJ3Qg d2FudCBwZW9wbGUgdXBzZXR0aW5nIHRoZSBwbHVnaW4ncyBiZWhhdmlvdXINCgkJJHNlbGZf ZWRpdCA9IGdldF9wcmVmKCdzbWRfdW1fc2VsZl9hbHRlcicsICRzbWRfdW1fcHJlZnNbJ3Nt ZF91bV9zZWxmX2FsdGVyJ11bJ2RlZmF1bHQnXSk7DQoJCWZvcmVhY2ggKCRuZXdfcHJpdnMg YXMgJHJvdykgew0KCQkJaWYgKHN0cnBvcygkcm93WydhcmVhJ10sICdzbWRfdW0nKSA9PT0g ZmFsc2UgfHwgJHNlbGZfZWRpdCkgew0KCQkJCSR0eHBfcGVybWlzc2lvbnNbJHJvd1snYXJl YSddXSA9ICRyb3dbJ3ByaXZzJ107DQoJCQl9DQoJCX0NCgkJa3NvcnQoJHR4cF9wZXJtaXNz aW9ucyk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFNob3cg d2hvJ3MgY3VycmVudGx5IG9ubGluZQ0KZnVuY3Rpb24gc21kX3VtX2FjdGl2ZV91c2Vycygp IHsNCglnbG9iYWwgJHNtZF91bV9ldmVudCwgJHNtZF91bV9wcmVmczsNCg0KCSRjdXJyX3Vz ZXJzID0gdW5zZXJpYWxpemUoZ2V0X3ByZWYoJ3NtZF91bV9jdXJyZW50X3VzZXJzJywgJycs IDEpKTsNCgkkdGltZW91dCA9IGdldF9wcmVmKCdzbWRfdW1fYWN0aXZlX3RpbWVvdXQnLCAk c21kX3VtX3ByZWZzWydzbWRfdW1fYWN0aXZlX3RpbWVvdXQnXVsnZGVmYXVsdCddKTsNCgkk b25saW5lID0gYXJyYXkoKTsNCglpZiAoaXNfYXJyYXkoJGN1cnJfdXNlcnMpKSB7DQoJCWZv cmVhY2ggKCRjdXJyX3VzZXJzIGFzICR1c2VyID0+ICRsYXN0X2FjY2Vzcykgew0KCQkJJHN0 aWxsX2FjdGl2ZSA9IHN0cnRvdGltZSgiKyR0aW1lb3V0IHNlY29uZHMiLCAkbGFzdF9hY2Nl c3MpOw0KCQkJaWYgKCAoJHN0aWxsX2FjdGl2ZSAhPT0gZmFsc2UpICYmICgkc3RpbGxfYWN0 aXZlID4gdGltZSgpKSApIHsNCgkJCQkkb25saW5lW10gPSBlTGluaygkc21kX3VtX2V2ZW50 LCAnJywgJ3NlYXJjaF9tZXRob2QnLCAnbG9naW5fbmFtZScsICR1c2VyLCAnY3JpdCcsICR1 c2VyKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCXJldHVybiAoJG9ubGluZSkgPyAnPGRpdiBjbGFz cz0ic21kX3VtX2FjdGl2ZV91c2VycyI+JyAuIHNtZF91bV9nVHh0KCdzbWRfdW1fYWN0aXZl JykgLiBqb2luKCcsICcsICRvbmxpbmUpIC4gJzwvZGl2PicgOiAnJzsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBVcGRhdGUgYW55IGxhbmd1YWdlIHN0cmluZy4g Tm90ZSB0aGlzIG1heSBsZWF2ZSBvcnBoYW4gc3RyaW5ncyBpZiB0aGUgbmFtZSBpcyBjaGFu Z2VkDQpmdW5jdGlvbiBzbWRfdW1fdXBzZXJ0X2xhbmcoJHRpdGxlLCAkbmFtZT0nJykgew0K CWdsb2JhbCAkdGV4dGFycmF5Ow0KDQoJJGxhbmcgPSBnZXRfcHJlZignbGFuZ3VhZ2UnLCAn ZW4tZ2InKTsNCgkkbmFtZSA9IChpc3NldCgkbmFtZSkgJiYgJG5hbWUgIT0gJycpID8gJG5h bWUgOiBzdHJ0b2xvd2VyKHNhbml0aXplRm9yVXJsKCR0aXRsZSkpOw0KCSR0YWJsZSA9ICd0 eHBfbGFuZyc7DQoJJHdoZXJlID0gIm5hbWU9JyIgLiBkb1NsYXNoKCRuYW1lKSAuICInIEFO RCBsYW5nPSciIC4gZG9TbGFzaCgkbGFuZykgLiAiJyI7DQoNCgkvLyBUcnkgdG8gdXBkYXRl IGZpcnN0DQoJJHJldCA9IHNhZmVfdXBkYXRlKCR0YWJsZSwgImRhdGE9JyIgLiBkb1NsYXNo KCR0aXRsZSkgLiAiJyIsICR3aGVyZSk7DQoJaWYgKCRyZXQgJiYgKG15c3FsX2FmZmVjdGVk X3Jvd3MoKSB8fCBzYWZlX2NvdW50KCR0YWJsZSwgJHdoZXJlKSkpIHsNCgkJLy8gRG8gbm90 aGluZyAtLSByZWNvcmQgaGFzIGJlZW4gdXBkYXRlZA0KCX0gZWxzZSB7DQoJCXNhZmVfaW5z ZXJ0KCR0YWJsZSwgImV2ZW50PSdhZG1pbicsIG5hbWU9JyIgLiBkb1NsYXNoKCRuYW1lKSAu ICInLCBsYW5nPSciIC4gZG9TbGFzaCgkbGFuZykgLiAiJywgZGF0YT0nIiAuIGRvU2xhc2go JHRpdGxlKSAuICInIik7DQoJfQ0KCS8vIFVwZGF0ZSB0aGUgZ2xvYmFsIGFycmF5IG9uIHRo ZSBwYWdlIHNvIGd0eHQoKSBjYW4gZ2V0IGl0IGltbWVkaWF0ZWx5DQoJJHRleHRhcnJheVsk bmFtZV0gPSAkdGl0bGU7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gc21kX3VtX2dldF9ncm91cHMoJHR5cGU9MCkgew0KCWdsb2JhbCAkdHhwX2dyb3Vw cywgJHR4cF91c2VyLCAkc21kX3VtX3ByZWZzOw0KCXN0YXRpYyAkcGVybWl0dGVkX3VzZXJz ID0gYXJyYXkoKTsNCg0KCWlmIChpc3NldCgkcGVybWl0dGVkX3VzZXJzWyR0eXBlXSkpIHsN CgkJcmV0dXJuICRwZXJtaXR0ZWRfdXNlcnNbJHR5cGVdOw0KCX0NCg0KCSRsZXZlbHMgPSAo JHR5cGUpID8gZ2V0X2dyb3VwcygpIDogJHR4cF9ncm91cHM7DQoJJHRpZXJlZCA9IGdldF9w cmVmKCdzbWRfdW1faGllcmFyY2hpY2FsX2dyb3VwcycsICRzbWRfdW1fcHJlZnNbJ3NtZF91 bV9oaWVyYXJjaGljYWxfZ3JvdXBzJ11bJ2RlZmF1bHQnXSk7DQoJJGN1cnJfcHJpdiA9IHNh ZmVfZmllbGQoJ3ByaXZzJywgJ3R4cF91c2VycycsICJuYW1lID0gJyIgLmRvU2xhc2goJHR4 cF91c2VyKS4gIiciKTsNCg0KCWlmIChzbWRfdW1fdGFibGVfZXhpc3QoU01EX1VNX0dST1VQ UykpIHsNCgkJJHByb3RlY3RlZCA9IGdldF9wcmVmKCdzbWRfdW1fYWRtaW5fZ3JvdXAnLCAk c21kX3VtX3ByZWZzWydzbWRfdW1fYWRtaW5fZ3JvdXAnXVsnZGVmYXVsdCddKTsNCgkJJGdy cCA9IHNhZmVfcm93cygnaWQsIG5hbWUnLCBTTURfVU1fR1JPVVBTLCAnMT0xJyk7DQoJCWZv cmVhY2ggKCRncnAgYXMgJHJvdykgew0KCQkJaWYgKCRwcm90ZWN0ZWQgJiYgKCRyb3dbJ2lk J10gPT0gJHByb3RlY3RlZCkgJiYgKCRjdXJyX3ByaXYgIT0gJHByb3RlY3RlZCkgKSB7DQoJ CQkJdW5zZXQoJGxldmVsc1skcm93WydpZCddXSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRsZXZl bHNbJHJvd1snaWQnXV0gPSAoKCR0eXBlKSA/IGdUeHQoJHJvd1snbmFtZSddKSA6ICRyb3db J25hbWUnXSk7DQoJCQl9DQoJCX0NCgl9DQoNCglpZiAoJHRpZXJlZCkgew0KCQkvLyBSZW1v dmUgYW55IHByaXZzIGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyDQoJ CWZvcmVhY2ggKCRsZXZlbHMgYXMgJHByaXYgPT4gJG5hbWUpIHsNCgkJCWlmICggKCRwcml2 ID09IDApIHx8ICgkcHJpdiA+PSAkY3Vycl9wcml2KSApIHsNCgkJCQkkcGVybWl0dGVkX3Vz ZXJzWyR0eXBlXVskcHJpdl0gPSAkbmFtZTsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7DQoJCSRw ZXJtaXR0ZWRfdXNlcnNbJHR5cGVdID0gJGxldmVsczsNCgl9DQoNCglrc29ydCgkcGVybWl0 dGVkX3VzZXJzWyR0eXBlXSk7DQoNCglyZXR1cm4gJHBlcm1pdHRlZF91c2Vyc1skdHlwZV07 DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gc21kX3VtX211 bHRpZWRpdF9mb3JtKCRwYWdlLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9k KSB7DQoJJG1ldGhvZHMgPSBhcnJheSgNCgkJJ2NoYW5nZXByaXZpbGVnZScgPT4gZ1R4dCgn Y2hhbmdlcHJpdmlsZWdlJyksDQoJCSdyZXNldHBhc3N3b3JkJyA9PiBnVHh0KCdyZXNldHBh c3N3b3JkJyksDQoJCSdkZWxldGUnID0+IGdUeHQoJ2RlbGV0ZScpDQoJKTsNCg0KCWlmIChz YWZlX2NvdW50KCd0eHBfdXNlcnMnLCAnMT0xJykgPD0gMSkgdW5zZXQoJG1ldGhvZHNbJ2Rl bGV0ZSddKTsNCg0KCXJldHVybiBldmVudF9tdWx0aWVkaXRfZm9ybSgnc21kX3VtJywgJG1l dGhvZHMsICRwYWdlLCAkc29ydCwgJGRpciwgJGNyaXQsICRzZWFyY2hfbWV0aG9kKTsNCn0N Cg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBDbG9uZWQgYW5kIHR3ZWFrZWQg ZnJvbSBBZG1pbiB0YWIgOi0oDQpmdW5jdGlvbiBzbWRfdW1fbXVsdGlfZWRpdCgpIHsNCgln bG9iYWwgJHNtZF91bV9ldmVudCwgJHNtZF91bV9wcmVmcywgJHR4cF91c2VyOw0KDQoJcmVx dWlyZV9wcml2cygkc21kX3VtX2V2ZW50LicudXNyLmVkaXQnKTsNCg0KCSRzZWxlY3RlZCA9 IHBzKCdzZWxlY3RlZCcpOw0KCSRtZXRob2QgICA9IHBzKCdlZGl0X21ldGhvZCcpOw0KCSRj aGFuZ2VkICA9IGFycmF5KCk7DQoNCglpZiAoISRzZWxlY3RlZCBvciAhaXNfYXJyYXkoJHNl bGVjdGVkKSkNCgl7DQoJCXJldHVybiAkc21kX3VtX2V2ZW50KCk7DQoJfQ0KDQoJJG5hbWVz ID0gc2FmZV9jb2x1bW4oJ25hbWUnLCAndHhwX3VzZXJzJywgIm5hbWUgSU4gKCciLmpvaW4o IicsJyIsIGRvU2xhc2goJHNlbGVjdGVkKSkuIicpIEFORCBuYW1lICE9ICciLmRvU2xhc2go JHR4cF91c2VyKS4iJyIpOw0KDQoJaWYgKCEkbmFtZXMpIHJldHVybiAkc21kX3VtX2V2ZW50 KCk7DQoNCglzd2l0Y2ggKCRtZXRob2QpIHsNCgkJY2FzZSAnZGVsZXRlJzoNCgkJCSRhc3Np Z25fYXNzZXRzID0gcHMoJ2Fzc2lnbl9hc3NldHMnKTsNCgkJCWlmICgkYXNzaWduX2Fzc2V0 cyA9PT0gJycpIHsNCgkJCQkkbXNnID0gYXJyYXkoJ211c3RfcmVhc3NpZ25fYXNzZXRzJywg RV9FUlJPUik7DQoJCQl9IGVsc2VpZiAoaW5fYXJyYXkoJGFzc2lnbl9hc3NldHMsICRuYW1l cykpIHsNCgkJCQkkbXNnID0gYXJyYXkoJ2Nhbm5vdF9hc3NpZ25fYXNzZXRzX3RvX2RlbGV0 ZWUnLCBFX0VSUk9SKTsNCgkJCX0gZWxzZWlmIChzYWZlX2RlbGV0ZSgndHhwX3VzZXJzJywg Im5hbWUgSU4gKCciLmpvaW4oIicsJyIsIGRvU2xhc2goJG5hbWVzKSkuIicpIikpIHsNCgkJ CQkkY2hhbmdlZCA9ICRuYW1lczsNCgkJCQkkYXNzaWduX2Fzc2V0cyA9IGRvU2xhc2goJGFz c2lnbl9hc3NldHMpOw0KCQkJCSRuYW1lcyA9IGpvaW4oIicsJyIsIGRvU2xhc2goJG5hbWVz KSk7DQoNCgkJCQkvLyBkZWxldGUgcHJpdmF0ZSBwcmVmcw0KCQkJCXNhZmVfZGVsZXRlKCd0 eHBfcHJlZnMnLCAidXNlcl9uYW1lIElOICgnJG5hbWVzJykiKTsNCg0KCQkJCS8vIGFzc2ln biBkYW5nbGluZyBhc3NldHMgdG8gdGhlaXIgbmV3IG93bmVyDQoJCQkJJHJlYXNzaWduID0g YXJyYXkoDQoJCQkJCSd0ZXh0cGF0dGVybicgPT4gJ0F1dGhvcklEJywNCgkJCQkJJ3R4cF9m aWxlJyAJPT4gJ2F1dGhvcicsDQoJCQkJCSd0eHBfaW1hZ2UnID0+ICdhdXRob3InLA0KCQkJ CQkndHhwX2xpbmsnIAk9PiAnYXV0aG9yJywNCgkJCQkpOw0KCQkJCWZvcmVhY2ggKCRyZWFz c2lnbiBhcyAkdGFibGUgPT4gJGNvbCkgew0KCQkJCQlzYWZlX3VwZGF0ZSgkdGFibGUsICIk Y29sPSckYXNzaWduX2Fzc2V0cyciLCAiJGNvbCBJTiAoJyRuYW1lcycpIik7DQoJCQkJfQ0K CQkJCSRtc2cgPSAnYXV0aG9yX2RlbGV0ZWQnOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2Ug J2NoYW5nZXByaXZpbGVnZSc6DQoJCQkkbGV2ZWxzID0gc21kX3VtX2dldF9ncm91cHMoMSk7 DQoJCQkkcHJpdmlsZWdlID0gcHMoJ3ByaXZzJyk7DQoNCgkJCWlmICghaXNzZXQoJGxldmVs c1skcHJpdmlsZWdlXSkpIHJldHVybiAkc21kX3VtX2V2ZW50KCk7DQoNCgkJCWlmIChzYWZl X3VwZGF0ZSgndHhwX3VzZXJzJywgJ3ByaXZzID0gJy5pbnR2YWwoJHByaXZpbGVnZSksICJu YW1lIElOICgnIi5qb2luKCInLCciLCBkb1NsYXNoKCRuYW1lcykpLiInKSIpKSB7DQoJCQkJ JGNoYW5nZWQgPSAkbmFtZXM7DQoJCQkJJG1zZyA9ICdhdXRob3JfdXBkYXRlZCc7DQoJCQl9 DQoJCQlicmVhazsNCg0KCQljYXNlICdyZXNldHBhc3N3b3JkJzoNCgkJCSRmYWlsZWQgID0g YXJyYXkoKTsNCgkJCSRwYXNzX2xlbiA9IGdldF9wcmVmKCdzbWRfdW1fcGFzc19sZW5ndGgn LCAkc21kX3VtX3ByZWZzWydzbWRfdW1fcGFzc19sZW5ndGgnXVsnZGVmYXVsdCddKTsNCg0K CQkJZm9yZWFjaCAoJG5hbWVzIGFzICRuYW1lKSB7DQoJCQkJJHBhc3N3ZCA9IGdlbmVyYXRl X3Bhc3N3b3JkKCRwYXNzX2xlbik7DQoJCQkJJGhhc2ggPSBkb1NsYXNoKHR4cF9oYXNoX3Bh c3N3b3JkKCRwYXNzd2QpKTsNCg0KCQkJCWlmIChzYWZlX3VwZGF0ZSgndHhwX3VzZXJzJywg InBhc3MgPSAnJGhhc2gnIiwgIm5hbWUgPSAnIi5kb1NsYXNoKCRuYW1lKS4iJyIpKSB7DQoJ CQkJCSRlbWFpbCA9IHNhZmVfZmllbGQoJ2VtYWlsJywgJ3R4cF91c2VycycsICJuYW1lID0g JyIuZG9TbGFzaCgkbmFtZSkuIiciKTsNCg0KCQkJCQlpZiAoc2VuZF9uZXdfcGFzc3dvcmQo JHBhc3N3ZCwgJGVtYWlsLCAkbmFtZSkpIHsNCgkJCQkJCSRjaGFuZ2VkW10gPSAkbmFtZTsN CgkJCQkJCSRtc2cgPSAnYXV0aG9yX3VwZGF0ZWQnOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJ JG1zZyA9IChhcnJheShnVHh0KCdjb3VsZF9ub3RfbWFpbCcpLicgJy5odG1sc3BlY2lhbGNo YXJzKCRuYW1lKSwgRV9FUlJPUikpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJYnJlYWs7 DQoJfQ0KDQoJaWYgKCRjaGFuZ2VkKSB7DQoJCXJldHVybiAkc21kX3VtX2V2ZW50KGdUeHQo JG1zZywgYXJyYXkoJ3tuYW1lfScgPT4gaHRtbHNwZWNpYWxjaGFycyhqb2luKCcsICcsICRj aGFuZ2VkKSkpKSk7DQoJfQ0KDQoJJHNtZF91bV9ldmVudCgkbXNnKTsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBNb3N0bHkgY2xvbmVkIGZyb20gQWRtaW4tPlVz ZXJzIHRhYg0KZnVuY3Rpb24gc21kX3VtX2NoYW5nZV9wYXNzX2Zvcm0oJHVzZXJfbmFtZSwg JHVzZXJfaWQpIHsNCglnbG9iYWwgJHNtZF91bV9ldmVudDsNCglyZXR1cm4gJzxkaXYgc3R5 bGU9Im1hcmdpbjogM2VtIGF1dG8gYXV0byBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4n Lg0KCWZvcm0oDQoJCXRhZyhnVHh0KCdjaGFuZ2VfcGFzc3dvcmQnKSwgJ2gzJykuDQoNCgkJ Z3JhZignPGxhYmVsIGZvcj0ibmV3X3Bhc3MiPicuZ1R4dCgnbmV3X3Bhc3N3b3JkJykuJzwv bGFiZWw+ICcuDQoJCQlmSW5wdXQoJ3Bhc3N3b3JkJywgJ25ld19wYXNzJywgJycsICdlZGl0 JywgJycsICcnLCAnMjAnLCAnMScsICduZXdfcGFzcycpLg0KCQkJY2hlY2tib3goJ21haWxf cGFzc3dvcmQnLCAnMScsIHRydWUsICcnLCAnbWFpbF9wYXNzd29yZCcpLic8bGFiZWwgZm9y PSJtYWlsX3Bhc3N3b3JkIj4nLmdUeHQoJ21haWxfaXQnKS4nPC9sYWJlbD4gJy4NCgkJCWhJ bnB1dCgndXNlcl9uYW1lJywgJHVzZXJfbmFtZSkuDQoJCQloSW5wdXQoJ3VzZXJfaWQnLCAk dXNlcl9pZCkuDQoJCQlmSW5wdXQoJ3N1Ym1pdCcsICdjaGFuZ2VfcGFzcycsIGdUeHQoJ3N1 Ym1pdCcpLCAnc21hbGxlcmJveCcpLg0KCQkJZUlucHV0KCRzbWRfdW1fZXZlbnQpLg0KCQkJ c0lucHV0KCdzbWRfdW1fY2hhbmdlX3Bhc3MnKQ0KCQksJyBzdHlsZT0idGV4dC1hbGlnbjog Y2VudGVyOyInKQ0KCSwgJycsICcnLCAncG9zdCcsICcnLCAnJywgJ2NoYW5nZV9wYXNzd29y ZCcpLic8L2Rpdj4nOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIE1v c3RseSBjbG9uZWQgZnJvbSBBZG1pbi0+VXNlcnMgdGFiDQpmdW5jdGlvbiBzbWRfdW1fY2hh bmdlX3Bhc3MoKSB7DQoJZ2xvYmFsICR0eHBfdXNlcjsNCg0KCWV4dHJhY3QocHNhKGFycmF5 KCduZXdfcGFzcycsICdtYWlsX3Bhc3N3b3JkJywgJ3VzZXJfbmFtZScsICd1c2VyX2lkJykp KTsNCg0KCWlmIChlbXB0eSgkbmV3X3Bhc3MpKSB7DQoJCXNtZF91bV9lZGl0KGFycmF5KGdU eHQoJ3Bhc3N3b3JkX3JlcXVpcmVkJyksIEVfRVJST1IpKTsNCgkJcmV0dXJuOw0KCX0NCg0K CWlmIChlbXB0eSgkdXNlcl9uYW1lKSkgJHVzZXJfbmFtZSA9ICR0eHBfdXNlcjsNCgkkaGFz aCA9IGRvU2xhc2godHhwX2hhc2hfcGFzc3dvcmQoJG5ld19wYXNzKSk7DQoJJHVzZXJfaWQg PSBhc3NlcnRfaW50KCR1c2VyX2lkKTsNCgkkcnMgPSBzYWZlX3VwZGF0ZSgndHhwX3VzZXJz JywgInBhc3MgPSAnJGhhc2gnIiwgInVzZXJfaWQgPSAkdXNlcl9pZCIpOw0KDQoJaWYgKCRy cykgew0KCQkkbXNnID0gZ1R4dCgncGFzc3dvcmRfY2hhbmdlZCcpOw0KDQoJCWlmICgkbWFp bF9wYXNzd29yZCkgew0KCQkJJGVtYWlsID0gZmV0Y2goJ2VtYWlsJywgJ3R4cF91c2Vycycs ICd1c2VyX2lkJywgJHVzZXJfaWQpOw0KCQkJc2VuZF9uZXdfcGFzc3dvcmQoJG5ld19wYXNz LCAkZW1haWwsICR1c2VyX25hbWUpOw0KCQkJJG1zZyAuPSBzcC5nVHh0KCdhbmRfbWFpbGVk X3RvJykuc3AuJGVtYWlsOw0KCQl9IGVsc2Ugew0KCQkJZWNobyBjb21tZW50KG15c3FsX2Vy cm9yKCkpOw0KCQl9DQoNCgkJJG1zZyAuPSAnLic7DQoJfSBlbHNlIHsNCgkJJG1zZyA9IGFy cmF5KGdUeHQoJ3NtZF91bV9wYXNzX2NoYW5nZV9lcnJvcicpLCBFX0VSUk9SKTsNCgl9DQoJ c21kX3VtX2VkaXQoJG1zZyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX3VtX3NhdmVfcGFuZV9zdGF0ZSgpIHsNCglnbG9iYWwgJHNtZF91bV9l dmVudDsNCg0KCSRwYW5lID0gc3RyX3JlcGxhY2UoJ3NtZF91bV9wcml2XycsICcnLCBncHMo J3BhbmUnKSk7DQoJJGN1cnIgPSBkb19saXN0KGdldF9wcmVmKCdwYW5lX3NtZF91bV9wcml2 X3Zpc2libGUnKSk7DQoJJHZpc2libGUgPSBncHMoJ3Zpc2libGUnKTsNCglpZiAoJHZpc2li bGUgPT0gJ3RydWUnKSB7DQoJCSRjdXJyW10gPSAkcGFuZTsNCgl9IGVsc2Ugew0KCQkkcG9z ID0gYXJyYXlfc2VhcmNoKCRwYW5lLCAkY3Vycik7DQoJCWlmICgkcG9zICE9PSBmYWxzZSkg ew0KCQkJdW5zZXQoJGN1cnJbJHBvc10pOw0KCQl9DQoJfQ0KDQoJJGN1cnIgPSBhcnJheV91 bmlxdWUoJGN1cnIpOw0KDQoJc2V0X3ByZWYoInBhbmVfc21kX3VtX3ByaXZfdmlzaWJsZSIs IChqb2luKCcsJywgJGN1cnIpKSwgJHNtZF91bV9ldmVudCwgUFJFRl9ISURERU4sICd0ZXh0 X2lucHV0JywgMCwgUFJFRl9QUklWQVRFKTsNCglzZW5kX3htbF9yZXNwb25zZSgpOw0KfQ0K DQovLyAqKioqKioqKioqKioqKioqDQovLyBUQUJMRSBNQU5BR0VNRU5UDQovLyAqKioqKioq KioqKioqKioqDQovLyBBZGQgZ3JvdXAvcHJpdiB0YWJsZXMgaWYgbm90IGFscmVhZHkgaW5z dGFsbGVkDQpmdW5jdGlvbiBzbWRfdW1fdGFibGVfaW5zdGFsbCgkc2hvd3BhbmU9JzEnKSB7 DQoJZ2xvYmFsICRzbWRfdW1fZXZlbnQsICR0eHBfZ3JvdXBzLCAkdHhwX3Blcm1pc3Npb25z Ow0KDQoJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9IDA7DQoJJHJldCA9ICcnOw0KCSRz cWwgPSBhcnJheSgpOw0KDQoJLy8gSW4gdHJ1dGgsIHRoaXMgdGFibGUgc2hvdWxkIGJlIG5v cm1hbGlzZWQgZnVydGhlciwgYnV0IGZvciB0aGUgc2FrZQ0KCS8vIG9mIG9uZSByb3cgcGVy IHByaXYgbGV2ZWwgcGVyIGFyZWEsIGl0J3MgcXVpY2tlciB0aGFuIGEgam9pbiwgYW5kDQoJ Ly8gdXNpbmcgR1JPVVBfQ09OQ0FUKCkgZ2V0cyB0aGUgcHJpdiB0YWJsZSBhcyBpbiBhZG1p bi5jb25maWcucGhwDQoJJHNxbFtdID0gIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGAi LlBGWC5TTURfVU1fUFJJVlMuImAgKA0KCQlgYXJlYWAgdmFyY2hhcigxMjcpIE5PVCBOVUxM IGRlZmF1bHQgJycsDQoJCWBwcml2YCBzbWFsbGludCBOT1QgTlVMTCBkZWZhdWx0IDAsDQoJ CVBSSU1BUlkgS0VZIChgYXJlYWAsYHByaXZgKQ0KCSkgRU5HSU5FPU15SVNBTSI7DQoNCgkv LyBpZCBpcyBOT1QgYW4gYXV0b19pbmNyZW1lbnQgY29sdW1tbiBiZWNhdXNlIGF1dG9pbmMg ZG9lc24ndCBhbGxvdyBhIDAgZW50cnksIHdoaWNoIHdlIG5lZWQgZm9yICdOb25lJw0KCSRz cWxbXSA9ICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBgIi5QRlguU01EX1VNX0dST1VQ Uy4iYCAoDQoJCWBpZGAgc21hbGxpbnQoNCkgTk9UIE5VTEwgZGVmYXVsdCAwLA0KCQlgbmFt ZWAgdmFyY2hhcig2NCkgTk9UIE5VTEwgZGVmYXVsdCAnJywNCgkJYGNvcmVgIGJvb2wgTk9U IE5VTEwgZGVmYXVsdCAwLA0KCQlQUklNQVJZIEtFWSAoYGlkYCkNCgkpIEVOR0lORT1NeUlT QU0gUEFDS19LRVlTPTEiOw0KDQoJLy8gSGFuZGxlIHVwZ3JhZGVzOiBiZSBraW5kIHRvIGJl dGEgdGVzdGVycw0KCWlmIChzbWRfdW1fdGFibGVfZXhpc3QoU01EX1VNX1BSSVZTKSkgew0K CQkkZmxkcyA9IGdldFRoaW5ncygnU0hPVyBDT0xVTU5TIEZST00gYCcuUEZYLlNNRF9VTV9Q UklWUy4nYCcpOw0KCQlpZiAoaW5fYXJyYXkoJ2NvcmUnLCRmbGRzKSkgew0KCQkJJHNxbFtd ID0gIkFMVEVSIFRBQkxFIGAiLlBGWC5TTURfVU1fUFJJVlMuImAgRFJPUCBgY29yZWAiOw0K CQl9DQoJfQ0KDQoJLy8gQXBwZW5kIGluaXRpYWwgdmFsdWUgcG9wdWxhdGlvbiB0byBxdWVy eSBzdGFjayBpZiB0aGlzIGlzIGEgbmV3IGluc3RhbGwNCglpZiAoIXNtZF91bV90YWJsZV9l eGlzdChTTURfVU1fR1JPVVBTKSkgew0KCQlmb3JlYWNoICgkdHhwX2dyb3VwcyBhcyAkaWQg PT4gJG5hbWUpIHsNCgkJCSRzcWxbXSA9ICJJTlNFUlQgSU5UTyBgIi5QRlguU01EX1VNX0dS T1VQUy4iYCBWQUxVRVMgKCckaWQnLCAnJG5hbWUnLCAxKSI7DQoJCX0NCgl9DQoJaWYgKCFz bWRfdW1fdGFibGVfZXhpc3QoU01EX1VNX1BSSVZTKSkgew0KCQlmb3JlYWNoICgkdHhwX3Bl cm1pc3Npb25zIGFzICRhcmVhID0+ICRwcml2cykgew0KCQkJJHByaXZfbGlzdCA9IGRvX2xp c3QoJHByaXZzKTsNCgkJCWZvcmVhY2ggKCRwcml2X2xpc3QgYXMgJHByaXYpIHsNCgkJCQkk c3FsW10gPSAiSU5TRVJUIElOVE8gYCIuUEZYLlNNRF9VTV9QUklWUy4iYCBWQUxVRVMgKCck YXJlYScsICckcHJpdicpIjsNCgkJCX0NCgkJfQ0KCX0NCg0KCWlmKGdwcygnZGVidWcnKSkg ew0KCQlkbXAoJHNxbCk7DQoJfQ0KCWZvcmVhY2ggKCRzcWwgYXMgJHFyeSkgew0KCQkkcmV0 ID0gc2FmZV9xdWVyeSgkcXJ5KTsNCgkJaWYgKCRyZXQ9PT1mYWxzZSkgew0KCQkJJEdMT0JB TFNbJ3R4cF9lcnJfY291bnQnXSsrOw0KCQkJZWNobyAiPGI+Ii4kR0xPQkFMU1sndHhwX2Vy cl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxiciAvPlxuIjsNCgkJCWVjaG8g IjwhLS1cbiAkcXJ5IFxuLS0+XG4iOw0KCQl9DQoJfQ0KDQoJLy8gU3BpdCBvdXQgcmVzdWx0 cw0KCWlmICgkR0xPQkFMU1sndHhwX2Vycl9jb3VudCddID09IDApIHsNCgkJaWYgKCRzaG93 cGFuZSkgew0KCQkJJG1zZyA9IHNtZF91bV9nVHh0KCdzbWRfdW1fdGJsX2luc3RhbGxlZCcp Ow0KCQkJJHNtZF91bV9ldmVudCgkbXNnKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCWlmICgkc2hv d3BhbmUpIHsNCgkJCSRtc2cgPSBzbWRfdW1fZ1R4dCgnc21kX3VtX3RibF9ub3RfaW5zdGFs bGVkJyk7DQoJCQkkc21kX3VtX2V2ZW50KCRtc2cpOw0KCQl9DQoJfQ0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIERyb3AgdGFibGUgaWYgaW4gZGF0YWJhc2UNCmZ1 bmN0aW9uIHNtZF91bV90YWJsZV9yZW1vdmUoKSB7DQoJZ2xvYmFsICRzbWRfdW1fZXZlbnQ7 DQoNCgkkcmV0ID0gJyc7DQoJJHNxbCA9IGFycmF5KCk7DQoJJEdMT0JBTFNbJ3R4cF9lcnJf Y291bnQnXSA9IDA7DQoJaWYgKHNtZF91bV90YWJsZV9leGlzdCgpKSB7DQoJCSRzcWxbXSA9 ICJEUk9QIFRBQkxFIElGIEVYSVNUUyAiIC5QRlguU01EX1VNX1BSSVZTLiAiOyAiOw0KCQkk c3FsW10gPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgIiAuUEZYLlNNRF9VTV9HUk9VUFMuICI7 ICI7DQoJCWlmKGdwcygnZGVidWcnKSkgew0KCQkJZG1wKCRzcWwpOw0KCQl9DQoJCWZvcmVh Y2ggKCRzcWwgYXMgJHFyeSkgew0KCQkJJHJldCA9IHNhZmVfcXVlcnkoJHFyeSk7DQoJCQlp ZiAoJHJldD09PWZhbHNlKSB7DQoJCQkJJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSsrOw0K CQkJCWVjaG8gIjxiPiIuJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXS4iLjwvYj4gIi5teXNx bF9lcnJvcigpLiI8YnIgLz5cbiI7DQoJCQkJZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7 DQoJCQl9DQoJCX0NCgl9DQoJaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPT0gMCkg ew0KCQkkbXNnID0gc21kX3VtX2dUeHQoJ3NtZF91bV90YmxfcmVtb3ZlZCcpOw0KCX0gZWxz ZSB7DQoJCSRtc2cgPSBzbWRfdW1fZ1R4dCgnc21kX3VtX3RibF9ub3RfcmVtb3ZlZCcpOw0K CQkkc21kX3VtX2V2ZW50KCRtc2cpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tDQpmdW5jdGlvbiBzbWRfdW1fdGFibGVfZXhpc3QoJHdoaWNoPScnKSB7DQoJc3Rh dGljICRzbWRfdW1faW5zdGFsbGVkID0gYXJyYXkoKTsNCg0KCS8vIFRoZSBudW1iZXIgb2Yg ZXhwZWN0ZWQgY29scyBpbiBlYWNoIHRhYmxlDQoJJHRibHMgPSBhcnJheSgNCgkJU01EX1VN X0dST1VQUyA9PiAzLA0KCQlTTURfVU1fUFJJVlMgPT4gMiwNCgkpOw0KDQoJaWYgKCR3aGlj aCAmJiBhcnJheV9rZXlfZXhpc3RzKCR3aGljaCwgJHRibHMpICYmIGlzc2V0KCRzbWRfdW1f aW5zdGFsbGVkWyR3aGljaF0pKSB7DQoJCXJldHVybiAoJHNtZF91bV9pbnN0YWxsZWRbJHdo aWNoXSA9PSAkdGJsc1skd2hpY2hdKTsNCgl9DQoNCglpZiAoJHdoaWNoID09ICcxJykgew0K CQkkb3V0ID0gY291bnQoJHRibHMpOw0KCQlmb3JlYWNoICgkdGJscyBhcyAkdGJsID0+ICRj b2xzKSB7DQoJCQkkbnVtID0gY291bnQoQHNhZmVfc2hvdygnY29sdW1ucycsICR0YmwpKTsN CgkJCSRzbWRfdW1faW5zdGFsbGVkWyR0YmxdID0gJG51bTsNCgkJCSRvdXQgLT0gKCR0Ymxz WyR0YmxdID09ICRudW0pID8gMSA6IDA7DQoJCX0NCgkJcmV0dXJuICgkb3V0PT09MCkgPyAx IDogMDsNCgl9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJHdoaWNoLCAkdGJscykpIHsN CgkJJG51bSA9IGNvdW50KEBzYWZlX3Nob3coJ2NvbHVtbnMnLCAkd2hpY2gpKTsNCgkJJHNt ZF91bV9pbnN0YWxsZWRbJHdoaWNoXSA9ICRudW07DQoJCXJldHVybiAoJHNtZF91bV9pbnN0 YWxsZWRbJHdoaWNoXSA9PSAkdGJsc1skd2hpY2hdKTsNCgl9DQoNCglyZXR1cm4gZmFsc2U7 DQp9DQoNCg0KLy8qKioqKioqKioqKioqKioqKg0KLy8gUFVCTElDIFNJREUgVEFHUw0KLy8g VGhvdWdoIHdlIGNvdWxkIGxvYWQgYWxsICR0eHBfcGVybWlzc2lvbnMgLyAkdHhwX2dyb3Vw cyB0byB0aGUgcHVibGljIHNpZGUgZm9yIHNwZWVkLA0KLy8gZXhwb3NpbmcgcGVybWlzc2lv bnMgdG8gdGhlIHdvcmxkIGlzIG5vdCBzdWNoIGEgaG90IGlkZWEuIFRoZXJlZm9yZSB0aGUg cHJpdnMgYXJlDQovLyBmZXRjaGVkIGFkLWhvYyBhbmQgY2FjaGVkDQovL1RPRE86IDwgPiAg Z3JvdXAgdmFsdWUNCmZ1bmN0aW9uIHNtZF91bV9oYXNfcHJpdnMoJGF0dHMsICR0aGluZz1O VUxMKSB7DQoJZ2xvYmFsICR0eHBfdXNlcjsNCglzdGF0aWMgJHNtZF91bV9wZXJtaXNzaW9u czsNCglzdGF0aWMgJHNtZF91bV9ncm91cHM7DQoJc3RhdGljICRzbWRfaWxpID0gMDsNCg0K CWV4dHJhY3QobEF0dHMoYXJyYXkoDQoJCSduYW1lJyAgPT4gJycsDQoJCSdncm91cCcgPT4g JycsDQoJCSdhcmVhJyAgPT4gJycsDQoJCSdkZWJ1ZycgPT4gMCwNCgkpLCRhdHRzKSk7DQoN CgkkcmV0ID0gZmFsc2U7DQoJJHNtZF9pbGkgPSAoJHNtZF9pbGkgPT09IDApID8gaXNfbG9n Z2VkX2luKCkgOiAkc21kX2lsaTsNCg0KCWlmICgkc21kX2lsaSkgew0KCQkkbmFtZXMgPSBk b19saXN0KCRuYW1lKTsNCgkJJGdyb3VwcyA9IGRvX2xpc3QoJGdyb3VwKTsNCgkJJGFyZWFz ID0gZG9fbGlzdCgkYXJlYSk7DQoNCgkJLy8gSGFuZGxlID4gYW5kIDwgZ3JvdXBzDQoJCSRn cnBsaXN0ID0gYXJyYXkoKTsNCgkJZm9yZWFjaCAoJGdyb3VwcyBhcyAkZ3JwKSB7DQoJCQlp ZiAoIChzdHJwb3MoJGdycCwgJz4nKSA9PT0gMCkgfHwgKHN0cnBvcygkZ3JwLCAnPCcpID09 PSAwKSApIHsNCgkJCQlpZiAoIWlzc2V0KCRzbWRfdW1fZ3JvdXBzKSkgew0KCQkJCQkkc21k X3VtX2dyb3VwcyA9IHNhZmVfY29sdW1uKCdpZCcsIFNNRF9VTV9HUk9VUFMsICcxPTEgT1JE RVIgQlkgaWQnKTsNCgkJCQl9DQoJCQkJJHZhbCA9IHN1YnN0cigkZ3JwLCAxKTsNCgkJCQkv LyBQdWxsIG91dCBhbGwgZ3JvdXBzIGhpZ2hlciB0aGFuIHRoaXMgb25lDQoJCQkJaWYgKHN1 YnN0cigkZ3JwLCAwLCAxKSA9PSAnPicpIHsNCgkJCQkJZm9yZWFjaCgkc21kX3VtX2dyb3Vw cyBhcyAkdWcpIHsNCgkJCQkJCWlmICgkdWcgPiAkdmFsKSAkZ3JwbGlzdFtdID0gJHVnOw0K CQkJCQl9DQoJCQkJfQ0KCQkJCS8vIFB1bGwgb3V0IGFsbCBncm91cHMgbG93ZXIgdGhhbiB0 aGlzIG9uZQ0KCQkJCWlmIChzdWJzdHIoJGdycCwgMCwgMSkgPT0gJzwnKSB7DQoJCQkJCWZv cmVhY2goJHNtZF91bV9ncm91cHMgYXMgJHVnKSB7DQoJCQkJCQlpZiAoKCR1ZyA8ICR2YWwp ICYmICgkdWcgIT0gJzAnKSkgJGdycGxpc3RbXSA9ICR1ZzsNCgkJCQkJfQ0KCQkJCX0NCgkJ CX0gZWxzZSB7DQoJCQkJJGdycGxpc3RbXSA9ICRncnA7DQoJCQl9DQoJCX0NCgkJJGdyb3Vw cyA9IGFycmF5X3VuaXF1ZSgkZ3JwbGlzdCk7DQoNCgkJaWYgKCRkZWJ1Zykgew0KCQkJZWNo byAnKysgTE9HR0VEIElOIENSRURFTlRJQUxTIC8gUEVSTUlTU0lPTiBBUkVBUyAvIEFMTCBH Uk9VUCBJRHMgLyBOQU1FIEFUVFIgLyBHUk9VUCBBVFRSIC8gQVJFQSBBVFRSICsrJzsNCgkJ CWRtcCgkc21kX2lsaSwgJHNtZF91bV9wZXJtaXNzaW9ucywgJHNtZF91bV9ncm91cHMsICRu YW1lcywgJGdyb3VwcywgJGFyZWFzKTsNCgkJfQ0KDQoJCSRpc25hbWUgID0gKCRuYW1lICYm IGluX2FycmF5KCRzbWRfaWxpWyduYW1lJ10sICRuYW1lcykpOw0KCQkkaXNncm91cCA9ICgo JGdyb3VwICE9ICcnKSAmJiBpbl9hcnJheSgkc21kX2lsaVsncHJpdnMnXSwgJGdyb3Vwcykp Ow0KCQkkaXNhcmVhID0gZmFsc2U7DQoNCgkJLy8gQnVpbGQgdXAgYSBjYWNoZWQgYXJyYXkg b2YgcHJpdnMgYnkgYXJlYQ0KCQlpZiAoJGFyZWFzKSB7DQoJCQkvLyBUT0RPOiB3b3VsZCBi ZSBuaWNlIHRvIGRvIHRoaXMgaW4gb25lIHF1ZXJ5IHNvbWVob3cNCgkJCWZvcmVhY2ggKCRh cmVhcyBhcyAkcGxhY2UpIHsNCgkJCQlpZiAoIWlzc2V0KCRzbWRfdW1fcGVybWlzc2lvbnNb JHBsYWNlXSkpIHsNCgkJCQkJJHBydiA9IHNhZmVfZmllbGQoJ0dST1VQX0NPTkNBVChwcml2 KSBBUyBwcml2cycsIFNNRF9VTV9QUklWUywgImFyZWEgPSAnIiAuIGRvU2xhc2goJHBsYWNl KSAuICInIik7DQoJCQkJCSRzbWRfdW1fcGVybWlzc2lvbnNbJHBsYWNlXSA9ICRwcnY7DQoJ CQkJfQ0KCQkJCSRpc2FyZWEgPSAoaW5fYXJyYXkoJHNtZF9pbGlbJ3ByaXZzJ10sIGRvX2xp c3QoJHNtZF91bV9wZXJtaXNzaW9uc1skcGxhY2VdKSkpOw0KCQkJfQ0KCQl9DQoNCgkJaWYg KCRkZWJ1Zykgew0KCQkJZWNobyAnKysgVEVTVCBBR0FJTlNUIE5BTUUgLyBHUk9VUCAvIEFS RUEgKysnOw0KCQkJZG1wKCRpc25hbWUsICRpc2dyb3VwLCAkaXNhcmVhKTsNCgkJfQ0KDQoJ CS8vIENvbXBhcmUgdGhlIGN1cnJlbnQgbG9nZ2VkIGluIGNyZWRlbnRpYWxzIGFnYWluc3Qg dGhlIHJlbGV2YW50IHBhc3NlZC1pbiBhdHRyaWJ1dGUgY29tYmluYXRpb25zDQoJCWlmICgk bmFtZSkgew0KCQkJaWYgKCRncm91cCkgew0KCQkJCWlmICgkYXJlYSkgew0KCQkJCQlpZiAo JGRlYnVnKSBkbXAoJ0NIRUNLIE5BTUUgQU5EIEdST1VQIEFORCBBUkVBJyk7DQoJCQkJCSRy ZXQgPSAoJGlzbmFtZSAmJiAkaXNncm91cCAmJiAkaXNhcmVhKTsNCgkJCQl9IGVsc2Ugew0K CQkJCQlpZiAoJGRlYnVnKSBkbXAoJ0NIRUNLIE5BTUUgQU5EIEdST1VQJyk7DQoJCQkJCSRy ZXQgPSAoJGlzbmFtZSAmJiAkaXNncm91cCk7DQoJCQkJfQ0KCQkJfSBlbHNlIGlmICgkYXJl YSkgew0KCQkJCWlmICgkZGVidWcpIGRtcCgnQ0hFQ0sgTkFNRSBBTkQgQVJFQScpOw0KCQkJ CSRyZXQgPSAoJGlzbmFtZSAmJiAkaXNhcmVhKTsNCgkJCX0gZWxzZSB7DQoJCQkJaWYgKCRk ZWJ1ZykgZG1wKCdDSEVDSyBOQU1FJyk7DQoJCQkJJHJldCA9ICRpc25hbWU7DQoJCQl9DQoJ CX0gZWxzZWlmKCRncm91cCkgew0KCQkJaWYgKCRhcmVhKSB7DQoJCQkJaWYgKCRkZWJ1Zykg ZG1wKCdDSEVDSyBHUk9VUCBBTkQgQVJFQScpOw0KCQkJCSRyZXQgPSAoJGlzZ3JvdXAgJiYg JGlzYXJlYSk7DQoJCQl9IGVsc2Ugew0KCQkJCWlmICgkZGVidWcpIGRtcCgnQ0hFQ0sgR1JP VVAnKTsNCgkJCQkkcmV0ID0gJGlzZ3JvdXA7DQoJCQl9DQoJCX0gZWxzZWlmKCRhcmVhKSB7 DQoJCQlpZiAoJGRlYnVnKSBkbXAoJ0NIRUNLIEFSRUEnKTsNCgkJCSRyZXQgPSAkaXNhcmVh Ow0KCQl9IGVsc2Ugew0KCQkJaWYgKCRkZWJ1ZykgZG1wKCdOTyBDSEVDS1MgKEFOWSBVU0VS KScpOw0KCQkJJHJldCA9IHRydWU7DQoJCX0NCgl9DQoNCglyZXR1cm4gcGFyc2UoRXZhbEVs c2UoJHRoaW5nLCAkcmV0KSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gc21kX3VtX2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgew0KCSRsYW5n ID0gYXJyYXkoDQoJCSdlbi1nYicgPT4gYXJyYXkoDQoJCQknc21kX3VtX2FjdGl2ZScgPT4g J1VzZXJzIGN1cnJlbnRseSBhY3RpdmU6ICcsDQoJCQknc21kX3VtX2FjdGl2ZV90aW1lb3V0 JyA9PiAnQWN0aXZpdHkgdGltZW91dCAoc2Vjb25kcyknLA0KCQkJJ3NtZF91bV9hZG1pbl9n cm91cCcgPT4gJ1Byb3RlY3RlZCBhZG1pbmlzdHJhdG9yIGdyb3VwOiAnLA0KCQkJJ3NtZF91 bV9hcnRpY2xlX2NvdW50JyA9PiAnQXJ0aWNsZXMnLA0KCQkJJ3NtZF91bV9hc3NpZ25fdG9f Z3JvdXAnID0+ICdBc3NpZ24gdG8gZ3JvdXAnLA0KCQkJJ3NtZF91bV9iYXNlZF9vbicgPT4g J2Jhc2VkIG9uJywNCgkJCSdzbWRfdW1faW1hZ2VfY291bnQnID0+ICdJbWFnZXMnLA0KCQkJ J3NtZF91bV9maWxlX2NvdW50JyA9PiAnRmlsZXMnLA0KCQkJJ3NtZF91bV9saW5rX2NvdW50 JyA9PiAnTGlua3MnLA0KCQkJJ3NtZF91bV90YWJfbmFtZScgPT4gJ1VzZXIgbWFuYWdlcics DQoJCQknc21kX3VtX2dycF9hZmZlY3RlZCcgPT4gJy4gVXNlcnMgYWZmZWN0ZWQ6IHtudW19 JywNCgkJCSdzbWRfdW1fZ3JwX2NyZWF0ZWQnID0+ICdHcm91cCAie25hbWV9IiBjcmVhdGVk JywNCgkJCSdzbWRfdW1fZ3JwX2RlbGV0ZWQnID0+ICdHcm91cCBkZWxldGVkJywNCgkJCSdz bWRfdW1fZ3JwX2V4aXN0cycgPT4gJ0dyb3VwIGFscmVhZHkgZXhpc3RzIGFzIHByaXYgSUQg e2lkfScsDQoJCQknc21kX3VtX2dycF9sYmwnID0+ICdHcm91cHMnLA0KCQkJJ3NtZF91bV9n cnBfbmV3JyA9PiAnTmV3IGdyb3VwIHRpdGxlJywNCgkJCSdzbWRfdW1fZ3JwX25ld19uYW1l JyA9PiAnbmFtZScsDQoJCQknc21kX3VtX2dycF9zYXZlZCcgPT4gJ0dyb3VwIGluZm8gdXBk YXRlZCcsDQoJCQknc21kX3VtX2hpZXJhcmNoaWNhbF9ncm91cHMnID0+ICdBc3N1bWUgaGll cmFyY2hpY2FsIGdyb3VwcyAobGV2ZWxzKScsDQoJCQknc21kX3VtX21heF9zZWFyY2hfbGlt aXQnID0+ICdNYXhpbXVtIHVzZXIgc2VhcmNoIHJlc3VsdCBsaW1pdCcsDQoJCQknc21kX3Vt X25hbWVfcmVxdWlyZWQnID0+ICdBIG5hbWUgaXMgcmVxdWlyZWQnLA0KCQkJJ3NtZF91bV9u ZXdfdXNlcicgPT4gJ05ldyB1c2VyJywNCgkJCSdzbWRfdW1fcGFzc19jaGFuZ2VfZXJyb3In ID0+ICdQYXNzd29yZCBOT1Qgc2F2ZWQnLA0KCQkJJ3NtZF91bV9wYXNzX2xlbmd0aCcgPT4g J1Bhc3N3b3JkIGxlbmd0aCAoY2hhcmFjdGVycyknLA0KCQkJJ3NtZF91bV9wcmZfbGJsJyA9 PiAnUHJlZnMnLA0KCQkJJ3NtZF91bV9wcmZfbGVnZW5kJyA9PiAnVXNlciBNYW5hZ2VyIFBy ZWZlcmVuY2VzJywNCgkJCSdzbWRfdW1fcHJmX3NhdmVkJyA9PiAnUHJlZmVyZW5jZXMgc2F2 ZWQnLA0KCQkJJ3NtZF91bV9wcnZfY3JlYXRlZCcgPT4gJ1ByaXYgYXJlYSAie2FyZWF9IiBj cmVhdGVkJywNCgkJCSdzbWRfdW1fcHJ2X2RlbGV0ZWQnID0+ICdQcml2IGFyZWEgZGVsZXRl ZCcsDQoJCQknc21kX3VtX3Bydl9leGlzdHMnID0+ICdQcml2IGFyZWEgYWxyZWFkeSBleGlz dCcsDQoJCQknc21kX3VtX3Bydl9sYmwnID0+ICdQcml2cycsDQoJCQknc21kX3VtX3Bydl9u ZXcnID0+ICdOZXcgcHJpdiBhcmVhJywNCgkJCSdzbWRfdW1fcHJ2X3NhdmVkJyA9PiAnUHJp dnMgdXBkYXRlZCcsDQoJCQknc21kX3VtX3Bydl9zbWRfdW0nID0+ICdDYW5ub3QgY3JlYXRl IHByaXZzIGZvciBzbWRfdXNlcl9tYW5hZ2VyJywNCgkJCSdzbWRfdW1fcmVzZXQnID0+ICdb Ul0nLA0KCQkJJ3NtZF91bV9zZWxfYWxsJyA9PiAnU2VsZWN0IHRoZSBlbnRpcmUgYXJlYSB0 aGVuIChjKWhlY2ssICh1KW5jaGVjayBvciAodClvZ2dsZSBoaWdobGlnaHRlZCBjaGVja2Jv eGVzJywNCgkJCSdzbWRfdW1fc2VsX2dycCcgPT4gJ1NlbGVjdCB0aGlzIGdyb3VwIHRoZW4g KGMpaGVjaywgKHUpbmNoZWNrIG9yICh0KW9nZ2xlIGhpZ2hsaWdodGVkIGNoZWNrYm94ZXMn LA0KCQkJJ3NtZF91bV9zZWxfcHJ2JyA9PiAnU2VsZWN0IHRoaXMgYXJlYSBzZXQgdGhlbiAo YyloZWNrLCAodSluY2hlY2sgb3IgKHQpb2dnbGUgaGlnaGxpZ2h0ZWQgY2hlY2tib3hlcycs DQoJCQknc21kX3VtX3NlbF9yZXNldCcgPT4gJ1Jlc2V0OiBhbnkgY2hlY2tlZCBhcmVhIHNl dHMgd2lsbCByZXZlcnQgdG8gdGhlaXIgZGVmYXVsdHMgYWZ0ZXIgU2F2ZScsDQoJCQknc21k X3VtX3NlbGZfYWx0ZXInID0+ICdBbGxvdyBzbWRfdW0gcHJpdnMgdG8gYmUgYWx0ZXJlZCcs DQoJCQknc21kX3VtX3RibF9yZW1vdmVfbGJsJyA9PiAnUmVtb3ZlJywNCgkJCSdzbWRfdW1f dGJsX2luc3RhbGxfbGJsJyA9PiAnSW5zdGFsbCcsDQoJCQknc21kX3VtX3RibF9pbnN0YWxs ZWQnID0+ICdUYWJsZXMgaW5zdGFsbGVkJywNCgkJCSdzbWRfdW1fdGJsX25vdF9pbnN0YWxs ZWQnID0+ICdUYWJsZXMgbm90IGluc3RhbGxlZCcsDQoJCQknc21kX3VtX3RibF9yZW1vdmVk JyA9PiAnVGFibGVzIHJlbW92ZWQnLA0KCQkJJ3NtZF91bV90Ymxfbm90X3JlbW92ZWQnID0+ ICdUYWJsZXMgbm90IHJlbW92ZWQnLA0KCQkJJ3NtZF91bV91c2VyX2NvdW50JyA9PiAnVXNl cnMgaW4gdGhpcyBncm91cDogJywNCgkJCSdzbWRfdW1fdXNyX2xibCcgPT4gJ1VzZXJzJywN CgkJKSwNCgkpOw0KDQoJJHRoaXNsYW5nID0gZ2V0X3ByZWYoJ2xhbmd1YWdlJywgJ2VuLWdi Jyk7DQoJJHRoaXNsYW5nID0gKGlzc2V0KCRsYW5nWyR0aGlzbGFuZ11bJHdoYXRdKSkgPyAk dGhpc2xhbmcgOiAnZW4tZ2InOw0KCXJldHVybiBzdHJ0cigkbGFuZ1skdGhpc2xhbmddWyR3 aGF0XSwgJGF0dHMpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToib3JkZXIiO3M6MToi OCI7czo1OiJmbGFncyI7czoxOiIyIjtzOjQ6ImhlbHAiO3M6MjAwODE6IjxkaXYgaWQ9InNt ZF9oZWxwIj4KCgk8aDE+c21kX3VzZXJfbWFuYWdlcjwvaDE+CgoJPHA+Q29tcGxldGUgdXNl ciAvIGdyb3VwIC8gcHJpdnMgbWFuYWdlbWVudC4gRmVhdHVyZXM6PC9wPgoKCTx1bD4KCQk8 bGk+UmVwbGFjZXMgPGVtPkFkbWluLSZndDtVc2VyczwvZW0+IHRhYjwvbGk+CgkJPGxpPkFk ZCAvIGVkaXQgLyBsaXN0IHVzZXJzLCB3aXRoIGNvbnRlbnQgY291bnRzIGFsb25nc2lkZSBl YWNoIHVzZXI8L2xpPgoJCTxsaT5TZWFyY2gsIHNvcnQsIG9yIGZpbHRlciB0aGUgdXNlcnMg KHN0YW5kYXJkIFR4cCBwYWdpbmF0aW9uIHJlc3VsdCBkZXB0aHMgYXBwbHkpPC9saT4KCQk8 bGk+UXVpY2tseSBmaW5kIGFjY291bnRzIHdpdGggY2VydGFpbiBjaGFyYWN0ZXJpc3RpY3Mg KGUuZy4gc2VsZi1yZWdpc3RlcmVkIHNwYW0gYWNjb3VudHMgd2l0aCAwIGFydGljbGVzKTwv bGk+CgkJPGxpPlBlcmZvcm0gbXVsdGktZWRpdHM6IGNoYW5nZSBwcml2aWxlZ2UgLyByZXNl dCBwYXNzIC8gZGVsZXRlPC9saT4KCQk8bGk+QWxsIHVzZXJzIGNhbiBlZGl0IHRoZWlyIG93 biBkZXRhaWxzIGFuZCBjaGFuZ2UgdGhlaXIgcGFzc3dvcmQ8L2xpPgoJCTxsaT5DcmVhdGUg bmV3IHVzZXIgZ3JvdXBzIChhLmsuYS4gcm9sZXMpIGlmIHRoZSBkZWZhdWx0IHNpeCBhcmVu JiM4MjE3O3QgZW5vdWdoPC9saT4KCQk8bGk+UmVuYW1lIGV4aXN0aW5nIGdyb3VwcyB0byBt b3JlIHN1aXRhYmxlIG5hbWVzICh5b3UgY2Fubm90IGRlbGV0ZSB0aGVtKTwvbGk+CgkJPGxp Pk1vZGlmeSBUeHAmIzgyMTc7cyBzdGFuZGFyZCBwcml2IGFyZWFzIHRvIGFsdGVyIHdoYXQg ZWFjaCB1c2VyIGdyb3VwIGNhbiBzZWUvZG88L2xpPgoJCTxsaT5BZGQgbmV3IHByaXYgYXJl YXMgKHVzZWZ1bCBmb3IgY3VzdG9tIGNvZGUgdG8gc2F2ZSBkb2luZyBpdCBpbiBhIHBsdWdp bik8L2xpPgoJCTxsaT5BICYjODIyMDt3aG8mIzgyMTc7cyBvbmxpbmUmIzgyMjE7IGluZGlj YXRvcjwvbGk+CgkJPGxpPkludGVncmF0ZXMgd2l0aCBzbWRfYmlvICh2MC40MCspIGFuZCBz bWRfcHJvZ25vc3RpY3MgKHYwLjIwKyk8L2xpPgoJPC91bD4KCgk8aDI+QXV0aG9yIC8gY3Jl ZGl0czwvaDI+CgoJPHA+V3JpdHRlbiBieSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5j b20vY29udGFjdCI+U3RlZiBEYXdzb248L2E+LiBUaGFua3MgdG8gdGhlIGJldGEgdGVzdCB0 ZWFtIGpha29iLCBtcmRhbGUsIGFsYW5mbHVmZiwgbWF2ZXJpY2ssIERlc3RyeSwgcmVkYm90 LCBhbmQgcnNpbGxldHRpIGZvciB0aGVpciB3aWxsaW5nbmVzcyB0byBsZXQgbXkgY29kZSBs b29zZSBvbiB0aGVpciBzZXJ2ZXJzLjwvcD4KCgk8aDI+SW5zdGFsbGF0aW9uIC8gdW5pbnN0 YWxsYXRpb248L2gyPgoKCTxwIGNsYXNzPSJpbXBvcnRhbnQiPlJlcXVpcmVzIFR4cCA0LjQu MSs8L3A+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJo dHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvMTIyOS9zbWRfdXNlcl9tYW5hZ2VyIj50 ZXh0cGF0dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24u Y29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgVHhw IDxlbT5BZG1pbi0mZ3Q7UGx1Z2luczwvZW0+IHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0 aGUgcGx1Z2luLiBUaGUgdGFibGVzIHdpbGwgYmUgaW5zdGFsbGVkIGFuZCBwb3B1bGF0ZWQg YXV0b21hdGljYWxseSB1bmxlc3MgeW91IHVzZSB0aGUgcGx1Z2luIGZyb20gdGhlIGNhY2hl IGRpcmVjdG9yeTsgaW4gZWl0aGVyIGNhc2UsIHZpc2l0aW5nIHRoZSA8ZW0+QWRtaW4tJmd0 O1VzZXIgbWFuYWdlcjwvZW0+IHRhYiB3aWxsIGluc3RhbGwgYW5kIHBvcHVsYXRlIHRoZW0u PC9wPgoKCTxwPlRvIHVuaW5zdGFsbCB0aGUgcGx1Z2luLCBmaXJzdCBhc3NpZ24gYWxsIHlv dXIgdXNlcnMgdG8gZ3JvdXBzIGluIFR4cCYjODIxNztzIGZpcnN0IHNpeCwgdGhlbiBkZWxl dGUgdGhlIHBsdWdpbiBmcm9tIHRoZSA8ZW0+QWRtaW4tJmd0O1BsdWdpbnM8L2VtPiBwYWdl LiBUaGUgdGFibGVzIHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5LiBJZiB5b3UgZG8g bm90IHJlYXNzaWduIHVzZXJzIHRvIHRob3NlIGRlZmF1bHQgZ3JvdXBzLCB5b3UgbWF5IGhh dmUgdXNlcnMgd2l0aCAmIzgyMTY7ZGFuZ2xpbmcmIzgyMTc7IChpLmUuIG5vKSBwcml2cy4g VGhlIG91dGNvbWUgb2Ygd2hhdCBoYXBwZW5zIHdoZW4gc3VjaCB1c2VycyBsb2cgaW4gaXMg dGh1cyB1bmRlZmluZWQuPC9wPgoKCTxwPlZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vZm9y dW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzY1NTgiPmZvcnVtIHRocmVh ZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQgb24gdGhlIHN1Y2Nlc3Mgb3Igb3Ro ZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxoMj5BZG1pbiBzaWRlIG92ZXJ2aWV3PC9o Mj4KCgk8cD5WaXNpdCB0aGUgPGVtPkFkbWluLSZndDtVc2VyIG1hbmFnZXI8L2VtPiB0YWIu IFRoZSBkZWZhdWx0IHZpZXcgKGZvciBhZG1pbnMpIGlzIGEgbGlzdCBvZiB1c2Vycy4gVGhl cmUgYXJlIGJ1dHRvbnMgdG93YXJkcyB0aGUgdG9wIHJpZ2h0LWhhbmQgYXJlYSBvZiB0aGUg c2NyZWVuOiA8YSBocmVmPSIjc21kX3VtX3VzZXJzIj5Vc2VyczwvYT4sIDxhIGhyZWY9IiNz bWRfdW1fZ3JvdXBzIj5Hcm91cHM8L2E+LCA8YSBocmVmPSIjc21kX3VtX3ByaXZzIj5Qcml2 czwvYT4sIGFuZCA8YSBocmVmPSIjc21kX3VtX3ByZWZzIj5QcmVmczwvYT4uIEVhY2ggb2Yg dGhvc2UgZGlzcGxheXMgYW4gYXJlYSBmb3IgdGhlIG1hbmFnZW1lbnQgb2YgdGhhdCBjb21w b25lbnQuPC9wPgoKCTxwPlBsZWFzZSBub3RlOiBUaGUgcGx1Z2luIHRyaWVzIHRvIHJlbW92 ZSB0aGUgPGVtPkFkbWluLSZndDtVc2VyczwvZW0+IG1lbnUsIGJ1dCBkZXBlbmRpbmcgb24g eW91ciBpbnN0YWxsZWQgdGhlbWUgdGhpcyBtYXkgbm90IGJlIHBvc3NpYmxlLiBJZiB0aGUg bWVudSBpdGVtIHJlbWFpbnMsIGl0IHdpbGwgcGVyZm9ybSB0aGUgc2FtZSBmdW5jdGlvbiBh cyBjbGlja2luZyB0aGUgPGVtPlVzZXIgbWFuYWdlcjwvZW0+IHRhYi48L3A+CgoJPGgyIGlk PSJzbWRfdW1fdXNlcnMiPlVzZXIgbWFuYWdlbWVudCAoPGVtPlVzZXJzPC9lbT4gYnV0dG9u KTwvaDI+CgoJPHA+VmlldyAvIHNlYXJjaCB0aGUgaW5zdGFsbGVkIHVzZXIgYmFzZS4gQ2hh bmdlIHRoZSBudW1iZXIgb2YgdXNlcnMgeW91IHdpc2ggdG8gc2VlIHBlciBwYWdlIGJ5IHVz aW5nIHRoZSAmIzgyMTY7cGVyIHBhZ2UmIzgyMTc7IGRyb3Bkb3duIGJlbG93IHRoZSBsaXN0 LiBUaGUgY29sdW1ucyBvbiBkaXNwbGF5IGFyZTo8L3A+CgoJPHVsPgoJCTxsaT5Mb2dpbiAm IzgyMTI7IHVzZXIgbmFtZTwvbGk+CgkJPGxpPlJlYWwgTmFtZSAmIzgyMTI7IGZ1bGwgbmFt ZTwvbGk+CgkJPGxpPkUtbWFpbCAmIzgyMTI7IGUtbWFpbCBhZGRyZXNzPC9saT4KCQk8bGk+ UHJpdmlsZWdlcyAmIzgyMTI7IHVzZXIgZ3JvdXA8L2xpPgoJCTxsaT5MYXN0IExvZ2luICYj ODIxMjsgbW9udGggJmFtcDsgeWVhciBvZiBsYXN0IGFjY2VzcyB0byB0aGUgVGV4dHBhdHRl cm4gYWRtaW4gc2lkZTwvbGk+CgkJPGxpPkFydGljbGVzICYjODIxMjsgbnVtYmVyIG9mIGFy dGljbGVzIGF1dGhvcmVkIGJ5IHRoaXMgdXNlcjwvbGk+CgkJPGxpPkltYWdlcyAmIzgyMTI7 IG51bWJlciBvZiBpbWFnZXMgdXBsb2FkZWQgYnkgdGhpcyB1c2VyPC9saT4KCQk8bGk+Rmls ZXMgJiM4MjEyOyBudW1iZXIgb2YgZmlsZXMgdXBsb2FkZWQgYnkgdGhpcyB1c2VyPC9saT4K CQk8bGk+TGlua3MgJiM4MjEyOyBudW1iZXIgb2YgbGlua3MgY3JlYXRlZCBieSB0aGlzIHVz ZXI8L2xpPgoJPC91bD4KCgk8cD5DbGljayA8ZW0+TmV3IHVzZXI8L2VtPiAoYWRtaW5zIG9u bHkpIHRvIGNyZWF0ZSBhIG5ldyB1c2VyIGFjY291bnQgYW5kIGF1dG9tYXRpY2FsbHkgc2Vu ZCBhIHJhbmRvbWx5LWdlbmVyYXRlZCBwYXNzd29yZCB0byB0aGUgbm9taW5hdGVkIGUtbWFp bCBhZGRyZXNzLjxiciAvPgpDbGljayBhIGxvZ2luIG5hbWUgKHByaXZpbGVnZXMgcmVxdWly ZWQpIHRvIGVkaXQgdGhlIGRldGFpbHMgYWJvdXQgdGhhdCB1c2VyLiBJZiB5b3UgaGF2ZSBh bnkgc21kX2JpbyBmaWVsZHMgc2V0IHVwLCB0aGV5IGNhbiBhbHNvIGJlIGVkaXRlZCAoYW5k IGhvdmVyaW5nIG92ZXIgdGhlIGxvZ2luIG5hbWUgd2lsbCByZXRyaWV2ZSBzb21lIGV4dGVu ZGVkIGJpb2dyYXBoaWNhbCBpbmZvKS48YnIgLz4KQ2xpY2sgYW4gZS1tYWlsIGFkZHJlc3Mg dG8gbGF1bmNoIHlvdXIgZS1tYWlsIHNvZnR3YXJlIHRvIHNlbmQgYSBtZXNzYWdlIHRvIHRo ZSB1c2VyLjxiciAvPgpDbGljayBhbiBhcnRpY2xlIC8gaW1hZ2UgLyBmaWxlIC8gbGluayB2 YWx1ZSB0byBzZWUgdGhlIGNvbnRlbnQgb3duZWQgYnkgdGhhdCB1c2VyLjwvcD4KCgk8cD5Z b3UgbWF5IHNvcnQgdGhlIGNvbHVtbnMgYnkgY2xpY2tpbmcgdGhlIGhlYWRpbmdzLiBDbGlj ayBvbmNlIHRvIHNvcnQgaW4gYXNjZW5kaW5nIG9yZGVyLCBjbGljayBhZ2FpbiB0byBzb3J0 IGluIGRlc2NlbmRpbmcgb3JkZXIuIEFuIGFycm93IHNob3dzIHRoZSBzb3J0IGRpcmVjdGlv bi4gWW91ciBzb3J0IGNvbHVtbiBhbmQgZGlyZWN0aW9uIGFyZSByZW1lbWJlcmVkIG5leHQg dGltZSB5b3UgdmlzaXQgdGhlIHBhbmVsLjwvcD4KCgk8cD5Zb3UgbWF5IGFsc28gc2VhcmNo IHVzZXJzIGJ5IGxvZ2luIG5hbWUsIHJlYWwgbmFtZSwgZS1tYWlsIGFkZHJlc3MsIHByaXZp bGVnZSBsZXZlbCAobnVtYmVyIG9yIG5hbWUpLCBvciBjb250ZW50IGNvdW50LiBBIGZldyBu b3RlcyBhYm91dCBzZWFyY2hpbmc6PC9wPgoKCTx1bD4KCQk8bGk+V2hlbiBzZWFyY2hpbmcg cHJpdmlsZWdlcyBieSBuYW1lLCBvbmx5IHRoZSA8ZW0+Zmlyc3QgbWF0Y2hpbmc8L2VtPiBn cm91cCB3aWxsIGJlIHJldHVybmVkICYjODIxMjsgdGhlIHByaXZzIGFyZSBzZWFyY2hlZCBp biBvcmRlciBvZiB0aGVpciBJRC48L2xpPgoJCTxsaT5Zb3UgbWF5IHNlYXJjaCBwcml2aWxl Z2VzIGFuZCBjb250ZW50IGNvdW50cyBieSBzcGVjaWZ5aW5nIGFuIGV4YWN0IHZhbHVlLCBm b3IgZXhhbXBsZSBBcnRpY2xlIGNvdW50OiAwIHNob3dzIGFsbCBhY2NvdW50cyB3aXRoIG5v IGFydGljbGVzIChwZXJoYXBzIGEgc2VsZi1yZWdpc3RlcmVkIHNwYW1tZXIgb3IgbWFsaWNp b3VzIHVzZXI/KTwvbGk+CgkJPGxpPllvdSBtYXkgYWxzbyBzZWFyY2ggdGhlc2UgZmllbGRz IHVzaW5nIGdyZWF0ZXItdGhhbiBvciBsZXNzLXRoYW4gc3ltYm9scyB0byBmaW5kIHVzZXJz IHdpdGggdGhlIG1hdGNoaW5nIG51bWJlciBvZiBhc3NldHMuIEZvciBleGFtcGxlLCBJbWFn ZSBjb3VudDogPGNvZGU+Jmd0Oz01MDwvY29kZT4gc2hvd3MgYWxsIHVzZXJzIHdpdGggNTAg aW1hZ2VzIG9yIG1vcmUuPC9saT4KCTwvdWw+CgoJPHA+WW91IGNhbiBhbHNvIHBlcmZvcm0g bXVsdGktZWRpdHMgYnkgc2VsZWN0aW5nIHRoZSByb3dzIHRvIGFsdGVyIHZpYSB0aGUgY2hl Y2tib3hlcyBvbiB0aGUgcmlnaHQgb2YgZWFjaCByb3cgYW5kIHVzaW5nIHRoZSBkcm9wZG93 biBpbW1lZGlhdGVseSBiZWxvdyB0aGUgbGlzdCB0byBtYWtlIG1hc3MgY2hhbmdlcy4gVGhl IG9wdGlvbnMgYXJlOjwvcD4KCgk8dWw+CgkJPGxpPkNoYW5nZSBwcml2aWxlZ2VzOiBzZXQg YWxsIHNlbGVjdGVkIHVzZXJzIHRvIHRoZSBnaXZlbiBwcml2aWxlZ2UgbGV2ZWwuIFdoZW4g eW91IGNob29zZSB0aGlzIG9wdGlvbiwgYSBmdXJ0aGVyIGRyb3Bkb3duIGFwcGVhcnMgdG8g YWxsb3cgeW91IHRvIGNob29zZSB3aGljaCBsZXZlbCB0byBhcHBseS48L2xpPgoJCTxsaT5S ZXNldCBwYXNzd29yZDogc2VuZCBhIG5ldyBwYXNzd29yZCB0byBhbGwgc2VsZWN0ZWQgdXNl cnMuPC9saT4KCQk8bGk+RGVsZXRlOiByZW1vdmUgYWxsIHNlbGVjdGVkIHVzZXIgYWNjb3Vu dHMuIEEgZnVydGhlciBkcm9wZG93biBhcHBlYXJzIHdpdGggYSBsaXN0IG9mIHVzZXIgYWNj b3VudHMgaW4gaXQ6IGNob29zZSBvbmUgdG8gdHJhbnNmZXIgb3ZlciBhbnkgY29udGVudCB0 aGF0IGJlbG9uZ2VkIHRvIHRoZSBkZWxldGVkIHVzZXIocykuPC9saT4KCTwvdWw+CgoJPHA+ QSBjb21tb24gdXNlIGlzIHRvIGZpbmQgYW55IHVzZXJzIHdpdGggMCBhcnRpY2xlcywgYW5k IHRoZW4gdXNlIHRoZSBtdWx0aS1lZGl0IHRvb2wgdG8gZGVsZXRlIHRoZW0gYWxsLjwvcD4K Cgk8aDIgaWQ9InNtZF91bV9ncm91cHMiPkdyb3VwIG1hbmFnZW1lbnQgKDxlbT5Hcm91cHM8 L2VtPiBidXR0b24pPC9oMj4KCgk8cD5UaGlzIHBhbmVsIGFsbG93cyB5b3UgdG8gYWx0ZXIg dGhlIG5hbWVzIG9mIFR4cCYjODIxNztzIGJ1aWx0LWluIDYgZ3JvdXBzIHRvIHN1aXQgeW91 ciBhcHBsaWNhdGlvbi4gSXQgY2hhbmdlcyB0aGUgVGl0bGVzIGluIHRoZSBjdXJyZW50bHkg aW5zdGFsbGVkIGxhbmd1YWdlIG9ubHkuPC9wPgoKCTxwPllvdSBtYXkgYWxzbyBhZGQgYSBu ZXcgZ3JvdXAgdXNpbmcgdGhlIGlucHV0IGNvbnRyb2xzIGFuZCBhY2NvbXBhbnlpbmcgPGVt PkNyZWF0ZTwvZW0+IGJ1dHRvbiBhdCB0aGUgdG9wIG9mIHRoZSBwYW5lbC4gSWYgeW91IGNo b29zZSB0byBvbmx5IGVudGVyIGEgVGl0bGUsIGEgbmFtZSB3aWxsIGJlIGF1dG9tYXRpY2Fs bHkgZ2VuZXJhdGVkIChsb3dlciBjYXNlLCB3aXRoIG1vc3Qgbm9uLTxzcGFuIGNsYXNzPSJj YXBzIj5BU0NJSTwvc3Bhbj4gY2hhcmFjdGVycyByZXBsYWNlZCBieSBzYWZlIGNoYXJhY3Rl cnMpLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHR5cGUgeW91ciBvd24gbmFtZSwgdGhvdWdo IHBsZWFzZSBzdGljayB0byAmIzgyMTY7c2ltcGxlJiM4MjE3OyBsZXR0ZXJzIGFuZCBudW1i ZXJzIHRvIG1ha2UgdGhpbmdzIGVhc3kgb24geW91cnNlbGYgbGF0ZXIuIElmIHlvdSBjaG9v c2UgYW4gZXhpc3RpbmcgZ3JvdXAgZnJvbSB0aGUgPGVtPmJhc2VkIG9uPC9lbT4gZHJvcGRv d24sIHRoZSBwcml2cyBmb3IgdGhhdCBncm91cCB3aWxsIGJlIGNvcGllZCBhY3Jvc3MgdG8g eW91ciBuZXcgZ3JvdXAuPC9wPgoKCTxwPkN1c3RvbSBncm91cHMgY2FuIGJlIGRlbGV0ZWQg dXNpbmcgdGhlICYjODIxNjt4JiM4MjE3OyBidXR0b24gYWxvbmdzaWRlIGVhY2guIEFueSB1 c2VycyB0aGF0IHdlcmUgYXNzaWduZWQgdG8gdGhhdCBncm91cCB3aWxsIGhhdmUgdGhlaXIg cHJpdmlsZWdlcyByZWR1Y2VkIHRvICYjODIxNjtOb25lJiM4MjE3Oy4gRWl0aGVyIHZpc2l0 IHRoZSA8ZW0+VXNlcnM8L2VtPiBwYW5lbCBhbmQgYWx0ZXIgdGhlaXIgcHJpdiBsZXZlbCB0 byBzb21ldGhpbmcgc3VpdGFibGUsIG9yIHNldCB0aGVpciBsZXZlbCB0byBzb21ldGhpbmcg ZWxzZSBwcmlvciB0byBkZWxldGluZyB0aGUgZ3JvdXAuPC9wPgoKCTxwPklmIGFueSBncm91 cCBjb250YWlucyBhdCBsZWFzdCBvbmUgdXNlciwgdGhlIGdyb3VwIElEIHZhbHVlcyBhcmUg aHlwZXJsaW5rZWQgYmFjayB0byB0aGUgVXNlcnMgcGFuZWwgdG8gc2hvdyBvbmx5IHRob3Nl IHVzZXJzIGluIHRoYXQgZ3JvdXAuIFRoaXMgaXMgaGFuZHkgZm9yIHJlYXNzaWduaW5nIHBy aXYgbGV2ZWxzIGJlZm9yZSBkZWxldGluZyBhIGdyb3VwLiBJZiB5b3UgaG92ZXIgb3ZlciB0 aGUgcHJpdiBJRCwgYSB0b29sdGlwIHdpbGwgZGlzcGxheSB0aGUgbnVtYmVyIG9mIHVzZXJz IGFzc2lnbmVkIHRvIHRoYXQgcHJpdmlsZWdlIGdyb3VwLjwvcD4KCgk8aDIgaWQ9InNtZF91 bV9wcml2cyI+UHJpdiBtYW5hZ2VtZW50ICg8ZW0+UHJpdnM8L2VtPiBidXR0b24pPC9oMj4K Cgk8cD5Gcm9tIHRoaXMgcGFuZWwgeW91IG1heSBhbHRlciB3aGljaCB1c2VyIGdyb3VwcyBj YW4gYWNjZXNzIHdoaWNoIHBhcnRzIG9mIHRoZSBhZG1pbiBzaWRlIGludGVyZmFjZSBvciBw ZXJmb3JtIGNlcnRhaW4gdHlwZXMgb2YgYWN0aW9uLiBZb3Ugd2lsbCBzZWUgYSBsaXN0IG9m ICYjODIxNjthcmVhJiM4MjE3OyBoZWFkaW5ncy4gQ2xpY2sgb25lIHRvIGV4cGFuZCBpdCBh bmQgc2VlIHRoZSBwcml2aWxlZ2VzIGl0IGNvbnRhaW5zOyBjbGljayBpdCBhZ2FpbiB0byBj b2xsYXBzZSBpdC4gVGhlIG9wZW4vY2xvc2VkIHN0YXRlIG9mIHRoZSBhcmVhcyBpcyByZW1l bWJlcmVkIG5leHQgdGltZSB5b3UgdmlzaXQgdGhlIHBhbmVsLjwvcD4KCgk8cD5FYWNoIGFy ZWEgaGFzIGEgcm93IG9mIGNoZWNrYm94ZXMgYWxvbmdzaWRlIGl0LiBJZiBhIGNoZWNrYm94 IGlzIHRpY2tlZCBpbiBhIGNvbHVtbiBjb3JyZXNwb25kaW5nIHRvIGEgcHJpdmlsZWdlIGdy b3VwLCB0aGF0IGdyb3VwIGhhcyBhY2Nlc3MgdG8gdGhhdCBmZWF0dXJlIG9mIHRoZSBpbnRl cmZhY2UuIFlvdSBtYXkgYWx0ZXIgd2hvIHNlZXMgd2hhdCBieSBjaGFuZ2luZyB0aGUgdGlj ayBib3hlcyBhbmQgaGl0dGluZyBvbmUgb2YgdGhlIDxlbT5TYXZlPC9lbT4gYnV0dG9ucyB0 aGF0IGFwcGVhciB0byB0aGUgbGVmdCBvZiBlYWNoIGFyZWEgaGVhZGluZzsgYWxsIHRoZSBi dXR0b25zIGRvIHRoZSBzYW1lIHRoaW5nOiB0aGV5IHNhdmUgdGhlIGVudGlyZSBsaXN0IG9m IHByaXZpbGVnZXMuIFlvdSBtdXN0IGNvbmZpcm0gdGhlIGFjdGlvbiwgYmVjYXVzZSB0aGUg Y2hhbmdlIGlzIGltbWVkaWF0ZS48L3A+CgoJPHA+WW91IG1heSBjaGFuZ2UgY2hlY2tib3hl cyBpbiBiYXRjaGVzIGJ5IHNlbGVjdGluZyByb3dzL2NvbHVtbnMgYW5kIHRoZW4gdXNpbmcg YSBrZXlib2FyZCBzaG9ydGN1dCB0byBtYWtlIGNoYW5nZXMgdG8gYWxsIGhpZ2hsaWdodGVk IGNoZWNrYm94ZXMuIEZpcnN0bHksIGNob29zZSB3aGljaCBjaGVja2JveGVzIHRvIGFwcGx5 IHlvdXIgY2hhbmdlczo8L3A+CgoJPG9sPgoJCTxsaT5jbGljayBhIGNvbHVtbiBoZWFkaW5n IHRvIGhpZ2hsaWdodCB0aGF0IGVudGlyZSBHcm91cDwvbGk+CgkJPGxpPmNsaWNrIGEgcm93 IGhlYWRpbmcgdG8gaGlnaGxpZ2h0IHRoYXQgZW50aXJlIFByaXYgc2V0PC9saT4KCQk8bGk+ Y2xpY2sgdGhlIHRvcCBsZWZ0LWhhbmQgY29ybmVyIG9mIHRoZSBjb2xsYXBzaWJsZSB0YWJs ZSB0byBzZWxlY3QgYWxsIGNoZWNrYm94ZXM8L2xpPgoJPC9vbD4KCgk8cD5Zb3UgY2FuIHNl bGVjdCBtdWx0aXBsZSBjb2x1bW5zL3Jvd3MgZnJvbSBtdWx0aXBsZSBhcmVhcyBpZiB5b3Ug d2lzaC4gQ2xpY2tpbmcgYSByb3cvY29sdW1uL2Nvcm5lciBoZWFkaW5nIGFnYWluIHdpbGwg dG9nZ2xlIGl0cyBzdGF0dXMuPC9wPgoKCTxwPldoZW4geW91IGFyZSByZWFkeSB0byBtYWtl IGNoYW5nZXMgdG8gdGhlIHNlbGVjdGVkIGNoZWNrYm94ZXMsIHlvdSBjYW4gdXNlIHRoZSBm b2xsb3dpbmcga2V5czo8L3A+CgoJPHVsPgoJCTxsaT48Y29kZT5jPC9jb2RlPiB0byBjaGVj ayBhbGwgc2VsZWN0ZWQgYm94ZXM8L2xpPgoJCTxsaT48Y29kZT51PC9jb2RlPiB0byB1bmNo ZWNrIGFsbCBzZWxlY3RlZCBib3hlczwvbGk+CgkJPGxpPjxjb2RlPnQ8L2NvZGU+IHRvIHRv Z2dsZSB0aGUgc3RhdHVzIG9mIGFsbCBzZWxlY3RlZCBib3hlcyAoY2hlY2tlZCBiZWNvbWUg dW5jaGVja2VkLCBhbmQgdmljZSB2ZXJzYSk8L2xpPgoJCTxsaT48Y29kZT5kPC9jb2RlPiBk ZXNlbGVjdHMgYWxsIHJvd3MgLyBjb2x1bW5zIHlvdSBoYXZlIGhpZ2hsaWdodGVkPC9saT4K CTwvdWw+CgoJPHA+VGhlIGFyZWEgaGVhZGluZ3MgbWVyZWx5IGdyb3VwIHRoZSBhcmVhcyBm b3IgY29udmVuaWVuY2UgYW5kIG1ha2UgdGhlIHBhZ2UgbG9vayBsZXNzIHNjYXJ5ISBBbnkg cGx1Z2lucyB5b3UgaGF2ZSBpbnN0YWxsZWQgd2lsbCBiZSBzaG93biB1bmRlciBhbiBhcmVh IGhlYWRpbmcgb2YgdGhlIGF1dGhvciYjODIxNztzIHRocmVlLWxldHRlciBwcmVmaXguIE5v dGUgdGhhdCBhbHRlcmluZyBwcml2cyBoZXJlIG92ZXJyaWRlcyB0aGUgcHJpdnMgYXMgc2V0 IGJ5IHRoZSBwbHVnaW4gc28geW91IGNhbiBjdXN0b21pc2Ugd2hvIHNlZXMgd2hhdCwgPGVt PmFzIGxvbmcgYXMgdGhlIHBsdWdpbiBpbiBxdWVzdGlvbiBpcyBsb2FkZWQgYmVmb3JlIHNt ZF91c2VyX21hbmFnZXI8L2VtPi4gQ2hlY2sgdGhlIHBsdWdpbiBsb2FkIG9yZGVyIHZhbHVl cyBpZiB0aGluZ3MgYXJlbiYjODIxNzt0IHdvcmtpbmcgYXMgeW91IGV4cGVjdC48L3A+CgoJ PHA+VGhlICYjODIxNjt0YWImIzgyMTc7IGFyZWEgaGVhZGluZyBnb3Zlcm5zIHdoaWNoIHVz ZXIgZ3JvdXBzIGhhdmUgYWNjZXNzIHRvIHRoZSBwcmltYXJ5IG5hdmlnYXRpb24gYXJlYXMg KGNvbnRlbnQsIHByZXNlbnRhdGlvbiwgYWRtaW4sIGV4dGVuc2lvbnMgYW5kIGFueSBjdXN0 b20gdGFicyBzdWNoIGFzIHRob3NlIGNyZWF0ZWQgYnkgc21kX3RhYmJlcikuIE5vdGUgdGhh dCBnaXZpbmcgYWNjZXNzIHRvIHRoZXNlIHRhYnMgZG9lcyBub3QgYXV0b21hdGljYWxseSBn aXZlIGFjY2VzcyB0byB0aGUgc2Vjb25kYXJ5IG5hdmlnYXRpb24gZWxlbWVudHM7IHlvdSBt dXN0IHR1cm4gdGhvc2Ugb24gaW5kZXBlbmRlbnRseS4gQnkgY29udHJhc3QsIGdpdmluZyBh IHVzZXIgZ3JvdXAgYWNjZXNzIHRvIGEgc2Vjb25kYXJ5IG5hdmlnYXRpb24gaXRlbSA8ZW0+ ZG9lczwvZW0+IGFsbG93IHRoZW0gdG8gdXNlIHRoYXQgZmVhdHVyZSBidXQgdGhleSB3b24m IzgyMTc7dCBiZSBhYmxlIHRvIG5hdmlnYXRlIHRvIGl0IHVzaW5nIHRoZSBwcmltYXJ5IG5h dmlnYXRpb24gYnV0dG9uIHVubGVzcyB0aGV5IGhhdmUgYWxzbyBiZWVuIGdpdmVuIGFjY2Vz cyB0byB0aGF0IHRhYi48L3A+CgoJPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdSBncmFudCB0aGUg JiM4MjE2O3BhZ2UmIzgyMTc7IHByaXZpbGVnZSB0byBGcmVlbGFuY2VycyBidXQgZG9uJiM4 MjE3O3QgZ2l2ZSB0aGVtIGFjY2VzcyB0byB0aGUgUHJlc2VudGF0aW9uIHRhYiwgdGhleSBj b3VsZCB0eXBlIDxjb2RlPj9ldmVudD1wYWdlPC9jb2RlPiBpbiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPlVSTDwvc3Bhbj4gdG8gZ2V0IHRvIHRoZSBQYWdlcyBwYW5lbCBidXQgdGhleSB3 b3VsZCBoYXZlIG5vIG1lYW5zIG9mIG5hdmlnYXRpbmcgdGhlcmUgYnkgY2xpY2tpbmcgdGhl IG1vdXNlLiBTaW5jZSB0aGUgcHJpbWFyeSAmIzgyMTY7UHJlc2VudGF0aW9uJiM4MjE3OyB0 YWIgaXMgbWlzc2luZywgdGhlIHNlY29uZGFyeSB0YWJzIGFyZSBhbGwgbWlzc2luZyB0b28s IGV2ZW4gdGhvdWdoIHNvbWUgb2YgdGhlbSBtYXkgYmUgcGVybWl0dGVkIGZvciB0aGF0IGdy b3VwIG9mIHVzZXJzLjwvcD4KCgk8cD5JZiB5b3Ugd2lzaCB0byBhZGQgeW91ciBvd24gcHJp diBhcmVhLCB0eXBlIGEgbmV3IG9uZSBpbiB0aGUgYm94IGF0IHRoZSB0b3Agb2YgdGhlIHBh bmVsIGFuZCBoaXQgPGVtPkNyZWF0ZTwvZW0+LiBZb3VyIGFyZWEgd2lsbCBiZSBjcmVhdGVk IHVuZGVyIHRoZSBhcHByb3ByaWF0ZSBoZWFkaW5nLCBlLmcuIGlmIHlvdSBzcGVjaWZpZWQg PGNvZGU+c21kX3Rlc3Q8L2NvZGU+IGl0IHdvdWxkIGFwcGVhciB1bmRlciB0aGUgPGNvZGU+ c21kPC9jb2RlPiBoZWFkaW5nLCBvciBpZiB5b3UgY3JlYXRlZCBhIDxjb2RlPmZpbGUudHJ1 c3RlZDwvY29kZT4gcHJpdmlsZWdlIGFyZWEsIGl0IHdvdWxkIGFwcGVhciB1bmRlciB0aGUg PGNvZGU+ZmlsZTwvY29kZT4gaGVhZGluZy4gQ29yZSBhcmVhcyBhcmUgbm9ybWFsbHkgc3Bl Y2lmaWVkIGJ5IGEgZG90dGVkIG5vdGF0aW9uIGJ1dCB5b3UgYXJlIGZyZWUgdG8gY2hvb3Nl IGFueSBub3RhdGlvbiB0aGF0IG1ha2VzIHNlbnNlIHRvIHlvdXIgYXBwbGljYXRpb24uPC9w PgoKCTxwPk5vdGUgdGhhdDo8L3A+CgoJPG9sPgoJCTxsaT5zb21lIHBsdWdpbnMgbWF5IG5v dCBzaG93IHVwIGluIHRoZSBsaXN0IGR1ZSB0byBmYWN0b3JzIHN1Y2ggYXMgcGx1Z2luIGxv YWQgb3JkZXIgb3IgdGhlIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgcGx1Z2luIGlzIHdyaXR0 ZW4uPC9saT4KCQk8bGk+dGhlIDxjb2RlPltSXTwvY29kZT4gY29sdW1uIGlzIGEgc3BlY2lh bCBSZXNldCBpbmRpY2F0b3IuIENoZWNraW5nIGFueSByb3cgaW4gdGhpcyBjb2x1bW4gd2ls bCBpZ25vcmUgYW55IHByaXZpbGVnZSBjaGVja2JveGVzIHlvdSBtYXkgaGF2ZSBzZXQgb3Ig YWx0ZXJlZCBhbmQgd2lsbCByZXNldCB0aGUgY29ycmVzcG9uZGluZyBwcml2cyB0byB0aGVp ciBkZWZhdWx0cyBhZnRlciB5b3UgY2xpY2sgU2F2ZS48L2xpPgoJCTxsaT5ieSBkZWZhdWx0 IHlvdSBtYXkgbm90IGFkZCA8Y29kZT5zbWRfdW08L2NvZGU+IHByaXZzIHRvIG92ZXJyaWRl IHRoZSBmdW5jdGlvbmFsaXR5IGlmIHRoaXMgcGx1Z2luLCBhbHRob3VnaCB5b3UgY2FuIGFk anVzdCB3aG8gY2FuIGVkaXQgd2hhdCBzbyBiZSBjYXJlZnVsIG5vdCB0byBvcGVuIHRoZSBw ZXJtaXNzaW9ucyB0b28gd2lkZWx5LiBBIHByZWZlcmVuY2Ugc2V0dGluZyBnb3Zlcm5zIHdo ZXRoZXIgc21kX3VtIGNhbiBoYXZlIGl0cyBvd24gcHJpdnMgYWx0ZXJlZC48L2xpPgoJCTxs aT55b3UgY2FuIGNyZWF0ZSBwcml2IGFyZWFzIHRoYXQgbWF5IGJlIHRlc3RlZCBmcm9tIHRo ZSBwdWJsaWMgc2lkZSB1c2luZyB0aGUgPGEgaHJlZj0iI3NtZF91bV9oYXNfcHJpdnMiPnNt ZF91bV9oYXNfcHJpdnM8L2E+IHRhZy48L2xpPgoJPC9vbD4KCgk8aDIgaWQ9InNtZF91bV9w cmVmcyI+UHJlZmVyZW5jZSBtYW5hZ2VtZW50ICg8ZW0+UHJlZnM8L2VtPiBidXR0b24pPC9o Mj4KCgk8cD5BZG1pbmlzdHJhdG9ycyBjYW4gc2V0IGdsb2JhbCBwcmVmZXJlbmNlcyB0aGF0 IGdvdmVybiB0aGUgYmVoYXZpb3VyIG9mIHRoZSBwbHVnaW46PC9wPgoKCTxkbD4KCQk8ZHQ+ PHN0cm9uZz5Bc3N1bWUgaGllcmFyY2hpY2FsIGdyb3Vwczwvc3Ryb25nPjwvZHQ+CgkJPGRk PlRleHRwYXR0ZXJuIGRvZXMgbm90IG5vcm1hbGx5IGhhdmUgdGhlIG5vdGlvbiBvZiBlc2Nh bGF0aW5nIHByaXZpbGVnZSBsZXZlbHMuIEEgQ29weSBFZGl0b3IgaXMgbm90IDxlbT5ncmVh dGVyIHRoYW48L2VtPiBhIFN0YWZmIFdyaXRlciwgZm9yIGV4YW1wbGUsIHRoZXkganVzdCBo YXZlIGRpZmZlcmVudCBwZXJtaXNzaW9ucyB0byBmdWxmaWwgdGhlIHJlbGV2YW50IHJvbGUu PC9kZD4KCQk8ZGQ+WW91IG1heSBzZXQgdGhpcyBwcmVmZXJlbmNlIHRvIDxlbT55ZXM8L2Vt PiB0byBmb3JjZSBUZXh0cGF0dGVybiB0byB0cmVhdCB5b3VyIGxldmVscyBhcyBhIGhpZXJh cmNoeSwgaS5lLiBsb3dlciBudW1iZXJzIGFyZSAmIzgyMjA7bW9yZSBwb3dlcmZ1bCYjODIy MTsgdGhhbiBoaWdoZXIgbnVtYmVycyAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIDA6IE5vbmUg d2hpY2ggaXMgYWx3YXlzICYjODIxNjtubyBwcml2cyYjODIxNzspLjwvZGQ+CgkJPGRkPk9u Y2Ugc2V0LCBsb2dnZWQtaW4gdXNlcnMgbWF5IG5vdCBjcmVhdGUgb3IgZWRpdCBhbnkgb3Ro ZXIgdXNlcnMgdGhhdCBhcmUgJiM4MjE2O2Fib3ZlJiM4MjE3OyB0aGVpciBhc3NpZ25lZCBw cml2cywgZS5nLiBDb3B5IEVkaXRvcnMgY2Fubm90IG1vZGlmeSBQdWJsaXNoZXIgb3IgTWFu YWdpbmcgRWRpdG9yIGFjY291bnRzLiBGdXJ0aGVyLCBpdCBpcyBub3QgcG9zc2libGUgdG8g YWx0ZXIgeW91ciBvd24gcHJpdmlsZWdlcywgbm9yIGNhbiB5b3UgY3JlYXRlIGEgdXNlciB3 aXRoIGEgZ3JlYXRlciBwcml2IGxldmVsIHRoYW4geW91IHBvc3Nlc3MuPC9kZD4KCQk8ZGQ+ RGVmYXVsdDogbm88L2RkPgoJCTxkdD48c3Ryb25nPlByb3RlY3RlZCBhZG1pbmlzdHJhdG9y IGdyb3VwPC9zdHJvbmc+PC9kdD4KCQk8ZGQ+Tm9taW5hdGUgYSBncm91cCB0aGF0IHlvdSB3 aXNoIG9ubHkgYWRtaW5pc3RyYXRvcnMgdG8gYmUgYWJsZSB0byBhbHRlci9jcmVhdGUuPC9k ZD4KCQk8ZGQ+T25jZSBzZXQsIHRoZSBub21pbmF0ZWQgZ3JvdXAgaXMgb2ZmLWxpbWl0cyB0 byBhbGwgdXNlcnMgYXBhcnQgZnJvbSB0aG9zZSBhbHJlYWR5IGluIHRoZSBzZWxlY3RlZCBn cm91cC4gSW4gb3RoZXIgd29yZHMsIG5vbi1hZG1pbiB1c2VycyBjYW5ub3QgY3JlYXRlLCBt b2RpZnksIGFsdGVyIChvciBtYXNzLWFsdGVyKSBhbnkgcHJpdmlsZWdlIHNldHRpbmcgdXNp bmcgdGhpcyBncm91cC48L2RkPgoJCTxkZD5DYW4gYmUgdXNlZCBpbiB0YW5kZW0gd2l0aCBv ciBpbmRlcGVuZGVudGx5IG9mIHRoZSA8ZW0+QXNzdW1lIGhpZXJhcmNoaWNhbCBncm91cHM8 L2VtPiBzZXR0aW5nLjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IDEgKGEuay5hLiBQdWJsaXNoZXJz KTwvZGQ+CgkJPGR0PjxzdHJvbmc+TWF4aW11bSB1c2VyIHNlYXJjaCByZXN1bHQgbGltaXQ8 L3N0cm9uZz48L2R0PgoJCTxkZD5NYXhpbXVtIG51bWJlciBvZiBzZWFyY2ggcmVzdWx0cyB0 byByZXR1cm4gd2hlbiBmaWx0ZXJpbmcgdGhlIFVzZXIgbGlzdC48L2RkPgoJCTxkZD5EZWZh dWx0OiA1MDA8L2RkPgoJCTxkdD48c3Ryb25nPlBhc3N3b3JkIGxlbmd0aCAoY2hhcmFjdGVy cyk8L3N0cm9uZz48L2R0PgoJCTxkZD5UaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gbmV3 bHktZ2VuZXJhdGVkIHBhc3N3b3Jkcy4gVGhlIGhpZ2hlciB0aGUgYmV0dGVyICh1cCB0byBh IHBvaW50KS48L2RkPgoJCTxkZD5EZWZhdWx0OiAxMjwvZGQ+CgkJPGR0PjxzdHJvbmc+QWN0 aXZpdHkgdGltZW91dCAoc2Vjb25kcyk8L3N0cm9uZz48L2R0PgoJCTxkZD5OdW1iZXIgb2Yg c2Vjb25kcyB3aXRoaW4gd2hpY2ggc29tZW9uZSBoYXMgdG8gcGVyZm9ybSBhbiBhZG1pbi1z aWRlIGFjdGlvbiB0byByZW1haW4gdmlzaWJsZSBvbiB0aGUgQWN0aXZlIFVzZXJzIGxpc3Qu IEZvciBoaWdoIGFjdGl2aXR5IHNpdGVzLCB5b3UgY2FuIGxvd2VyIHRoaXMgdmFsdWUgYW5k IHJlY2VpdmUgYSBtb3JlIHJlc3BvbnNpdmUgKGFjY3VyYXRlKSBsaXN0LCBhdCB0aGUgcG9z c2libGUgZXhwZW5zZSBvZiBtb3JlIHBlcmNlaXZlZCBmbHVjdHVhdGlvbnMgaW4gdXNlciBh Y3Rpdml0eSB3aGVuIHRoZSB0aW1lb3V0IGlzIGV4Y2VlZGVkLiBMZW5ndGhlbmluZyB0aGUg dmFsdWUgd2lsbCBrZWVwIG9ubGluZSB1c2VycyBpbiB0aGUgbGlzdCBsb25nZXIsIGV2ZW4g dGhvdWdoIHRoZXkgbWF5IG5vdCBhY3R1YWxseSBzdGlsbCBiZSBhY3RpdmUuPC9kZD4KCQk8 ZGQ+RGVmYXVsdDogNjA8L2RkPgoJCTxkdD48c3Ryb25nPkFsbG93IHNtZF91bSBwcml2cyB0 byBiZSBhbHRlcmVkPC9zdHJvbmc+PC9kdD4KCQk8ZGQ+U2V0IHRoaXMgdG8gPGVtPnllczwv ZW0+IHRvIGFsbG93IHNtZF91bSBwcml2cyB0byBiZSBjaGFuZ2VkIGZyb20gdGhlIFByaXZz IHBhbmVsLjwvZGQ+CgkJPGRkPkRlZmF1bHQ6IG5vPC9kZD4KCTwvZGw+CgoJPGgyIGlkPSJz bWRfdW1fbm9uX2FkbWluIj5Ob24tYWRtaW4gdXNlcnM8L2gyPgoKCTxwPlVzZXIgYWNjb3Vu dHMgd2l0aG91dCBwcml2aWxlZ2VzIHRvIGxpc3QgdXNlcnMgd2lsbCBhdXRvbWF0aWNhbGx5 IGJlIHNob3duIHRoZSBFZGl0IHNjcmVlbiBmb3IgdGhlaXIgb3duIHVzZXIgYWNjb3VudC4g VGhpcyBpcyB0aGUgb25seSBhY2NvdW50IHRoYXQgY2FuIGJlIGVkaXRlZC4gSWYgc21kX2Jp byBpcyBpbnN0YWxsZWQsIGFkZGl0aW9uYWwgYmlvZ3JhcGhpY2FsIGluZm9ybWF0aW9uIG1h eSBhbHNvIGJlIGVkaXRlZC48L3A+CgoJPHA+VXNlcnMgbWF5IGFsc28gY2hhbmdlIHRoZWly IHBhc3N3b3JkIHVzaW5nIHRoZSBmb3JtIGF0IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi4g VGhlIGNoYW5nZSBwYXNzd29yZCBmZWF0dXJlIGludGVncmF0ZXMgd2l0aCBzbWRfcHJvZ25v c3RpY3MgdG8gc2hvdyBwYXNzd29yZCBjcmFja2FiaWxpdHkgaGludHMuPC9wPgoKCTxoMiBp ZD0ic21kX3VtX2FjdGl2ZSI+QWN0aXZlIHVzZXJzPC9oMj4KCgk8cD5BdCB0aGUgYm90dG9t IG9mIGVhY2ggc21kX3VzZXJfbWFuYWdlciBwYW5lbCBpcyBhIGxpc3Qgb2YgY3VycmVudGx5 IGFjdGl2ZSAoJiM4MjIwO29ubGluZSYjODIyMTspIHVzZXJzLiBFYWNoIHVzZXIgaXMgaHlw ZXJsaW5rZWQgdG8gdGhlIDxhIGhyZWY9IiNzbWRfdW1fdXNlcnMiPlVzZXJzPC9hPiBwYW5l bCB0byBzaG93IHlvdSB0aGUgaW5mbyBhYm91dCBqdXN0IHRoYXQgcGVyc29uLCB3aGljaCBp cyBhIGNvbnZlbmllbnQgc2hvcnRjdXQgdG8gZmluZCBvdXQgYWJvdXQgYSBsb2dnZWQtaW4g YXV0aG9yLjwvcD4KCgk8cD5BbiBhY3RpdmUgdXNlciBpcyBvbmUgd2hvIGhhcyBwZXJmb3Jt ZWQgc29tZSBhZG1pbi1zaWRlIGFjdGlvbiBpbiB0aGUgcGFzdCBOIHNlY29uZHMsIHdoZXJl IE4gaXMgZGVmaW5lZCBpbiB0aGUgPGEgaHJlZj0iI3NtZF91bV9wcmVmcyI+QWN0aXZpdHkg VGltZW91dCBwbHVnaW4gcHJlZmVyZW5jZTwvYT4uPC9wPgoKCTxoMj5QdWJsaWMgc2lkZSB0 YWdzPC9oMj4KCgk8aDMgaWQ9InNtZF91bV9oYXNfcHJpdnMiPlRhZzogPGNvZGU+Jmx0O3R4 cDpzbWRfdW1faGFzX3ByaXZzJmd0OzwvY29kZT48L2gzPgoKCTxwPlVzZSB0aGlzIGNvbmRp dGlvbmFsIHRhZyB0byBjaGVjayBpZiB0aGUgY3VycmVudGx5IGxvZ2dlZC1pbiB1c2VyIGhh cyBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIHNvbWUgYWN0aW9uLiBJZiB0aGV5IGhhdmUsIHRo ZSBjb250YWluZWQgY29udGVudCBpcyBleGVjdXRlZC4gU3VwcG9ydHMgPGNvZGU+Jmx0O3R4 cDplbHNlIC8mZ3Q7PC9jb2RlPi48L3A+CgoJPHA+Tm90ZSB0aGF0IHRoZSBwbHVnaW4gZG9l cyBub3QgaGF2ZSBhIHB1YmxpYy1zaWRlIGxvZ2dpbmcgaW4vb3V0IGZhY2lsaXR5LCBpdCBt ZXJlbHkgYWxsb3dzIHlvdSB0byB0ZXN0IHdoZXRoZXIgc29tZW9uZSB3aG8gaGFzIGxvZ2dl ZCBpbiB2aWEgdGhlIGFkbWluIHNpZGUgKG9yIHZpYSBhIHRoaXJkIHBhcnR5IGxvZ2luIHBs dWdpbikgaGFzIG5lY2Vzc2FyeSBwcml2aWxlZ2VzLjwvcD4KCgk8cD5BdHRyaWJ1dGVzOjwv cD4KCgk8ZGw+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5uYW1lPC9zcGFuPjwvZHQ+CgkJ PGRkPkNoZWNrIHRoZSBjdXJyZW50IGxvZ2dlZC1pbiB1c2VyJiM4MjE3O3MgbmFtZSBhZ2Fp bnN0IHRoaXMgbGlzdCBvZiBuYW1lcy48L2RkPgoJCTxkZD48c3BhbiBjbGFzcz0iY2FwcyI+ SU1QT1JUQU5UPC9zcGFuPjogQ2FzZSBzZW5zaXRpdmUuPC9kZD4KCQk8ZHQ+PHNwYW4gY2xh c3M9ImF0bm0iPmdyb3VwPC9zcGFuPjwvZHQ+CgkJPGRkPkNoZWNrIHRoZSBjdXJyZW50IGxv Z2dlZC1pbiB1c2VyJiM4MjE3O3MgZ3JvdXAgKHByaXZpbGVnZSkgbGV2ZWwgaXMgaW4gdGhp cyBsaXN0IG9mIG51bWJlcnMuPC9kZD4KCQk8ZGQ+WW91IGNhbiBzcGVjaWZ5IDxjb2RlPiZn dDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7PC9jb2RlPiBzeW1ib2xzIGJlZm9yZSBhbnkgdmFs dWUgdG8gaW5kaWNhdGUgeW91IHdpc2ggdG8gY2hlY2sgaWYgdGhlIHVzZXIgaGFzIHByaXZp bGVnZXMgaGlnaGVyIG9yIGxvd2VyIHRoYW4gYSBnaXZlbiBudW1iZXIsIHJlc3BlY3RpdmVs eS48L2RkPgoJCTxkZD5JZiBjaGVja2luZyBwcml2IHZhbHVlcyBsZXNzIHRoYW4gYSBudW1i ZXIsIDAgKGEuay5hIE5vbmUpIGlzIDxlbT5uZXZlcjwvZW0+IGluY2x1ZGVkOiB5b3UgbXVz dCBhZGQgaXQgdG8gdGhlIGxpc3QgZXhwbGljaXRseSBpZiB5b3Ugd2lzaCB0byB0ZXN0IGZv ciBpdC48L2RkPgoJCTxkZD5FeGFtcGxlOiA8Y29kZT5ncm91cD0mcXVvdDsxMSwgJmx0OzQm cXVvdDs8L2NvZGU+IG1lYW5zICYjODIyMDtkb2VzIHRoZSB1c2VyIGhhdmUgcHJpdnMgb2Yg MTEsIDEsIDIsIG9yIDM/JiM4MjIxOzwvZGQ+CgkJPGR0PjxzcGFuIGNsYXNzPSJhdG5tIj5h cmVhPC9zcGFuPjwvZHQ+CgkJPGRkPkNoZWNrIHRoZSBjdXJyZW50IGxvZ2dlZC1pbiB1c2Vy IGhhcyB0aGUgYWJpbGl0eSB0byBhY2Nlc3Mgb25lIG9mIHRoZSBnaXZlbiBhcmVhcyBpbiB0 aGlzIGxpc3QuPC9kZD4KCQk8ZGQ+RXhhbXBsZTogPGNvZGU+YXJlYT0mcXVvdDtzcG9ydHNf aGFsbCwgY2hlbWlzdHJ5X2xhYiZxdW90OzwvY29kZT4gd291bGQgb25seSBwZXJmb3JtIHRo ZSBjb250YWluZWQgY29udGVudCBpZiB0aGUgbG9nZ2VkLWluIHVzZXImIzgyMTc7cyBwcml2 IGxldmVsIHdhcyBwcmVzZW50IGluIGVpdGhlciB0aGUgc3BvcnRzX2hhbGwgb3IgY2hlbWlz dHJ5X2xhYiBwcml2IGFyZWFzLjwvZGQ+Cgk8L2RsPgoKCTxwPk5vdGVzOjwvcD4KCgk8dWw+ CgkJPGxpPllvdSBjYW4gY29tYmluZSB0aGUgYXR0cmlidXRlcyBpbiBhbnkgd2F5OiB0aGUg Y29udGFpbmVkIGNvbnRlbnQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIGlmIHRoZSBsb2dnZWQt aW4gdXNlciBtYXRjaGVzIDxzdHJvbmc+YWxsPC9zdHJvbmc+IHRoZSBjcml0ZXJpYS48L2xp PgoJCTxsaT5XaXRob3V0IGFueSBhdHRyaWJ1dGVzLCB0aGUgY29udGFpbmVkIGNvbnRlbnQg d2lsbCBiZSBleGVjdXRlZCBpZiBhbnlib2R5IGlzIGxvZ2dlZCBpbiwgcmVnYXJkbGVzcyBv ZiB0aGVpciBuYW1lLCBwcml2cyBvciBhc3NpZ25lZCBhcmVhcy48L2xpPgoJCTxsaT5BZ2Fp bjogbG9naW4gPGNvZGU+bmFtZTwvY29kZT5zIGFyZSBjYXNlIHNlbnNpdGl2ZTwvbGk+Cgk8 L3VsPgoKCTxoMj5DaGFuZ2Vsb2c8L2gyPgoKCTx1bD4KCQk8bGk+MjcgSnVsIDIwMTEgfCB2 MC4xMCB8IEluaXRpYWwgcHVibGljIHJlbGVhc2U8L2xpPgoJCTxsaT4wMyBOb3YgMjAxMSB8 IHYwLjExIHwgQWRkZWQgc21kX3VtX2hhc19wcml2cyB0YWcgdG8gY2hlY2sgcHJpdnMvYXJl YXMgOyBhZGRlZCBwcmVmZXJlbmNlIHRvIGFsbG93IGVkaXRpbmcgb2Ygc21kX3VtIHByaXZz OyBmaXhlZCBoYW5kbGluZyBvZiB1c2VycyB3aXRoIHByaXZzPU5vbmU8L2xpPgoJPC91bD4K CjwvZGl2Pgo8IS0tICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9 InRleHQvY3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBj b2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIs IGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6 IzMzMzsgfQojc21kX2hlbHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9y ZGVyOjFweCBkb3R0ZWQgIzk5OTsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAy MHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9udDogMjJweCBHZW9yZ2lh LCBzZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgy IHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBm b250OiAxOHB4IEdlb3JnaWEsIHNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQg MTNweCBHZW9yZ2lhLCBzZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAyMHB4 IDAgMDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQojc21kX2hlbHAgaDQgeyBmb250 OiBib2xkIDEycHggR2VvcmdpYSwgc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdp bjogMTBweCAwIDA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5h dG5tIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5k OiNlZWU7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lk dGg6OTAlOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyBib3JkZXIt Y29sbGFwc2U6Y29sbGFwc2U7IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3Jk ZXI6MXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6LjVlbTsgfQojc21kX2hlbHAgdWwgeyBsaXN0 LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVk OyB9CiNzbWRfaGVscCBsaSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hl bHAgLmJyZWFrIHsgbWFyZ2luLXRvcDo1cHg7IH0KI3NtZF9oZWxwIGRsIGRkIHsgbWFyZ2lu OjJweCAxNXB4OyB9CiNzbWRfaGVscCBkbCBkZDpiZWZvcmUgeyBjb250ZW50OiAiXDIwMjJc MDBhMCI7IH0KI3NtZF9oZWxwIGRsIGRkIGRsIHsgcGFkZGluZzogMCAxNXB4OyB9Cjwvc3R5 bGU+CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoi OWEzZWFlNmNhZWUwZDRhOTlhNGUzZThkY2ZlODFjYmQiO30=