# Name: smd_macro v0.41 # Type: Admin/Public plugin # Define custom macros/virtual Textpattern tags for your site # Author: Stef Dawson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern CMS - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMjp7czo0OiJuYW1lIjtzOjk6InNtZF9tYWNybyI7czo2OiJhdXRob3IiO3M6MTE6IlN0 ZWYgRGF3c29uIjtzOjEwOiJhdXRob3JfdXJpIjtzOjIyOiJodHRwOi8vc3RlZmRhd3Nvbi5j b20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC40MSI7czoxMToiZGVzY3JpcHRpb24iO3M6NTk6 IkRlZmluZSBjdXN0b20gbWFjcm9zL3ZpcnR1YWwgVGV4dHBhdHRlcm4gdGFncyBmb3IgeW91 ciBzaXRlIjtzOjQ6ImNvZGUiO3M6MjY2MjI6Ii8qKgogKiBzbWRfbWFjcm8KICoKICogQSBU ZXh0cGF0dGVybiBDTVMgcGx1Z2luIGZvciBjcmVhdGluZyBuZXcgdGFnczoKICogIC0+IERl ZmluZSBuZXcgPHR4cDp0YWdzPiB0byBkbyBhbnkgdGFzayB5b3UgbGlrZSAtLSBsaWdodGJv eCBlZmZlY3QsIGNvbW1lbnQgc2NoZW1lLi4uCiAqICAtPiBBZGQgYXJiaXRyYXJ5IG51bWJl cnMgb2YgYXR0cmlidXRlcyBhbmQgc2V0IGRlZmF1bHRzIGlmIHlvdSB3aXNoCiAqICAtPiBJ bXBvcnQgLyBleHBvcnQgeW91ciBjcmVhdGlvbnMgdG8gc2hhcmUgbmV3IHRhZ3Mgd2l0aCB0 aGUgY29tbXVuaXR5CiAqCiAqIEBhdXRob3IgU3RlZiBEYXdzb24KICogQGxpbmsgICBodHRw Oi8vc3RlZmRhd3Nvbi5jb20vCiAqIEB0b2RvICAgQWxsb3cgYXBvc3Ryb3BoZXMgLyB0YWdz LWluLXRhZ3MgaW4gY29udGFpbmVyIGNvZGUKICovCgppZiAodHhwaW50ZXJmYWNlID09PSAn YWRtaW4nKSB7CiAgICBnbG9iYWwgJHNtZF9tYWNyb19ldmVudDsKICAgICRzbWRfbWFjcm9f ZXZlbnQgPSAnc21kX21hY3JvJzsKCiAgICBhZGRfcHJpdnMoJHNtZF9tYWNyb19ldmVudCwn MSwyJyk7CiAgICByZWdpc3Rlcl90YWIoJ2NvbnRlbnQnLCAkc21kX21hY3JvX2V2ZW50LCBn VHh0KCdzbWRfbWFjcm9fdGFiX25hbWUnKSk7CiAgICByZWdpc3Rlcl9jYWxsYmFjaygnc21k X21hY3JvX2Rpc3BhdGNoZXInLCAnc21kX21hY3JvJyk7CiAgICByZWdpc3Rlcl9jYWxsYmFj aygnc21kX21hY3JvX3VwbG9hZF9mb3JtJywgJHNtZF9tYWNyb19ldmVudC4nX3VpJywgJ2lu cHV0bGFiZWwuJy4kc21kX21hY3JvX2V2ZW50LictdXBsb2FkJyk7CiAgICByZWdpc3Rlcl9j YWxsYmFjaygnc21kX21hY3JvX3dlbGNvbWUnLCAncGx1Z2luX2xpZmVjeWNsZS5zbWRfbWFj cm8nKTsKfQoKaWYgKCFkZWZpbmVkKCdTTURfTUFDUk8nKSkgewogICAgZGVmaW5lKCJTTURf TUFDUk8iLCAnc21kX21hY3JvJyk7Cn0KCi8vIEJvb3RzdHJhcCB0aGUgZnVuY3Rpb24gaW5z ZXJ0aW9uCnJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfbWFjcm9fYm9vdCcsICdwcmV0ZXh0Jyk7 CgovLyAqKioqKioqKioqKioqKioqKioqKgovLyBBRE1JTiBTSURFIElOVEVSRkFDRQovLyAq KioqKioqKioqKioqKioqKioqKgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0 aW9uIHNtZF9tYWNyb19kaXNwYXRjaGVyKCRldnQsICRzdHApCnsKICAgIGdsb2JhbCAkc21k X21hY3JvX2V2ZW50OwoKICAgICRhdmFpbGFibGVfc3RlcHMgPSBhcnJheSgKICAgICAgICAn c21kX21hY3JvX3RhYmxlX2luc3RhbGwnID0+IHRydWUsCiAgICAgICAgJ3NtZF9tYWNyb190 YWJsZV9yZW1vdmUnICA9PiB0cnVlLAogICAgICAgICdzbWRfbWFjcm9fcHJlZnNhdmUnICAg ICAgPT4gdHJ1ZSwKICAgICAgICAnc21kX21hY3JvX3NhdmUnICAgICAgICAgID0+IHRydWUs CiAgICAgICAgJ3NtZF9tYWNyb19kZWxldGUnICAgICAgICA9PiB0cnVlLAogICAgKTsKCiAg ICBpZiAoISRzdHAgb3IgIWJvdW5jZXIoJHN0cCwgJGF2YWlsYWJsZV9zdGVwcykpIHsKICAg ICAgICAkc3RwID0gJHNtZF9tYWNyb19ldmVudDsKICAgIH0KCiAgICAkc3RwKCk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfbWFjcm9fd2VsY29tZSgk ZXZ0LCAkc3RwKQp7CiAgICAkbXNnID0gJyc7CiAgICBzd2l0Y2ggKCRzdHApIHsKICAgICAg ICBjYXNlICdpbnN0YWxsZWQnOgogICAgICAgICAgICBzbWRfbWFjcm9fdGFibGVfaW5zdGFs bCgwKTsKICAgICAgICAgICAgJG1zZyA9ICdHbyBnbyBnYWRnZXQgbWFjcm8hJzsKICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZGVsZXRlZCc6CiAgICAgICAgICAgIHNtZF9t YWNyb190YWJsZV9yZW1vdmUoMCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQoKICAgIHJl dHVybiAkbXNnOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc21k X21hY3JvKCRtc2cgPSAnJykKewogICAgZ2xvYmFsICRzbWRfbWFjcm9fZXZlbnQ7CgogICAg aWYgKCFzbWRfbWFjcm9fdGFibGVfZXhpc3QoMSkpIHsKICAgICAgICBzbWRfbWFjcm9fdGFi bGVfaW5zdGFsbCgwKTsKICAgIH0KCiAgICAkZXhwb3J0X2xpc3QgPSBncHMoJ3NtZF9tYWNy b19leHBvcnQnKTsKICAgICRtYXhfZmlsZV9zaXplID0gZ2V0X3ByZWYoJ3NtZF9tYWNyb19p bXBvcnRfZmlsZXNpemUnLCAxNSAqIDEwMjQpOwoKICAgIGlmIChncHMoJ3N0ZXAnKSA9PSAn c21kX21hY3JvX2V4cG9ydCcgJiYgJGV4cG9ydF9saXN0KSB7CiAgICAgICAgLy8gR2VuZXJh dGUgYW4gYXNzb2NpYXRpdmUgYXJyYXkgdGhhdCBpcyB0cmFuc2xhdGVkIHRvIGFuIGluaSBm aWxlCiAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgJHJvd3MgPSBzYWZlX3Jvd3Mo JyonLCBTTURfTUFDUk8sICJtYWNyb19uYW1lIElOICgnIi5qb2luKCInLCciLCBkb1NsYXNo KCRleHBvcnRfbGlzdCkpLiInKSIpOwoKICAgICAgICBmb3JlYWNoICgkcm93cyBhcyAkcm93 KSB7CiAgICAgICAgICAgICRhdHRzID0gdW5zZXJpYWxpemUoJHJvd1snYXR0cmlidXRlcydd KTsKICAgICAgICAgICAgJG91dGF0dHMgPSBhcnJheSgpOwoKICAgICAgICAgICAgZm9yZWFj aCAoJGF0dHMgYXMgJGF0dCA9PiAkdmFscykgewogICAgICAgICAgICAgICAgJG91dGF0dHNb XSA9IHV0ZjhfZGVjb2RlKGpvaW4oJ3wnLCBhcnJheSgkYXR0LCAkdmFsc1snZGVmYXVsdCdd LCAkdmFsc1sncmVwJ10pKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRvdXRbJHJv d1snbWFjcm9fbmFtZSddXSA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9u JyA9PiAkcm93WydkZXNjcmlwdGlvbiddLAogICAgICAgICAgICAgICAgJ2F0dHJpYnV0ZXMn ID0+ICRvdXRhdHRzLAogICAgICAgICAgICAgICAgJ2RlZmluaXRpb24nID0+ICRyb3dbJ2Rl ZmluaXRpb24nXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRjb250ZW50 ID0gc21kX21hY3JvX2NyZWF0ZV9pbmkoJG91dCwgYXJyYXkoJ2RlZmluaXRpb24nID0+ICdi YXNlNjRfZW5jb2RlJykpOwogICAgICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3Bs YWluOyBjaGFyc2V0PXV0Zi04Iik7CiAgICAgICAgaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0 aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cInNtZF9tYWNyb3MuaW5pXCIiKTsKICAgICAg ICBoZWFkZXIoIkNvbnRlbnQtTGVuZ3RoOiAiIC4gbWJfc3RybGVuKCRjb250ZW50KSk7CiAg ICAgICAgaGVhZGVyKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkiKTsKICAg ICAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUs IG1heC1hZ2U9NjAiKTsKICAgICAgICBoZWFkZXIoIkV4cGlyZXM6IFNhdCwgMDEgSmFuIDIw MDAgMTI6MDA6MDAgR01UIik7CiAgICAgICAgcHJpbnQoJGNvbnRlbnQpOwogICAgICAgIGV4 aXQ7CgogICAgfSBlbHNlaWYgKGdwcygnc3RlcCcpID09ICdzbWRfbWFjcm9faW1wb3J0Jykg ewogICAgICAgICRvdmVyd3JpdGUgPSBncHMoJ3NtZF9tYWNyb19pbXBvcnRfb3ZlcndyaXRl Jyk7CgogICAgICAgICRmaWxlID0gQGdldF91cGxvYWRlZF9maWxlKCRfRklMRVNbJ3RoZWZp bGUnXVsndG1wX25hbWUnXSwgZ2V0X3ByZWYoJ3RlbXBkaXInKS5EUy5iYXNlbmFtZSgkX0ZJ TEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pKTsKCiAgICAgICAgaWYgKCRmaWxlID09PSBm YWxzZSkgewogICAgICAgICAgICAkbXNnID0gYXJyYXkoZ1R4dCgnc21kX21hY3JvX2Nhbm5v dF9pbXBvcnQnKSwgRV9XQVJOSU5HKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAk c2l6ZSA9IGZpbGVzaXplKCRmaWxlKTsKCiAgICAgICAgICAgIGlmICgkbWF4X2ZpbGVfc2l6 ZSA8ICRzaXplKSB7CiAgICAgICAgICAgICAgICAkbXNnID0gYXJyYXkoZ1R4dCgnc21kX21h Y3JvX2ZpbGVfc2l6ZScpLCBFX1dBUk5JTkcpOwogICAgICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICAgICAgJGluaSA9IEBwYXJzZV9pbmlfZmlsZSgkZmlsZSwgdHJ1ZSk7CgogICAg ICAgICAgICAgICAgaWYgKCRpbmkpIHsKICAgICAgICAgICAgICAgICAgICAkZG9uZSA9IGFy cmF5KCdvaycgPT4gYXJyYXkoKSwgJ25vaycgPT4gYXJyYXkoKSwgJ3NraXAnID0+IGFycmF5 KCkpOwoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaW5pIGFzICRrZXkgPT4gJHZh bCkgewogICAgICAgICAgICAgICAgICAgICAgICAkYXR0cyA9IGFycmF5KCk7CiAgICAgICAg ICAgICAgICAgICAgICAgICRkZWYgPSAkZGVzYyA9ICcnOwoKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGlzc2V0KCR2YWxbJ2F0dHJpYnV0ZXMnXSkpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWxbJ2F0dHJpYnV0ZXMnXSBhcyAkYXR0bGlzdCkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoJG5hbSwgJGRmbHQsICRy ZXApID0gZXhwbG9kZSgnfCcsIHV0ZjhfZW5jb2RlKCRhdHRsaXN0KSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJGF0dHNbc3RydG9sb3dlcihzdHJfcmVwbGFjZSgnLScs ICdfJywgc2FuaXRpemVGb3JVcmwoJG5hbSkpKV0gPSBhcnJheSgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHQnID0+ICRkZmx0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAncmVwJyA9PiAkcmVwCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0 KCR2YWxbJ2Rlc2NyaXB0aW9uJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk ZGVzYyA9ICR2YWxbJ2Rlc2NyaXB0aW9uJ107CiAgICAgICAgICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdmFsWydkZWZpbml0aW9uJ10p KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVmID0gYmFzZTY0X2RlY29kZSgk dmFsWydkZWZpbml0aW9uJ10pOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gKHN0cmluZylzbWRfbWFjcm9fc2F2ZV9kaXJl Y3QoJGtleSwgJGRlc2MsICRhdHRzLCAkZGVmLCAkb3ZlcndyaXRlKTsKICAgICAgICAgICAg ICAgICAgICAgICAgc3dpdGNoICgkcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlICdTTURfTUFDUk9fQkFEX05BTUUnOgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSAnU01EX01BQ1JPX0NMQVNIJzoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAkZG9uZVsnbm9rJ11bXSA9ICRrZXk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTTURf TUFDUk9fU0tJUCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRvbmVbJ3Nr aXAnXVtdID0gJGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJGRvbmVbJ29rJ11bXSA9ICRrZXk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRtc2cgPSAoKCRkb25lWydv ayddKSA/IGdUeHQoJ3NtZF9tYWNyb19pbXBvcnRlZCcpIC4gam9pbignLCAnLCAkZG9uZVsn b2snXSkuYnIgOiAnJykKICAgICAgICAgICAgICAgICAgICAgICAgLiAoKCRkb25lWydza2lw J10pID8gZ1R4dCgnc21kX21hY3JvX3NraXBwZWQnKSAuIGpvaW4oJywgJywgJGRvbmVbJ3Nr aXAnXSkuYnIgOiAnJykKICAgICAgICAgICAgICAgICAgICAgICAgLiAoKCRkb25lWydub2sn XSkgPyBnVHh0KCdzbWRfbWFjcm9fbm90X2ltcG9ydGVkJykgLiBqb2luKCcsICcsICRkb25l Wydub2snXSkgOiAnJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg ICAgICAgICRtc2cgPSBhcnJheShnVHh0KCdzbWRfbWFjcm9faW52YWxpZF9pbmknKSwgRV9X QVJOSU5HKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB1 bmxpbmsoJGZpbGUpOwogICAgICAgIH0KICAgIH0gZWxzZWlmIChncHMoJ3N0ZXAnKSA9PSAn c21kX21hY3JvX2Nsb25lJykgewogICAgICAgICRzb3VyY2UgPSBzYWZlX3JvdygnKicsIFNN RF9NQUNSTywgIm1hY3JvX25hbWU9JyIuZG9TbGFzaChncHMoJ3NtZF9tYWNyb19uYW1lJykp LiInIik7CiAgICAgICAgJG5hbWUgPSBncHMoJ3NtZF9tYWNyb19uZXdfbmFtZScpOwogICAg ICAgICRkZXNjID0gJHNvdXJjZVsnZGVzY3JpcHRpb24nXTsKICAgICAgICAkZGVmID0gJHNv dXJjZVsnZGVmaW5pdGlvbiddOwogICAgICAgICRhdHRzID0gJHNvdXJjZVsnYXR0cmlidXRl cyddOwoKICAgICAgICAkcmVzdWx0ID0gKHN0cmluZylzbWRfbWFjcm9fc2F2ZV9kaXJlY3Qo JG5hbWUsICRkZXNjLCAkYXR0cywgJGRlZiwgZmFsc2UpOwoKICAgICAgICBzd2l0Y2goJHJl c3VsdCkgewogICAgICAgICAgICBjYXNlICdTTURfTUFDUk9fQkFEX05BTUUnOgogICAgICAg ICAgICAgICAgJG1zZyA9IGFycmF5KGdUeHQoJ3NtZF9tYWNyb19pbnZhbGlkJyksIEVfV0FS TklORyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnU01EX01B Q1JPX0NMQVNIJzoKICAgICAgICAgICAgY2FzZSAnU01EX01BQ1JPX1NLSVAnOgogICAgICAg ICAgICAgICAgJG1zZyA9IGFycmF5KGdUeHQoJ3NtZF9tYWNyb19leGlzdHMnKSwgRV9XQVJO SU5HKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgICAgICAgJG1zZyA9IGdUeHQoJ3NtZF9tYWNyb19jcmVhdGVkJyk7CiAgICAgICAg ICAgICAgICAkX1BPU1RbJ3NtZF9tYWNyb19uYW1lJ10gPSAkbmFtZTsgLy8gSW5qZWN0IHRo ZSBuZXcgbWFjcm8gaW50byB0aGUgcG9zdCBzdHJlYW0gc28gaXQncyBzZWxlY3RlZCBieSBk ZWZhdWx0CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcGFn ZXRvcChnVHh0KCdzbWRfbWFjcm9fdGFiX25hbWUnKSwgJG1zZyk7CgogICAgJG1hY3JvcyA9 IHNhZmVfcm93cygnKicsIFNNRF9NQUNSTywgJzE9MSBPUkRFUiBCWSBtYWNyb19uYW1lJyk7 CiAgICAkbWFjcm9fbmFtZSA9ICRtYWNyb19uZXdfbmFtZSA9IGdwcygnc21kX21hY3JvX25h bWUnKTsKICAgICRtYWNyb19kZXNjcmlwdGlvbiA9ICRtYWNyb19kZWYgPSAkbWFjcm9fY29k ZSA9ICcnOwogICAgJG1hY3JvX2F0dHMgPSBhcnJheSgpOwoKICAgIC8vIEJ1aWxkIHRoZSBz ZWxlY3QgbGlzdCBpZiBwb3NzaWJsZQogICAgJG1hY3JvbGlzdCA9IGFycmF5KCk7CgogICAg Zm9yZWFjaCAoJG1hY3JvcyBhcyAkaWR4ID0+ICRtYWNybykgewogICAgICAgICRtYWNyb2xp c3RbJG1hY3JvWydtYWNyb19uYW1lJ11dID0gJG1hY3JvWydtYWNyb19uYW1lJ107CgogICAg ICAgIGlmICgkbWFjcm9bJ21hY3JvX25hbWUnXSA9PSAkbWFjcm9fbmFtZSkgewogICAgICAg ICAgICAkbWFjcm9fbmV3X25hbWUgPSAkbWFjcm9bJ21hY3JvX25hbWUnXTsKICAgICAgICAg ICAgJG1hY3JvX2Rlc2NyaXB0aW9uID0gJG1hY3JvWydkZXNjcmlwdGlvbiddOwogICAgICAg ICAgICAkbWFjcm9fYXR0cyA9ICRtYWNyb1snYXR0cmlidXRlcyddID8gdW5zZXJpYWxpemUo JG1hY3JvWydhdHRyaWJ1dGVzJ10pIDogYXJyYXkoKTsKICAgICAgICAgICAgJG1hY3JvX2Rl ZiA9ICRtYWNyb1snZGVmaW5pdGlvbiddOwogICAgICAgIH0KICAgIH0KCiAgICAkbWFjcm9T ZWxlY3RvciA9ICgkbWFjcm9saXN0KSA/IHNlbGVjdElucHV0KCdzbWRfbWFjcm9fbmFtZScs ICRtYWNyb2xpc3QsICRtYWNyb19uYW1lLCB0cnVlLCAxKSA6ICcnOwogICAgJG11bHRpX21h Y3NlbCA9ICcnOwoKICAgIGlmICgkbWFjcm9saXN0KSB7CiAgICAgICAgJG11bHRpX21hY3Nl bCA9ICc8c2VsZWN0IG5hbWU9InNtZF9tYWNyb19leHBvcnRbXSIgaWQ9InNtZF9tYWNyb19l eHBvcnRfbGlzdCIgc2l6ZT0iOCIgY2xhc3M9Imxpc3QiIG11bHRpcGxlPSJtdWx0aXBsZSI+ Jy5uOwogICAgICAgIGZvcmVhY2ggKCRtYWNyb2xpc3QgYXMgJGtleSA9PiAkdmFsKSB7CiAg ICAgICAgICAgICRtdWx0aV9tYWNzZWwgLj0gJzxvcHRpb24gdmFsdWU9IicuJGtleS4nIicg LiAoKCRtYWNyb19uYW1lPT0ka2V5KSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykg Lic+Jy4kdmFsLic8L29wdGlvbj4nLm47CiAgICAgICAgfQogICAgICAgICRtdWx0aV9tYWNz ZWwgLj0gJzwvc2VsZWN0Pic7CiAgICB9CgogICAgJGVkaXRjZWxsID0gKCRtYWNyb2xpc3Qp ID8gJzxsYWJlbD4nLmdUeHQoJ3NtZF9tYWNyb19jaG9vc2UnKS4nPC9sYWJlbD4nLm4uJG1h Y3JvU2VsZWN0b3IgOiAnJzsKCiAgICAvLyBFZGl0IGZvcm0KICAgIGVjaG8gbiwgJzxoMSBj bGFzcz0idHhwLWhlYWRpbmciPicsIGdUeHQoJ3NtZF9tYWNyb190YWJfbmFtZScpLCAnPC9o MT4nLAogICAgICAgIG4sICc8ZGl2IGlkPSJzbWRfbWFjcm9fY29udHJvbCIgY2xhc3M9InR4 cC1jb250cm9sLXBhbmVsIj4nLAogICAgICAgIG4sICc8Zm9ybSBpZD0ic21kX21hY3JvX3Nl bGVjdCIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCI+JywKICAgICAgICBuLCAn PHAgaWQ9InNtZF9tYWNyb19zZWxlY3QiPicsCiAgICAgICAgbiwgJGVkaXRjZWxsLAogICAg ICAgIG4sIGVJbnB1dCgkc21kX21hY3JvX2V2ZW50KSwKICAgICAgICBuLCAnPC9mb3JtPics CgogICAgICAgIC8vIEltcG9ydCAvIGV4cG9ydCBmb3JtCiAgICAgICAgbiwgJzxhIGlkPSJz bWRfbWFjcm9faW1wb3J0IiBocmVmPSIjIj4nLmdUeHQoJ3NtZF9tYWNyb19pbXBvcnQnKS4n PC9hPicsCiAgICAgICAgbiwgKCgkbXVsdGlfbWFjc2VsKQogICAgICAgICAgICA/ICcgLyAn IC4gJzxhIGlkPSJzbWRfbWFjcm9fZXhwb3J0IiBocmVmPSIjIj4nLmdUeHQoJ3NtZF9tYWNy b19leHBvcnQnKS4nPC9hPicKICAgICAgICAgICAgICAgIC4gKCgkbWFjcm9fbmFtZSkgPyAn IC8gJyAuICc8YSBpZD0ic21kX21hY3JvX2Nsb25lIiBocmVmPSIjIj4nLmdUeHQoJ3NtZF9t YWNyb19jbG9uZScpLic8L2E+JyA6ICcnKQogICAgICAgICAgICA6ICcnKSwKICAgICAgICBu LCAnPGRpdiBpZD0ic21kX21hY3JvX2ltcG9ydF9ob2xkZXIiIGNsYXNzPSJzbWRfaGlkZGVu Ij4nLAogICAgICAgIG4sIHVwbG9hZF9mb3JtKGdUeHQoJ3NtZF9tYWNyb191cGxvYWQnKSwg JycsICdzbWRfbWFjcm9faW1wb3J0JywgJHNtZF9tYWNyb19ldmVudCwgJycpLAogICAgICAg IG4sICc8L2Rpdj4nLAogICAgICAgIG4sICgoJG11bHRpX21hY3NlbCkKICAgICAgICAgICAg ICAgID8gJzxkaXYgaWQ9InNtZF9tYWNyb19leHBvcnRfaG9sZGVyIiBjbGFzcz0ic21kX2hp ZGRlbiI+PGZvcm0gaWQ9InNtZF9tYWNyb19leHBvcnRfZm9ybSIgYWN0aW9uPSJpbmRleC5w aHAiIG1ldGhvZD0icG9zdCI+JwogICAgICAgICAgICAgICAgICAgIC4gJG11bHRpX21hY3Nl bCAuIGJyCiAgICAgICAgICAgICAgICAgICAgLiBmSW5wdXQoJ3N1Ym1pdCcsICdzbWRfbWFj cm9fZXhwb3J0X2dvJywgZ1R4dCgnZ28nKSwgJycsICcnLCAnc21kX21hY3JvX2V4cG9ydF9j bG9zZSgpOycpCiAgICAgICAgICAgICAgICAgICAgLiBlSW5wdXQoJHNtZF9tYWNyb19ldmVu dCkKICAgICAgICAgICAgICAgICAgICAuIHNJbnB1dCgnc21kX21hY3JvX2V4cG9ydCcpCiAg ICAgICAgICAgICAgICAgICAgLiAnPC9mb3JtPjwvZGl2PicKICAgICAgICAgICAgICAgICAg ICAuICc8ZGl2IGlkPSJzbWRfbWFjcm9fY2xvbmVfaG9sZGVyIiBjbGFzcz0ic21kX2hpZGRl biI+PGZvcm0gaWQ9InNtZF9tYWNyb19jbG9uZV9mb3JtIiBhY3Rpb249ImluZGV4LnBocCIg bWV0aG9kPSJwb3N0Ij4nCiAgICAgICAgICAgICAgICAgICAgLiBoSW5wdXQoJ3NtZF9tYWNy b19uYW1lJywgJG1hY3JvX25hbWUpCiAgICAgICAgICAgICAgICAgICAgLiBmSW5wdXQoJ3Rl eHQnLCAnc21kX21hY3JvX25ld19uYW1lJywgJycpCiAgICAgICAgICAgICAgICAgICAgLiBm SW5wdXQoJ3N1Ym1pdCcsICdzbWRfbWFjcm9fY2xvbmVfZ28nLCBnVHh0KCdnbycpKQogICAg ICAgICAgICAgICAgICAgIC4gZUlucHV0KCRzbWRfbWFjcm9fZXZlbnQpCiAgICAgICAgICAg ICAgICAgICAgLiBzSW5wdXQoJ3NtZF9tYWNyb19jbG9uZScpCiAgICAgICAgICAgICAgICAg ICAgLiB0SW5wdXQoKQogICAgICAgICAgICAgICAgICAgIC4gJzwvZm9ybT48L2Rpdj4nCiAg ICAgICAgICAgICAgICA6ICcnCiAgICAgICAgICAgICksCiAgICAgICAgbiwgJzwvZGl2Pic7 CgogICAgZWNobyBuLCAnPGRpdiBjbGFzcz0idHhwLWNvbnRhaW5lciI+JywKICAgICAgICBu LCAnPGZvcm0gaWQ9InNtZF9tYWNyb19mb3JtIiBhY3Rpb249ImluZGV4LnBocCIgbWV0aG9k PSJwb3N0Ij4nLAogICAgICAgIG4sIHN0YXJ0VGFibGUoKSwKICAgICAgICBuLCB0cigKICAg ICAgICAgICAgZkxhYmVsQ2VsbCgnbmFtZScsICcnLCAnc21kX21hY3JvX25ld19uYW1lJykK ICAgICAgICAgICAgLm4udGQoCiAgICAgICAgICAgICAgICBmSW5wdXQoJ3RleHQnLCAnc21k X21hY3JvX25ld19uYW1lJywgJG1hY3JvX25ld19uYW1lKS5mSW5wdXQoJ2hpZGRlbicsICdz bWRfbWFjcm9fbmFtZScsICRtYWNyb19uYW1lKQogICAgICAgICAgICAgICAgLigoJG1hY3Jv X25hbWUgPT0gJycpID8gJycgOiBzcC4nPGEgaHJlZj0iP2V2ZW50PScuJHNtZF9tYWNyb19l dmVudC4gYS4nc3RlcD1zbWRfbWFjcm9fZGVsZXRlJyAuIGEgLiAnc21kX21hY3JvX25hbWU9 Jy51cmxlbmNvZGUoJG1hY3JvX25hbWUpLiBhIC4gJ190eHBfdG9rZW49Jy5mb3JtX3Rva2Vu KCkgLiAnIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybShcJycuZ1R4dCgnY29uZmlybV9kZWxl dGVfcG9wdXAnKS4nXCcpOyI+W3hdPC9hPicpCiAgICAgICAgICAgICkKICAgICAgICApLAog ICAgICAgIG4sIHRyKAogICAgICAgICAgICBmTGFiZWxDZWxsKCdkZXNjcmlwdGlvbicsICcn LCAnc21kX21hY3JvX2Rlc2NyaXB0aW9uJykKICAgICAgICAgICAgLm4udGQoCiAgICAgICAg ICAgICAgICBmSW5wdXQoJ3RleHQnLCAnc21kX21hY3JvX2Rlc2NyaXB0aW9uJywgJG1hY3Jv X2Rlc2NyaXB0aW9uLCAnJywgJycsICcnLCAnNjYnKQogICAgICAgICAgICApCiAgICAgICAg KTsKCiAgICAkYXR0bGlzdCA9IGFycmF5KCc8dGFibGUgaWQ9InNtZF9tYWNyb19hdHRsaXN0 Ij48dGhlYWQ+PHRyPjx0aD4nLmdUeHQoJ25hbWUnKS4nPC90aD48dGg+Jy5nVHh0KCdkZWZh dWx0JykuJzwvdGg+PHRoPicuZ1R4dCgnc21kX21hY3JvX3JlcG5hbWUnKS4nPC90aD48L3Ry PjwvdGhlYWQ+PHRib2R5PicpOwogICAgJG1hY3JvX2F0dHMgPSBlbXB0eSgkbWFjcm9fYXR0 cykgPyBhcnJheSgnJyA9PiBhcnJheSgnZGVmYXVsdCcgPT4gJycsICdyZXAnID0+ICcnKSkg OiAkbWFjcm9fYXR0czsKCiAgICBmb3JlYWNoICgkbWFjcm9fYXR0cyBhcyAkYXR0bmFtZSA9 PiAkYXR0KSB7CiAgICAgICAgJGF0dGxpc3RbXSA9ICc8dHIgY2xhc3M9InNtZF9tYWNyb19h dHQiPicKICAgICAgICAgICAgLic8dGQ+Jy5mSW5wdXQoJ3RleHQnLCAnc21kX21hY3JvX2F0 dG5hbWVbXScsICRhdHRuYW1lKS4gJzwvdGQ+JwogICAgICAgICAgICAuJzx0ZD4nLmZJbnB1 dCgndGV4dCcsICdzbWRfbWFjcm9fYXR0ZGZsdFtdJywgJGF0dFsnZGVmYXVsdCddKS4gJzwv dGQ+JwogICAgICAgICAgICAuJzx0ZD4nLmZJbnB1dCgndGV4dCcsICdzbWRfbWFjcm9fYXR0 cmVwW10nLCAkYXR0WydyZXAnXSkuICc8L3RkPicKICAgICAgICAgICAgLic8L3RyPic7CiAg ICB9CiAgICAkYXR0bGlzdFtdID0gJzwvdGJvZHk+PC90YWJsZT4nOwoKICAgICRhdHRzID0g am9pbihuLCAkYXR0bGlzdCk7CiAgICBlY2hvIG4sIHRyKAogICAgICAgIHRkYSgnPGxhYmVs PicuZ1R4dCgnc21kX21hY3JvX2F0dHJpYnV0ZXMnKS4nPC9sYWJlbD4nLm4uJzxhIGhyZWY9 IiMiIGlkPSJzbWRfbWFjcm9fYXR0X2FkZCIgdGl0bGU9IicuZ1R4dCgnc21kX21hY3JvX2F0 dF9jbG9uZV9oZWxwJykuJyI+Jy5nVHh0KCdzbWRfbWFjcm9fYXR0X2Nsb25lJykuJzwvYT4n KQogICAgICAgIC50ZGEoJGF0dHMsICcgaWQ9InNtZF9tYWNyb19hdHQiJykKICAgICAgICAp LAogICAgICAgIG4sIHRyKAogICAgICAgICAgICB0ZGEoJzxsYWJlbD4nLmdUeHQoJ3NtZF9t YWNyb190YWdfZGVmaW5pdGlvbicpLic8L2xhYmVsPicpCiAgICAgICAgICAgIC5uLnRkYSgK ICAgICAgICAgICAgICAgIHRleHRfYXJlYSgnc21kX21hY3JvX2RlZmluaXRpb24nLCAyNTAs IDcwMCwgJG1hY3JvX2RlZikKICAgICAgICAgICAgKQogICAgICAgICksCiAgICAgICAgbiwg dHIodGQoJyZuYnNwOycpLmVJbnB1dCgkc21kX21hY3JvX2V2ZW50KS5zSW5wdXQoJ3NtZF9t YWNyb19zYXZlJykudGQoZklucHV0KCdzdWJtaXQnLCAnc2F2ZScsIGdUeHQoJ3NhdmUnKSkp KSwKICAgICAgICBuLCB0SW5wdXQoKSwKICAgICAgICBuLCBlbmRUYWJsZSgpLAogICAgICAg IG4sICc8L2Zvcm0+JywKICAgICAgICBuLCAnPC9kaXY+JywKICAgICAgICBuLCBzY3JpcHRf anMoPDw8RU9KUwpqUXVlcnkoZnVuY3Rpb24oKSB7CiAgICBqUXVlcnkoJyNzbWRfbWFjcm9f YXR0X2FkZCcpLmNsaWNrKGZ1bmN0aW9uKGV2KSB7CiAgICAgICAgdmFyIG9iaiA9IGpRdWVy eSgnI3NtZF9tYWNyb19hdHRsaXN0IHRib2R5Jyk7CiAgICAgICAgdmFyIGVsZW1zID0galF1 ZXJ5KCcuc21kX21hY3JvX2F0dCcpOwoKICAgICAgICAvLyBBZGQgdGhlIHJvdywgZW1wdHkg aXQgYW5kIGZvY3VzLiBDYW4ndCBkbyB0aGlzIGluIGFueSBmZXdlciBqUXVlcnkoKSBjYWxs cyBmb3Igc29tZSByZWFzb24KICAgICAgICBvYmouYXBwZW5kKG9iai5jaGlsZHJlbigpLmVx KDApLmNsb25lKCkpOwogICAgICAgIG9iai5jaGlsZHJlbigpLmxhc3QoKS5maW5kKCdpbnB1 dDp0ZXh0JykudmFsKCcnKTsKICAgICAgICBvYmouY2hpbGRyZW4oKS5sYXN0KCkuZmluZCgn aW5wdXQ6dGV4dCcpLmZpcnN0KCkuZm9jdXMoKTsKICAgICAgICBldi5wcmV2ZW50RGVmYXVs dCgpOwogICAgfSk7CgogICAgLy8gSW1wb3J0IGxpbmsKICAgIGpRdWVyeSgnI3NtZF9tYWNy b19pbXBvcnQnKS5jbGljayhmdW5jdGlvbihldikgewogICAgICAgIGpRdWVyeSgnI3NtZF9t YWNyb19leHBvcnRfaG9sZGVyJykuaGlkZSgnbm9ybWFsJyk7CiAgICAgICAgalF1ZXJ5KCcj c21kX21hY3JvX2Nsb25lX2hvbGRlcicpLmhpZGUoJ25vcm1hbCcpOwogICAgICAgIGpRdWVy eSgnI3NtZF9tYWNyb19pbXBvcnRfaG9sZGVyJykudG9nZ2xlKCdub3JtYWwnKTsKICAgIH0p OwoKICAgIC8vIEV4cG9ydCBsaW5rCiAgICBqUXVlcnkoJyNzbWRfbWFjcm9fZXhwb3J0Jyku Y2xpY2soZnVuY3Rpb24oZXYpIHsKICAgICAgICBqUXVlcnkoJyNzbWRfbWFjcm9faW1wb3J0 X2hvbGRlcicpLmhpZGUoJ25vcm1hbCcpOwogICAgICAgIGpRdWVyeSgnI3NtZF9tYWNyb19j bG9uZV9ob2xkZXInKS5oaWRlKCdub3JtYWwnKTsKICAgICAgICBqUXVlcnkoJyNzbWRfbWFj cm9fZXhwb3J0X2hvbGRlcicpLnRvZ2dsZSgnbm9ybWFsJyk7CiAgICB9KTsKCiAgICAvLyBD bG9uZSBsaW5rCiAgICBqUXVlcnkoJyNzbWRfbWFjcm9fY2xvbmUnKS5jbGljayhmdW5jdGlv bihldikgewogICAgICAgIGpRdWVyeSgnI3NtZF9tYWNyb19pbXBvcnRfaG9sZGVyJykuaGlk ZSgnbm9ybWFsJyk7CiAgICAgICAgalF1ZXJ5KCcjc21kX21hY3JvX2V4cG9ydF9ob2xkZXIn KS5oaWRlKCdub3JtYWwnKTsKICAgICAgICBqUXVlcnkoJyNzbWRfbWFjcm9fY2xvbmVfaG9s ZGVyJykudG9nZ2xlKCdub3JtYWwnKS5maW5kKCJpbnB1dFtuYW1lPSdzbWRfbWFjcm9fbmV3 X25hbWUnXSIpLmZvY3VzKCk7CiAgICB9KTsKfSk7CmZ1bmN0aW9uIHNtZF9tYWNyb19leHBv cnRfY2xvc2UoKSB7CiAgICBqUXVlcnkoIiNzbWRfbWFjcm9fZXhwb3J0IikuY2xpY2soKTsK fQpFT0pTCiAgICAgICAgKSwKICAgICAgICA8PDxFT0NTUwo8c3R5bGUgdHlwZT0idGV4dC9j c3MiPgouc21kX2hpZGRlbiB7CiAgICBkaXNwbGF5Om5vbmU7Cn0KPC9zdHlsZT4KRU9DU1M7 Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBBZGQgYW4gb3ZlcndyaXRlIGNo ZWNrYm94IHRvIHRoZSB1cGxvYWQgZm9ybQpmdW5jdGlvbiBzbWRfbWFjcm9fdXBsb2FkX2Zv cm0oJGV2dCwgJHN0cCwgJGRhdGEsICRhcmdzKQp7CiAgICByZXR1cm4gJGRhdGEgLgogICAg ICAgIGNoZWNrYm94KCdzbWRfbWFjcm9faW1wb3J0X292ZXJ3cml0ZScsICcxJywgZmFsc2Us IDAsICdzbWRfbWFjcm9faW1wb3J0X292ZXJ3cml0ZScpIC4KICAgICAgICAnPGxhYmVsIGZv cj0ic21kX21hY3JvX2ltcG9ydF9vdmVyd3JpdGUiPicgLiBnVHh0KCdzbWRfbWFjcm9fb3Zl cndyaXRlJykgLiAnPC9sYWJlbD4nOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Ly8gVGFrZXMgZnVuY3Rpb24gcGFyYW1zOyBhc3N1bWVzIGF0dHJpYnV0ZSBzYW5pdGl6YXRp b24gZG9uZSBhbHJlYWR5CmZ1bmN0aW9uIHNtZF9tYWNyb19zYXZlX2RpcmVjdCgkbmFtZSA9 ICcnLCAkZGVzYyA9ICcnLCAkYXR0cyA9IGFycmF5KCksICRkZWYgPSAnJywgJG92ZXJ3cml0 ZSA9IGZhbHNlKQp7CiAgICBnbG9iYWwgJHNtZF9tYWNyb19ldmVudDsKCiAgICAkc21kX21h Y3JvX25ld19uYW1lID0gc2FuaXRpemVGb3JVcmwoJG5hbWUpOwogICAgJHNtZF9tYWNyb19k ZXNjcmlwdGlvbiA9IGRvU2xhc2goJGRlc2MpOwogICAgJHNtZF9tYWNyb19kZWZpbml0aW9u ID0gJGRlZjsKCiAgICAkcmV0ID0gJyc7CgogICAgaWYgKHNtZF9tYWNyb192YWxpZCgkc21k X21hY3JvX25ld19uYW1lKSkgewogICAgICAgICRjb2RlID0gZG9TbGFzaChzbWRfbWFjcm9f YnVpbGQoJHNtZF9tYWNyb19uZXdfbmFtZSwgJGF0dHMsICRzbWRfbWFjcm9fZGVmaW5pdGlv bikpOwoKICAgICAgICAkc21kX21hY3JvX2RlZmluaXRpb24gPSBkb1NsYXNoKCRzbWRfbWFj cm9fZGVmaW5pdGlvbik7CiAgICAgICAgJHNtZF9tYWNyb19hdHRzID0gaXNfYXJyYXkoJGF0 dHMpID8gc2VyaWFsaXplKCRhdHRzKSA6ICRhdHRzOwoKICAgICAgICBpZiAoc21kX21hY3Jv X3RhYmxlX2V4aXN0KCkpIHsKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBtYWNybyBu YW1lIGNsYXNoZXMgd2l0aCBhIGJ1aWx0LWluIFBIUC9UeHAgZnVuY3Rpb24KICAgICAgICAg ICAgJGV4aXN0cyA9IHNtZF9tYWNyb19leGlzdHMoJHNtZF9tYWNyb19uZXdfbmFtZSwgZmFs c2UpOwoKICAgICAgICAgICAgaWYgKCRleGlzdHMgPT09IGZhbHNlKSB7CiAgICAgICAgICAg ICAgICAkaW5kYiA9IHNhZmVfZmllbGQoJ21hY3JvX25hbWUnLCBTTURfTUFDUk8sICJtYWNy b19uYW1lPSckc21kX21hY3JvX25ld19uYW1lJyIpOwoKICAgICAgICAgICAgICAgIGlmICgk aW5kYikgewogICAgICAgICAgICAgICAgICAgIGlmICgkb3ZlcndyaXRlKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFVwZGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAkcmV0 ID0gc2FmZV91cGRhdGUoU01EX01BQ1JPLCAibWFjcm9fbmFtZT0nJHNtZF9tYWNyb19uZXdf bmFtZScsIGRlc2NyaXB0aW9uPSckc21kX21hY3JvX2Rlc2NyaXB0aW9uJywgYXR0cmlidXRl cz0nJHNtZF9tYWNyb19hdHRzJywgZGVmaW5pdGlvbj0nJHNtZF9tYWNyb19kZWZpbml0aW9u JywgY29kZT0nJGNvZGUnIiwgIm1hY3JvX25hbWU9JyRzbWRfbWFjcm9fbmV3X25hbWUnIik7 CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg JHJldCA9ICdTTURfTUFDUk9fU0tJUCc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQKICAgICAg ICAgICAgICAgICAgICAkcmV0ID0gc2FmZV9pbnNlcnQoU01EX01BQ1JPLCAibWFjcm9fbmFt ZT0nJHNtZF9tYWNyb19uZXdfbmFtZScsIGRlc2NyaXB0aW9uPSckc21kX21hY3JvX2Rlc2Ny aXB0aW9uJywgYXR0cmlidXRlcz0nJHNtZF9tYWNyb19hdHRzJywgZGVmaW5pdGlvbj0nJHNt ZF9tYWNyb19kZWZpbml0aW9uJywgY29kZT0nJGNvZGUnIik7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmV0ID0gJ1NNRF9NQUNS T19DTEFTSCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAg ICRyZXQgPSAnU01EX01BQ1JPX0JBRF9OQU1FJzsKICAgIH0KCiAgICAvLyAkcmV0IG1heSBi ZSBlbXB0eSBvbmx5IGlmIG1hY3JvIHRhYmxlIG5vdCBpbnN0YWxsZWQKICAgIHJldHVybiAk cmV0Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gVGFrZXMgVVJMIHBhcmFt czsgc2FuaXRpemVzIGF0dHJpYnV0ZXMgbG9jYWxseQpmdW5jdGlvbiBzbWRfbWFjcm9fc2F2 ZSgpCnsKICAgIGdsb2JhbCAkc21kX21hY3JvX2V2ZW50OwoKICAgIGV4dHJhY3QoZG9TbGFz aChncHNhKGFycmF5KAogICAgICAgICdzbWRfbWFjcm9fbmFtZScsCiAgICAgICAgJ3NtZF9t YWNyb19uZXdfbmFtZScsCiAgICAgICAgJ3NtZF9tYWNyb19kZXNjcmlwdGlvbicsCiAgICAp KSkpOwoKICAgICRtc2cgPSAnJzsKICAgICRzbWRfbWFjcm9fbmV3X25hbWUgPSBzYW5pdGl6 ZUZvclVybCgkc21kX21hY3JvX25ld19uYW1lKTsKCiAgICBpZiAoc21kX21hY3JvX3ZhbGlk KCRzbWRfbWFjcm9fbmV3X25hbWUpKSB7CiAgICAgICAgJGF0dF9uYW1lID0gZ3BzKCdzbWRf bWFjcm9fYXR0bmFtZScpOwogICAgICAgICRhdHRfZGZsdCA9IGdwcygnc21kX21hY3JvX2F0 dGRmbHQnKTsKICAgICAgICAkYXR0X3JlcCA9IGdwcygnc21kX21hY3JvX2F0dHJlcCcpOwoK ICAgICAgICAvLyBEb24ndCBkb1NsYXNoKCkgdGhpcyB5ZXQKICAgICAgICAkc21kX21hY3Jv X2RlZmluaXRpb24gPSBncHMoJ3NtZF9tYWNyb19kZWZpbml0aW9uJyk7CgogICAgICAgICRh dHRzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCRhdHRfbmFtZSBhcyAkaWR4ID0+ICRh dHQpIHsKICAgICAgICAgICAgaWYgKCRhdHQgPT0gJycpIGNvbnRpbnVlOwogICAgICAgICAg ICAkYXR0c1tzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCctJywgJ18nLCBzYW5pdGl6ZUZvclVy bCgkYXR0KSkpXSA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2RlZmF1bHQnID0+ICRhdHRf ZGZsdFskaWR4XSwKICAgICAgICAgICAgICAgICdyZXAnID0+ICRhdHRfcmVwWyRpZHhdCiAg ICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkY29kZSA9IGRvU2xhc2goc21kX21h Y3JvX2J1aWxkKCRzbWRfbWFjcm9fbmV3X25hbWUsICRhdHRzLCAkc21kX21hY3JvX2RlZmlu aXRpb24pKTsKICAgICAgICAkc21kX21hY3JvX2RlZmluaXRpb24gPSBkb1NsYXNoKCRzbWRf bWFjcm9fZGVmaW5pdGlvbik7CiAgICAgICAgJHNtZF9tYWNyb19hdHRzID0gc2VyaWFsaXpl KCRhdHRzKTsKCiAgICAgICAgaWYgKHNtZF9tYWNyb190YWJsZV9leGlzdCgpKSB7CiAgICAg ICAgICAgICRleGlzdHMgPSAoJHNtZF9tYWNyb19uYW1lICE9ICRzbWRfbWFjcm9fbmV3X25h bWUpICYmIHNtZF9tYWNyb19leGlzdHMoJHNtZF9tYWNyb19uZXdfbmFtZSk7CgogICAgICAg ICAgICBpZiAoJGV4aXN0cyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIC8vIEluamVj dCB0aGUgbmV3IG5hbWUgc28gaXQncyBzZWxlY3RlZCBpbiB0aGUgZHJvcGRvd24gaWYgcmVu YW1lZAogICAgICAgICAgICAgICAgJF9QT1NUWydzbWRfbWFjcm9fbmFtZSddID0gJHNtZF9t YWNyb19uZXdfbmFtZTsKCiAgICAgICAgICAgICAgICBpZiAoJHNtZF9tYWNyb19uYW1lID09 ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0CiAgICAgICAgICAgICAgICAg ICAgJHJldCA9IHNhZmVfaW5zZXJ0KFNNRF9NQUNSTywgIm1hY3JvX25hbWU9JyRzbWRfbWFj cm9fbmV3X25hbWUnLCBkZXNjcmlwdGlvbj0nJHNtZF9tYWNyb19kZXNjcmlwdGlvbicsIGF0 dHJpYnV0ZXM9JyRzbWRfbWFjcm9fYXR0cycsIGRlZmluaXRpb249JyRzbWRfbWFjcm9fZGVm aW5pdGlvbicsIGNvZGU9JyRjb2RlJyIpOwogICAgICAgICAgICAgICAgICAgICRtc2cgPSBn VHh0KCdzbWRfbWFjcm9fY3JlYXRlZCcpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgICAvLyBVcGRhdGUKICAgICAgICAgICAgICAgICAgICAkcmV0ID0g c2FmZV91cGRhdGUoU01EX01BQ1JPLCAibWFjcm9fbmFtZT0nJHNtZF9tYWNyb19uZXdfbmFt ZScsIGRlc2NyaXB0aW9uPSckc21kX21hY3JvX2Rlc2NyaXB0aW9uJywgYXR0cmlidXRlcz0n JHNtZF9tYWNyb19hdHRzJywgZGVmaW5pdGlvbj0nJHNtZF9tYWNyb19kZWZpbml0aW9uJywg Y29kZT0nJGNvZGUnIiwgIm1hY3JvX25hbWU9JyRzbWRfbWFjcm9fbmFtZSciKTsKICAgICAg ICAgICAgICAgICAgICAkbXNnID0gZ1R4dCgnc21kX21hY3JvX3NhdmVkJyk7CiAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbXNnID0g YXJyYXkoZ1R4dCgnc21kX21hY3JvX2V4aXN0cycpLCBFX1dBUk5JTkcpOwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAkbXNnID0gYXJyYXkoZ1R4dCgn c21kX21hY3JvX2ludmFsaWQnKSwgRV9XQVJOSU5HKTsKICAgIH0KICAgIHNtZF9tYWNybygk bXNnKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIHNtZF9tYWNy b19kZWxldGUoKQp7CiAgICBnbG9iYWwgJHNtZF9tYWNyb19ldmVudDsKCiAgICAkbWFjcm9f bmFtZSA9IGRvU2xhc2goZ3BzKCdzbWRfbWFjcm9fbmFtZScpKTsKCiAgICAkcmV0ID0gc2Fm ZV9kZWxldGUoU01EX01BQ1JPLCAibWFjcm9fbmFtZT0nJG1hY3JvX25hbWUnIik7CiAgICAk bXNnID0gZ1R4dCgnc21kX21hY3JvX2RlbGV0ZWQnKTsKCiAgICAkX0dFVFsnc21kX21hY3Jv X25hbWUnXSA9ICcnOwoKICAgIHNtZF9tYWNybygkbXNnKTsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi8vIENoZWNrIHRoZSBtYWNybyBkb2Vzbid0IGV4aXN0IGFuZCBhbHNv IHRoYXQgaXQgZG9lc24ndCBjbGFzaCB3aXRoIGFuIGludGVybmFsIFBIUC9UeHAgZnVuY3Rp b24KZnVuY3Rpb24gc21kX21hY3JvX2V4aXN0cygkbWFjcm8sICRjaGVja19kYiA9IHRydWUp CnsKICAgICRyZXQgPSAoJGNoZWNrX2RiKSA/IHNhZmVfZmllbGQoJ21hY3JvX25hbWUnLCBT TURfTUFDUk8sICJtYWNyb19uYW1lPSckbWFjcm8nIikgOiBmYWxzZTsKCiAgICBpZiAoJHJl dCA9PT0gZmFsc2UpIHsKICAgICAgICAkZm5zID0gZ2V0X2RlZmluZWRfZnVuY3Rpb25zKCk7 CiAgICAgICAgZm9yZWFjaCAoJGZucyBhcyAkZmxpc3QpIHsKICAgICAgICAgICAgaWYgKCRy ZXQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkcmV0ID0gaW5fYXJyYXkoJG1hY3Jv LCAkZmxpc3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRy ZXQ7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDaGVjayB0aGUgbWFjcm8g bmFtZSBpcyBhIHZhbGlkIFBIUCBmdW5jdGlvbiBuYW1lCmZ1bmN0aW9uIHNtZF9tYWNyb192 YWxpZCgkbWFjcm8pCnsKICAgIHJldHVybiBpc19jYWxsYWJsZSgkbWFjcm8sIHRydWUpICYm IHByZWdfbWF0Y2goJy9eW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZd KiQvJywgJG1hY3JvKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9u IHNtZF9tYWNyb19idWlsZCgkbWFjcm8sICRhcmdzLCAkZGVmKQp7CiAgICAkYXJnbGlzdCA9 ICRyZXBzID0gYXJyYXkoKTsKICAgICRsQXR0cyA9ICcnOwoKICAgIC8vIFZhbGlkYXRlIG1h Y3JvIG5hbWUgYW5kIGJhaWwgaWYgaXQnZCBjYXVzZSBwcm9ibGVtcwogICAgLy8gQnVpbGQg YXJnIGxpc3QgYW5kIHJlcGxhY2VtZW50cyBhcnJheS4KICAgIC8vIFJlcGxhY2VtZW50cyBh cmUgcHJlZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbWFjcm8gZm9yIGNsYXNoIG1pbmlt aXNhdGlvbgogICAgJGFyZ3MgPSBpc19hcnJheSgkYXJncykgPyAkYXJncyA6IHVuc2VyaWFs aXplKCRhcmdzKTsKCiAgICBmb3JlYWNoICgkYXJncyBhcyAkYXJnID0+ICR2YWxzKSB7CiAg ICAgICAgJGFyZ2xpc3RbXSA9ICInJGFyZycgPT4gJyIuJHZhbHNbJ2RlZmF1bHQnXS4iJyI7 CiAgICAgICAgJHJlcCA9IGVtcHR5KCR2YWxzWydyZXAnXSkgPyAkYXJnIDogJHZhbHNbJ3Jl cCddOwogICAgICAgICRyZXBzW10gPSAnInsnIC4gJHJlcCAuICd9IiA9PiAiJCcuJG1hY3Jv LidfJy4kYXJnLiciJzsKICAgIH0KCiAgICAkcmVwc1tdID0gJyJ7c21kX2NvbnRhaW5lcn0i ID0+ICIkJy4kbWFjcm8uJ19zbWRfY29udGFpbmVyIic7CiAgICAkYXJnX3N0cmluZyA9IGpv aW4oJywnLm4sICRhcmdsaXN0KTsKICAgICRyZXBfc3RyaW5nID0gam9pbignLCcubiwgJHJl cHMpOwogICAgJGRlZiA9IGRvU2xhc2goJGRlZik7CgogICAgLy8gT25seSBjcmVhdGUgbEF0 dHMgaWYgdGhlcmUncyBhdCBsZWFzdCBvbmUgYXR0cmlidXRlIGRlZmluZWQKICAgIGlmICgk YXJnX3N0cmluZykgewogICAgICAgICRsQXR0cyA9IDw8PEVPQVRUCmV4dHJhY3QobEF0dHMo YXJyYXkoCiAgICAgICAgeyRhcmdfc3RyaW5nfQogICAgKSxcJGF0dHMpLCBFWFRSX1BSRUZJ WF9BTEwsICd7JG1hY3JvfScpOwpFT0FUVDsKICAgIH0KCiRmdWxsX21hY3JvID0gPDw8IEVP Rk4KZnVuY3Rpb24geyRtYWNyb30oXCRhdHRzLCBcJHRoaW5nID0gTlVMTCkgewogICAgeyRs QXR0c30KICAgIFwkeyRtYWNyb31fc21kX2NvbnRhaW5lciA9IChcJHRoaW5nKT8gXCR0aGlu ZyA6IChpc3NldChcJHskbWFjcm99X3NtZF9jb250YWluZXIpID8gXCR7JG1hY3JvfV9zbWRf Y29udGFpbmVyIDogJycpOwogICAgXCRvdXQgPSAnJzsKICAgIFwkb3V0ID0gc3RydHIoc3Ry aXBzbGFzaGVzKCd7JGRlZn0nKSwgYXJyYXkoeyRyZXBfc3RyaW5nfSkpOwogICAgcmV0dXJu IHBhcnNlKFwkb3V0KTsKfQpFT0ZOOwoKICAgIHJldHVybiAkZnVsbF9tYWNybzsKfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENyZWF0ZSBpbmkgZmlsZSBjb250ZW50cyBh bmQgcmV0dXJuIGl0LgovLyAkc3BlY2lhbCBpcyBhbiBhcnJheSBvZiBrZXluYW1lcyBhbmQg YSBmdW5jdGlvbiB0byBhcHBseSB0byB0aGVtIChlLmcuICdkZWZpbml0aW9uJyA9PiAnYmFz ZTY0X2VuY29kZScpCmZ1bmN0aW9uIHNtZF9tYWNyb19jcmVhdGVfaW5pKCRhcnIsICRzcGVj aWFsPWFycmF5KCkpCnsKICAgICRjb250ZW50ID0gJyc7CgogICAgZm9yZWFjaCAoJGFyciBh cyAka2V5ID0+ICRlbGVtKSB7CiAgICAgICAgJGNvbnRlbnQgLj0gIlsiLiRrZXkuIl1cbiI7 CgogICAgICAgIGZvcmVhY2ggKCRlbGVtIGFzICRzdWJrZXkgPT4gJHN1YmVsZW0pIHsKICAg ICAgICAgICAgJHN1YmVsZW0gPSAoYXJyYXlfa2V5X2V4aXN0cygkc3Via2V5LCAkc3BlY2lh bCkpID8gZG9BcnJheSgkc3ViZWxlbSwgJHNwZWNpYWxbJHN1YmtleV0pIDogJHN1YmVsZW07 CgogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHN1YmVsZW0pKSB7CiAgICAgICAgICAgICAg ICAkbnVtID0gY291bnQoJHN1YmVsZW0pOwoKICAgICAgICAgICAgICAgIGZvciAoJGlkeCA9 IDA7ICRpZHggPCAkbnVtOyAkaWR4KyspIHsKICAgICAgICAgICAgICAgICAgICAkY29udGVu dCAuPSAkc3Via2V5IC4gIltdID0gXCIiIC4gJHN1YmVsZW1bJGlkeF0gLiAiXCJcbiI7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkc3ViZWxlbSA9PSAiIikg ewogICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gJHN1YmtleSAuICIgPSBcbiI7CiAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY29udGVudCAuPSAkc3Via2V5IC4g IiA9IFwiIiAuICRzdWJlbGVtIC4gIlwiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgfQoKICAgIHJldHVybiAkY29udGVudDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi8vIEFkZCBtYWNybyB0YWJsZSBpZiBub3QgYWxyZWFkeSBpbnN0YWxsZWQKZnVuY3Rp b24gc21kX21hY3JvX3RhYmxlX2luc3RhbGwoJHNob3dwYW5lID0gJzEnKQp7CiAgICBnbG9i YWwgJERCOwoKICAgICRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOwogICAgJHJldCA9 ICcnOwogICAgJHNxbCA9IGFycmF5KCk7CiAgICAkc3FsW10gPSAiQ1JFQVRFIFRBQkxFIElG IE5PVCBFWElTVFMgYCIuUEZYLlNNRF9NQUNSTy4iYCAoCiAgICAgICAgYG1hY3JvX25hbWVg IHZhcmNoYXIoMzIpIE5PVCBOVUxMIGRlZmF1bHQgJycsCiAgICAgICAgYGRlc2NyaXB0aW9u YCB2YXJjaGFyKDI1NSkgTlVMTCBkZWZhdWx0ICcnIENPTExBVEUgdXRmOF9nZW5lcmFsX2Np LAogICAgICAgIGBhdHRyaWJ1dGVzYCB0ZXh0IE5VTEwgQ09MTEFURSB1dGY4X2dlbmVyYWxf Y2ksCiAgICAgICAgYGRlZmluaXRpb25gIG1lZGl1bXRleHQgTlVMTCBDT0xMQVRFIHV0Zjhf Z2VuZXJhbF9jaSwKICAgICAgICBgY29kZWAgbWVkaXVtdGV4dCBOVUxMLAogICAgICAgIFBS SU1BUlkgS0VZIChgbWFjcm9fbmFtZWApCiAgICApIEVOR0lORT1NeUlTQU0sIENIQVJBQ1RF UiBTRVQ9dXRmOCI7CgogICAgaWYgKGdwcygnZGVidWcnKSkgewogICAgICAgIGRtcCgkc3Fs KTsKICAgIH0KCiAgICBmb3JlYWNoICgkc3FsIGFzICRxcnkpIHsKICAgICAgICAkcmV0ID0g c2FmZV9xdWVyeSgkcXJ5KTsKICAgICAgICBpZiAoJHJldD09PWZhbHNlKSB7CiAgICAgICAg ICAgICRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10rKzsKICAgICAgICAgICAgZWNobyAiPGI+ Ii4kR0xPQkFMU1sndHhwX2Vycl9jb3VudCddLiIuPC9iPiAiLm15c3FsX2Vycm9yKCkuIjxi ciAvPlxuIjsKICAgICAgICAgICAgZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7CiAgICAg ICAgfQogICAgfQoKICAgICRmbGRzID0gZ2V0VGhpbmdzKCdkZXNjcmliZSBgJy5QRlguU01E X01BQ1JPLidgJyk7CgogICAgaWYgKCFpbl9hcnJheSgnZGVmaW5pdGlvbicsJGZsZHMpKSB7 CiAgICAgICAgc2FmZV9hbHRlcihTTURfTUFDUk8sICJhZGQgYGRlZmluaXRpb25gIG1lZGl1 bXRleHQgTlVMTCBkZWZhdWx0ICcnIGFmdGVyIGBhdHRyaWJ1dGVzYCIpOwogICAgfQoKICAg IC8vIFVwZ3JhZGUgdGFibGUgY29sbGF0aW9uIGlmIG5lY2Vzc2FyeQogICAgJHJldCA9IEBz YWZlX2ZpZWxkKCJDT0xMQVRJT05fTkFNRSIsICJJTkZPUk1BVElPTl9TQ0hFTUEuQ09MVU1O UyIsICJ0YWJsZV9uYW1lID0gJyIuUEZYLlNNRF9NQUNSTy4iJyBBTkQgdGFibGVfc2NoZW1h ID0gJyIgLiAkREItPmRiIC4gIicgQU5EIGNvbHVtbl9uYW1lID0gJ2Rlc2NyaXB0aW9uJyIp OwoKICAgIGlmICgkcmV0ICE9ICd1dGY4X2dlbmVyYWxfY2knKSB7CiAgICAgICAgJHJldCA9 IHNhZmVfYWx0ZXIoU01EX01BQ1JPLCAnQ09OVkVSVCBUTyBDSEFSQUNURVIgU0VUIHV0Zjgg Q09MTEFURSB1dGY4X2dlbmVyYWxfY2knKTsKICAgIH0KCiAgICAvLyBTcGl0IG91dCByZXN1 bHRzCiAgICBpZiAoJEdMT0JBTFNbJ3R4cF9lcnJfY291bnQnXSA9PSAwKSB7CiAgICAgICAg aWYgKCRzaG93cGFuZSkgewogICAgICAgICAgICAkbXNnID0gZ1R4dCgnc21kX21hY3JvX3Ri bF9pbnN0YWxsZWQnKTsKICAgICAgICAgICAgc21kX21hY3JvKCRtc2cpOwogICAgICAgIH0K ICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCRzaG93cGFuZSkgewogICAgICAgICAgICAkbXNn ID0gZ1R4dCgnc21kX21hY3JvX3RibF9ub3RfaW5zdGFsbGVkJyk7CiAgICAgICAgICAgIHNt ZF9tYWNybygkbXNnKTsKICAgICAgICB9CiAgICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQovLyBEcm9wIHRhYmxlIGlmIGluIGRhdGFiYXNlCmZ1bmN0aW9uIHNtZF9tYWNy b190YWJsZV9yZW1vdmUoKQp7CiAgICAkcmV0ID0gJyc7CiAgICAkc3FsID0gYXJyYXkoKTsK ICAgICRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10gPSAwOwoKICAgIGlmIChzbWRfbWFjcm9f dGFibGVfZXhpc3QoKSkgewogICAgICAgICRzcWxbXSA9ICJEUk9QIFRBQkxFIElGIEVYSVNU UyAiIC5QRlguU01EX01BQ1JPLiAiOyAiOwogICAgICAgIGlmIChncHMoJ2RlYnVnJykpIHsK ICAgICAgICAgICAgZG1wKCRzcWwpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHNx bCBhcyAkcXJ5KSB7CiAgICAgICAgICAgICRyZXQgPSBzYWZlX3F1ZXJ5KCRxcnkpOwogICAg ICAgICAgICBpZiAoJHJldD09PWZhbHNlKSB7CiAgICAgICAgICAgICAgICAkR0xPQkFMU1sn dHhwX2Vycl9jb3VudCddKys7CiAgICAgICAgICAgICAgICBlY2hvICI8Yj4iLiRHTE9CQUxT Wyd0eHBfZXJyX2NvdW50J10uIi48L2I+ICIubXlzcWxfZXJyb3IoKS4iPGJyIC8+XG4iOwog ICAgICAgICAgICAgICAgZWNobyAiPCEtLVxuICRxcnkgXG4tLT5cbiI7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCRHTE9CQUxTWyd0eHBfZXJyX2NvdW50J10g PT0gMCkgewogICAgICAgICRtc2cgPSBnVHh0KCdzbWRfbWFjcm9fdGJsX3JlbW92ZWQnKTsK ICAgIH0gZWxzZSB7CiAgICAgICAgJG1zZyA9IGdUeHQoJ3NtZF9tYWNyb190Ymxfbm90X3Jl bW92ZWQnKTsKICAgICAgICBzbWRfbWFjcm8oJG1zZyk7CiAgICB9Cn0KCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzbWRfbWFjcm9fdGFibGVfZXhpc3QoJGFsbCA9 ICcnKQp7CiAgICBpZiAoJGFsbCkgewogICAgICAgICR0YmxzID0gYXJyYXkoU01EX01BQ1JP ID0+IDUpOwogICAgICAgICRvdXQgPSBjb3VudCgkdGJscyk7CgogICAgICAgIGZvcmVhY2gg KCR0YmxzIGFzICR0YmwgPT4gJGNvbHMpIHsKICAgICAgICAgICAgaWYgKGdwcygnZGVidWcn KSkgewogICAgICAgICAgICAgICAgZWNobyAiKysgVEFCTEUgIi4kdGJsLiIgSEFTICIuY291 bnQoQHNhZmVfc2hvdygnY29sdW1ucycsICR0YmwpKS4iIENPTFVNTlM7IFJFUVVJUkVTICIu JGNvbHMuIiArKyIuYnI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjb3VudChA c2FmZV9zaG93KCdjb2x1bW5zJywgJHRibCkpID09ICRjb2xzKSB7CiAgICAgICAgICAgICAg ICAkb3V0LS07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAoJG91 dD09PTApID8gMSA6IDA7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChncHMoJ2RlYnVnJykp IHsKICAgICAgICAgICAgZWNobyAiKysgVEFCTEUgIi5TTURfTUFDUk8uIiBIQVMgIi5jb3Vu dChAc2FmZV9zaG93KCdjb2x1bW5zJywgU01EX01BQ1JPKSkuIiBDT0xVTU5TOyI7CiAgICAg ICAgfQoKICAgICAgICByZXR1cm4oQHNhZmVfc2hvdygnY29sdW1ucycsIFNNRF9NQUNSTykp OwogICAgfQp9CgovLyAqKioqKioqKioqKioqKioqKioqKioKLy8gUFVCTElDIFNJREUgSU5U RVJGQUNFCi8vICoqKioqKioqKioqKioqKioqKioqKgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi8vIEV4dHJhY3RzIGFsbCBwcmVidWlsdCBtYWNyb3MgKGVzc2VudGlhbGx5LCBu ZXcgdGFncykgYW5kIGluamVjdHMgdGhlbSBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgc28gdGhl eSBjYW4gYmUgY2FsbGVkCmZ1bmN0aW9uIHNtZF9tYWNyb19ib290KCkKewogICAgJGZ1bGxf bWFjcm9zID0gYXJyYXkoKTsKICAgICR0b1JlZ2lzdGVyID0gYXJyYXkoKTsKICAgICRyZWcg PSAnJzsKCiAgICAkcnMgPSBzYWZlX3Jvd3MoJyonLCBTTURfTUFDUk8sICcxPTEnKTsKCiAg ICBmb3JlYWNoICgkcnMgYXMgJHJvdykgewogICAgICAgICR0b1JlZ2lzdGVyW10gPSAiLT5y ZWdpc3RlcignIiAuIHR4cHNwZWNpYWxjaGFycygkcm93WydtYWNyb19uYW1lJ10pIC4gIicp IjsKICAgICAgICAkZnVsbF9tYWNyb3NbXSA9IHN0cl9yZXBsYWNlKCdcclxuJywnCicsICRy b3dbJ2NvZGUnXSk7IC8vIHl1a2t5IG5ld2xpbmUgd29ya2Fyb3VuZAogICAgfQoKICAgIGlm IChjb3VudCgkdG9SZWdpc3RlcikgPiAwKSB7CiAgICAgICAgJHJlZyA9ICJpZiAoY2xhc3Nf ZXhpc3RzKCdcVGV4dHBhdHRlcm5cVGFnXFJlZ2lzdHJ5JykpIHsKICAgICAgICAgICAgVHhw OjpnZXQoJ1xUZXh0cGF0dGVyblxUYWdcUmVnaXN0cnknKSIKICAgICAgICAgICAgICAgIC4g KGltcGxvZGUobiwgJHRvUmVnaXN0ZXIpKQogICAgICAgICAgICAgICAgLiI7CiAgICAgICAg fSI7CiAgICB9CgogICAgJG1hY3JvcyA9ICRyZWcgLiBuIC4gaW1wbG9kZShuLCAkZnVsbF9t YWNyb3MpOwoKICAgIC8vIEluamVjdCB0aGUgdmlydHVhbCB0YWdzIGludG8gdGhlIGdsb2Jh bCBzY29wZQogICAgZXZhbCgkbWFjcm9zKTsKfSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NToi b3JkZXIiO3M6MToiNSI7czo1OiJmbGFncyI7czoxOiIyIjtzOjQ6ImhlbHAiO3M6MTA0Mjg6 IjxoMSBpZD0ic21kX3RvcCI+c21kX21hY3JvPC9oMT4KCjxwPkJ1aWxkIHlvdXIgb3duIHZp cnR1YWwgVGV4dHBhdHRlcm4gdGFncyBmcm9tIGNvbWJpbmF0aW9ucyBvZiBidWlsdC1pbiB0 YWdzIGFuZCBwbHVnaW5zICYjODIxMjsgZXZlbiA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9z cGFuPi4gVGh1cyB5b3UgY2FuIGVhc2UgeW91ciB3b3JrZmxvdyBvciBvZmZlciB5b3VyIGNs aWVudHMgc2ltcGxlciBzeW50YXggZm9yIGRvaW5nIHBvd2VyZnVsIHRoaW5ncyBpbiB0aGVp ciBQYWdlcywgRm9ybXMsIGFuZCBBcnRpY2xlcy48L3A+Cgo8aDIgaWQ9InNtZF9mZWF0Ij5G ZWF0dXJlczo8L2gyPgoKPHVsPgoJPGxpPkRlZmluZSBtYWNyb3MgJiM4MjEyOyBjdXN0b20s IHZpcnR1YWwgVHhwIHRhZ3MgJiM4MjEyOyB3aXRoIGFueSBudW1iZXIgb2YgYXR0cmlidXRl czwvbGk+Cgk8bGk+Q29uc3RydWN0IGEgZGVmaW5pdGlvbiBibG9jayAmIzgyMTI7IGxpa2Ug YSBUeHAgRm9ybSAmIzgyMTI7IHRoYXQgY29udGFpbnMgdGhlIHRhZ3MgLyBjb2RlIHRoYXQg bWFrZSB1cCB5b3VyIG1hY3JvPC9saT4KCTxsaT5JbmplY3QgcmVwbGFjZW1lbnQgdmFsdWVz IChyZWFkIGZyb20geW91ciBhdHRyaWJ1dGVzKSBpbnRvIG1hY3JvIGRlZmluaXRpb25zIGF0 IHJ1bnRpbWU8L2xpPgoJPGxpPkltcG9ydCAvIGV4cG9ydCBtYWNyb3MgZm9yIGFyY2hpdmUg LyBzaGFyaW5nIHdpdGggdGhlIGNvbW11bml0eTwvbGk+Cgk8bGk+TWFjcm9zIGNhbiBiZSBz aW5nbGUgb3IgY29udGFpbmVyczwvbGk+CjwvdWw+Cgo8aDI+SW5zdGFsbGF0aW9uIC8gdW5p bnN0YWxsYXRpb248L2gyPgoKPHAgY2xhc3M9ImluZm9ybWF0aW9uIj5SZXF1aXJlcyBUZXh0 cGF0dGVybiA0LjUuMis8L3A+Cgo8cD5Eb3dubG9hZCB0aGUgcGx1Z2luIGZyb20gZWl0aGVy IDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy8xMjEzL3NtZF9tYWNy byI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBjb2RlIGludG8gdGhl IFR4cCA8ZW0+QWRtaW4gLSZndDsgUGx1Z2luczwvZW0+IHBhbmUsIGluc3RhbGwgYW5kIGVu YWJsZSB0aGUgcGx1Z2luLiBUbyB1bmluc3RhbGwsIGRlbGV0ZSBmcm9tIHRoZSA8ZW0+QWRt aW4gLSZndDsgUGx1Z2luczwvZW0+IHBhZ2UuPC9wPgoKPHA+VmlzaXQgdGhlIDxhIGhyZWY9 Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0zNTc3MiI+ Zm9ydW0gdGhyZWFkPC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3Vj Y2VzcyBvciBvdGhlcndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+Cgo8aDIgaWQ9InNtZF91c2Fn ZSI+VXNhZ2U8L2gyPgoKPHA+VmlzaXQgdGhlIDxlbT5Db250ZW50IC0mZ3Q7IE1hY3Jvczwv ZW0+IHRhYi4gV2hlbiB0aGVyZSBhcmUgbWFjcm9zIGRlZmluZWQsIHRoZSBkcm9wZG93biBh dCB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBwYW5lbCBjb250YWlucyBhIGxpc3Qgb2YgYWxsIG1h Y3JvcyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkLiBDaG9vc2Ugb25lIHRvIGxvYWQgaXQgaW50 byB0aGUgYm94ZXMgYmVsb3cgZm9yIGVkaXRpbmcuPC9wPgoKPHA+VGhlIGJveGVzIGFyZTo8 L3A+Cgo8dWw+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk5hbWU8L3NwYW4+IDogbmFtZSBv ZiB5b3VyIG1hY3JvL3ZpcnR1YWwgdGFnPHN1cCBjbGFzcz0iZm9vdG5vdGUiIGlkPSJmbnJl djE3MjYzNDE1OTQ1ODgzMWMwMzBiY2ZkLTEiPjxhIGhyZWY9IiNmbjE3MjYzNDE1OTQ1ODgz MWMwMzBiY2ZkLTEiPjE8L2E+PC9zdXA+LiBDbGljayB0aGUgYWRqYWNlbnQgW3hdIGJ1dHRv biB0byBkZWxldGUgaXQuPC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+RGVzY3JpcHRp b248L3NwYW4+IDogb3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHlvdXIgb3duIGRvY3VtZW50 YXRpb24gJiM4MjEyOyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlIGF0IHByZXNlbnQuPC9saT4K CTxsaT48c3BhbiBjbGFzcz0iYXRubSI+QXR0cmlidXRlczwvc3Bhbj4gOiBzcGVjaWZ5IHVw IHRvIHRocmVlIHZhbHVlcyBmb3IgZWFjaCBhdHRyaWJ1dGU8c3VwIGNsYXNzPSJmb290bm90 ZSIgaWQ9ImZucmV2MTcyNjM0MTU5NDU4ODMxYzAzMGJjZmQtMiI+PGEgaHJlZj0iI2ZuMTcy NjM0MTU5NDU4ODMxYzAzMGJjZmQtMiI+MjwvYT48L3N1cD4uIENsaWNrIHRoZSBbK10gYnV0 dG9uIHRvIGNyZWF0ZSBtb3JlLiBDbGVhciB0aGUgPGVtPm5hbWU8L2VtPiBib3ggYmVmb3Jl IFNhdmluZyB0byBkZWxldGUgdGhhdCBhdHRyaWJ1dGUuIFRoZSB0aHJlZSB2YWx1ZXMgYXJl OgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+TmFtZTwvc3Bhbj4gOiB0aGUgbmFt ZSBvZiB5b3VyIGF0dHJpYnV0ZSB0aGF0IGNsaWVudHMgd2lsbCB1c2UgaW4geW91ciB0YWcu IE11c3QgYmUgYSB2YWxpZCA8c3BhbiBjbGFzcz0iY2FwcyI+QVNDSUk8L3NwYW4+IG5hbWUu PC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPkRlZmF1bHQ8L3NwYW4+IDogdGhlIGRl ZmF1bHQgdmFsdWUgdGhhdCB0aGlzIGF0dHJpYnV0ZSB3aWxsIHRha2Ugb24gaWYgbm90IHN1 cHBsaWVkLiBMZWF2ZSBlbXB0eSBmb3IgPGNvZGU+JnF1b3Q7JnF1b3Q7PC9jb2RlPi48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+UmVwbGFjZW1lbnQ8L3NwYW4+IDogdGhlIG5h bWUgb2YgdGhlIDxjb2RlPntyZXBsYWNlbWVudH08L2NvZGU+IHRoYXQgdGhpcyBhdHRyaWJ1 dGUgd2lsbCBvY2N1cHkgaW4geW91ciBkZWZpbml0aW9ucy4gU3BlY2lmeSBpdCA8ZW0+d2l0 aG91dDwvZW0+IHRoZSA8Y29kZT57fTwvY29kZT4gYnJhY2tldHMuIElmIHRoaXMgZW50cnkg aXMgb21pdHRlZCwgdGhlIGF0dHJpYnV0ZSYjODIxNztzIDxjb2RlPk5hbWU8L2NvZGU+IHdp bGwgYmUgdXNlZC48L2xpPgoJPC91bD48L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5N YWNybyBkZWZpbml0aW9uPC9zcGFuPiA6IHlvdXIgdGFnIGNvZGUgaGVyZS4gQXQgYW55IHBv aW50IHlvdSBjYW4gaW5zZXJ0IHRoZSBuYW1lIG9mIGFueSBvZiB5b3VyIGRlZmluZWQgYXR0 cmlidXRlIHJlcGxhY2VtZW50IHZhbHVlcyBpbnNpZGUgPGNvZGU+e308L2NvZGU+IG1hcmtz IHRvIGhhdmUgdGhlIHBsdWdpbiBpbmplY3QgdGhlIGF0dHJpYnV0ZSBpbnRvIHlvdXIgbWFy a3VwIHdoZW4gdGhlIGNsaWVudCB1c2VzIHRoZSB0YWcuIFNlZSA8YSBocmVmPSIjc21kX2V4 YW1wbGVzIj5leGFtcGxlczwvYT4gZm9yIG1vcmUuPC9saT4KPC91bD4KCjxwIGNsYXNzPSJm b290bm90ZSIgaWQ9ImZuMTcyNjM0MTU5NDU4ODMxYzAzMGJjZmQtMSI+PHN1cD4xPC9zdXA+ IDxzcGFuIGNsYXNzPSJjYXBzIj5JTVBPUlRBTlQ8L3NwYW4+OiB5b3VyIHRhZyA8c3Ryb25n PjxzcGFuIGNsYXNzPSJjYXBzIj5NVVNUPC9zcGFuPjwvc3Ryb25nPiBhZGhlcmUgdG8gdGhl IGZvbGxvd2luZyBjb252ZW50aW9uczo8L3A+Cgo8dWw+Cgk8bGk+YW4gPHNwYW4gY2xhc3M9 ImNhcHMiPkFTQ0lJPC9zcGFuPiBuYW1lICYjODIxMjsgbm8gZm9yZWlnbiBjaGFyYWN0ZXJz LCBoeXBoZW5zIG9yIGFueXRoaW5nIG90aGVyIHRoYW4gYWxwaGFudW1lcmljIGNoYXJhY3Rl cnMgYW5kIHVuZGVyc2NvcmVzLiBJbiBhZGRpdGlvbiBpdCBtYXkgPGVtPm5vdDwvZW0+IGJl Z2luIHdpdGggYSBudW1iZXIuPC9saT4KCTxsaT5kb3VibGUgY2hlY2sgYmVmb3JlIHNhdmlu ZyB0aGF0IHlvdXIgdGFnIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlz dGluZyBUeHAgb3IgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZnVuY3Rpb24uIElm IGl0IGRvZXMsIHlvdXIgc2l0ZSA8c3BhbiBjbGFzcz0iY2FwcyI+V0lMTDwvc3Bhbj4gYmxv dyB1cCB3aXRoIG5hc3R5IGVycm9ycy4gVGhlIGJlc3Qgd2F5IHRvIGF2b2lkIHRoaXMgaXMg dG8gbWFrZSBzdXJlIHlvdSBwcmVmaXggeW91ciB0YWdzIHdpdGggYSB0aHJlZS1sZXR0ZXIg cHJlZml4LCBqdXN0IGFzIHlvdSB3b3VsZCBpZiB0aGlzIHdhcyB5b3VyIG93biBwbHVnaW4u PC9saT4KPC91bD4KCjxwPlRoZSBwbHVnaW4gdHJpZXMgdG8gc2hpZWxkIHlvdSBmcm9tIGlu dmFsaWQgbmFtZXMgYXMgZmFyIGFzIHBvc3NpYmxlIGFuZCB3aWxsIHVzdWFsbHkgZGV0ZWN0 IGludGVybmFsIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+L1R4cCBmdW5jdGlvbiBu YW1lIGNsYXNoZXMsIGFkbWluLXNpZGUgcGx1Z2luIGNsYXNoZXMgYXMgd2VsbCBhcyBpbnZh bGlkL3ByZXZpb3VzbHkgZGVmaW5lZCBtYWNybyBuYW1lcy4gQnV0IGl0IGNhbm5vdCBsZWdp c2xhdGUgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZWNvbWUgYXZhaWxhYmxl IG9uIHlvdXIgcHVibGljIHNpdGUsIGkuZS4gdGFncy9mdW5jdGlvbnMgYWRkZWQgYnkgcHVi bGljLXNpZGUgcGx1Z2lucy4gUGxlYXNlIGV4ZXJjaXNlIGNhdXRpb24gd2hlbiBuYW1pbmcg eW91ciBtYWNyb3MuPC9wPgoKPHAgY2xhc3M9ImZvb3Rub3RlIiBpZD0iZm4xNzI2MzQxNTk0 NTg4MzFjMDMwYmNmZC0yIj48c3VwPjI8L3N1cD4gTWFrZSBzdXJlIHlvdSBhdm9pZCB0aGUg cGlwZSBzeW1ib2wgPGNvZGU+fDwvY29kZT4gaW4geW91ciBhdHRyaWJ1dGUgbmFtZXMgLyBk ZWZhdWx0cyAvIHJlcGxhY2VtZW50cyBhcyB0aGlzIGNoYXJhY3RlciBpcyB1c2VkIGludGVy bmFsbHkgYnkgdGhlIHBsdWdpbi48L3A+Cgo8aDM+Q29udGFpbmVyIG1hY3JvczwvaDM+Cgo8 cD5Zb3UgbWF5IHVzZSB5b3VyIG5ldyBtYWNyb3MgYXMgY29udGFpbmVyIHRhZ3MuIEluIHlv dXIgbWFjcm8gZGVmaW5pdGlvbiwgc3BlY2lmeSB0aGUgc3BlY2lhbCByZXBsYWNlbWVudCB0 YWcgPGNvZGU+e3NtZF9jb250YWluZXJ9PC9jb2RlPiB3aGVyZSB5b3Ugd2FudCB0aGUgY29u dGFpbmVkIGNvbnRlbnQgdG8gZ28uIElmIHRoZSBjb250YWluZXIgaXMgZW1wdHksIG5vdGhp bmcgaXMgb3V0cHV0IDxlbT51bmxlc3M8L2VtPiB5b3UgZGVmaW5lIGFuIGF0dHJpYnV0ZSBu YW1lZCA8Y29kZT5zbWRfY29udGFpbmVyPC9jb2RlPiBhbmQgZ2l2ZSBpdCBzb21lIERlZmF1 bHQgY29udGVudC4gSW4gdGhhdCBjYXNlLCB5b3VyIDxjb2RlPntzbWRfY29udGFpbmVyfTwv Y29kZT4gcmVwbGFjZW1lbnQgdGFnIHdpbGwgdGFrZSBvbiB0aGUgZGVmYXVsdCB2YWx1ZSBh c3NpZ25lZCB0byB0aGF0IGF0dHJpYnV0ZS4gTm90ZSB0aGF0IHRoZSA8ZW0+UmVwbGFjZW1l bnQgbmFtZTwvZW0+IGRvZXNuJiM4MjE3O3QgbWF0dGVyIGFuZCBjYW4gYmUgb21pdHRlZDog dGhlIHJlcGxhY2VtZW50IGlzIDxlbT5hbHdheXM8L2VtPiBnb2luZyB0byBiZSA8Y29kZT57 c21kX2NvbnRhaW5lcn08L2NvZGU+LjwvcD4KCjxwPk5vdGUgdGhpcyBtZWFucyB0aGF0IGlm IHlvdSBhZGQgYW4gYXR0cmlidXRlIDxjb2RlPnNtZF9jb250YWluZXI9JnF1b3Q7c29tZSB2 YWx1ZSZxdW90OzwvY29kZT4gdG8geW91ciBtYWNybyB3aGVuIGl0JiM4MjE3O3MgdXNlZCBp biB5b3VyIHBhZ2UsIGl0IGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgdXNpbmcgdGhlIGNvbnRh aW5lci4gVGhpcyBjb3VsZCBiZSBjb25zdHJ1ZWQgYSBmZWF0dXJlLjwvcD4KCjxoMiBpZD0i c21kX2ltcG9ydCI+SW1wb3J0aW5nIG1hY3JvczwvaDI+Cgo8cD5Zb3UgY2FuIGltcG9ydCBt YWNyb3MgdGhhdCBoYXZlIGJlZW4gcHJldmlvdXNseSBleHBvcnRlZCBmcm9tIHRoZSBwbHVn aW4uIENsaWNrIHRoZSA8ZW0+SW1wb3J0PC9lbT4gbGluayBhbmQgY2hvb3NlIHRoZSA8Y29k ZT5zbWRfbWFjcm9zLmluaTwvY29kZT4gZmlsZSB0aGF0IHlvdSBoYXZlIGJlZW4gZ2l2ZW4g KHRoZSBmaWxlIG5hbWUgaXRzZWxmIGRvZXNuJiM4MjE3O3QgYWN0dWFsbHkgbWF0dGVyKS4g SWYgeW91IHdhbnQgdG8gb3ZlcndyaXRlIGFueSBtYWNyb3Mgb2YgdGhlIHNhbWUgbmFtZSB0 aGF0IGFscmVhZHkgZXhpc3QgaW4geW91ciBzeXN0ZW0sIGNoZWNrIHRoZSA8ZW0+Rm9yY2Ug b3ZlcndyaXRlPC9lbT4gYm94LiBPdGhlcndpc2UsIGFueSBtYWNyb3MgaW4gdGhlIGltcG9y dCBmaWxlIHRoYXQgYWxyZWFkeSBleGlzdCB3aWxsIGJlIHNraXBwZWQuPC9wPgoKPHA+Tm90 ZSB0aGF0IHRoZSBwbHVnaW4gbWFrZXMgc29tZSBjaGVja3Mgb24geW91ciBzeXN0ZW0gYW5k IHdpbGwgdHJ5IGFuZCBiYWlsIG91dCBncmFjZWZ1bGx5IGlmIHRoZSBuZWNlc3NhcnkgcGVy bWlzc2lvbnMgYXJlIG5vdCBzZXQgKGl0IHRlbXBvcmFyaWx5IHVwbG9hZHMgZmlsZXMgdG8g VHhwJiM4MjE3O3MgdGVtcCBkaXJlY3RvcnksIGFzIGRlZmluZWQgaW4gPGVtPkFkdmFuY2Vk IFByZWZzPC9lbT4pLiBJdCBhbHNvIGltcG9zZXMgYSBzb2Z0IGxpbWl0IG9mIHJvdWdobHkg MTVLQiBvbiB0aGUgc2l6ZSBvZiB0aGUgaW1wb3J0ZWQgZmlsZSwgbW9zdGx5IGZvciByZWFz b25zIG9mIHNwZWVkLiBJZiB5b3UgZmluZCB5b3Vyc2VsZiByZXF1aXJpbmcgdG8gaW1wb3J0 IGxhcmdlIG51bWJlcnMgb2YgbWFjcm9zIGluIG9uZSBmaWxlLCB5b3UgY2FuIGluY3JlYXNl IHRoaXMgbGltaXQgYnkgY3JlYXRpbmcgdGhlIGZvbGxvd2luZyBnbG9iYWwgc3lzdGVtIHBy ZWZlcmVuY2UgKHNtZF9wcmVmYWxpemVyIGNhbiBoZWxwKTo8L3A+Cgo8dWw+Cgk8bGk+PHNw YW4gY2xhc3M9ImF0bm0iPlByZWYgbmFtZTwvc3Bhbj46IHNtZF9tYWNyb19pbXBvcnRfZmls ZXNpemU8L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5WYWx1ZTwvc3Bhbj4gOiBtYXhp bXVtIGZpbGUgc2l6ZSAoaW4gYnl0ZXMpPC9saT4KCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ VmlzaWJpbGl0eTwvc3Bhbj4gOiBIaWRkZW48L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5t Ij5FdmVudDwvc3Bhbj4gOiBzbWRfbWFjcm88L2xpPgo8L3VsPgoKPHA+QWx0ZXJuYXRpdmVs eSwgc3BsaXQgeW91ciBtYWNyb3MgaW50byBhIGZldyBzbWFsbGVyIGZpbGVzIGFuZCBpbXBv cnQgdGhlbSBzZXBhcmF0ZWx5LjwvcD4KCjxoMiBpZD0ic21kX2V4cG9ydCI+RXhwb3J0aW5n IG1hY3JvczwvaDI+Cgo8cD5BdCBhbnkgdGltZSB5b3UgY2FuIGV4cG9ydCBvbmUgb3IgbW9y ZSBtYWNyb3MgdG8gYSBmaWxlIGZvciBkaXN0cmlidXRpb24gb3IgYmFja3VwLiBKdXN0IGNs aWNrIHRoZSA8ZW0+RXhwb3J0PC9lbT4gbGluayBhbmQgY2hvb3NlIG9uZSBvciBtb3JlIG1h Y3JvcyBmcm9tIHRoZSBsaXN0IHRoYXQgYXBwZWFycy4gQ2xpY2sgPGVtPkdvPC9lbT4gYW5k IHRoZW4gc2F2ZSB0aGUgcmVzdWx0aW5nIGZpbGUgdG8geW91ciBmaWxlc3lzdGVtLiBUaGUg Y3VycmVudCBtYWNybyB0aGF0IGlzIGJlaW5nIGVkaXRlZCAoaWYgYW55KSBpcyBzZWxlY3Rl ZCBieSBkZWZhdWx0LjwvcD4KCjxoMiBpZD0ic21kX2Nsb25lIj5DbG9uaW5nIG1hY3Jvczwv aDI+Cgo8cD5XaGlsZSBhIG1hY3JvIGlzIGxvYWRlZCBpbnRvIHRoZSBlZGl0IGJveGVzIHlv dSBjYW4gY2xvbmUgaXQuIENsaWNrIHRoZSA8ZW0+Q2xvbmU8L2VtPiBidXR0b24sIHN1cHBs eSBhIG5hbWUgZm9yIHRoZSBjbG9uZSBhbmQgaGl0IDxlbT5HbzwvZW0+LiBQcm92aWRlZCB0 aGUgbmFtZSBpc24mIzgyMTc7dCBpbnZhbGlkIG9yIGluIHVzZSwgeW91ciBuZXcgY2xvbmUg d2lsbCBiZSBjcmVhdGVkIGFuZCBicm91Z2h0IGludG8gdGhlIGVkaXQgYXJlYSBmb3IgaW1t ZWRpYXRlIGVkaXRpbmcuPC9wPgoKPHA+Tm90ZSB0aGF0IHRoZSBjbG9uZSB3aWxsIGJlIGNy ZWF0ZWQgZnJvbSB0aGUgY2hvc2VuIG1hY3JvIGFzIGl0IHdhcyBsYXN0IHNhdmVkIHRvIHRo ZSBkYXRhYmFzZS4gSWYgeW91IGhhdmUgbWFkZSB1bnNhdmVkIGVkaXRzIHRvIHRoZSBtYWNy byBpbiB0aGUgZWRpdCBib3hlcyBhdCB0aGUgdGltZSB5b3UgY2xvbmUgdGhlIG1hY3JvLCB0 aGV5IHdpbGwgYmUgbG9zdC48L3A+Cgo8aDIgaWQ9InNtZF9leGFtcGxlcyI+RXhhbXBsZXM8 L2gyPgoKPGgzIGlkPSJzbWRfZWcxIj5FeGFtcGxlIDE6IGltYWdlIGdhbGxlcnk8L2gzPgoK PHVsPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5NYWNybyBuYW1lPC9zcGFuPiA6IG15X2dh bGxlcnk8L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5BdHRyaWJ1dGVzIChkZWZhdWx0 IC8gcmVwbGFjZW1lbnQpPC9zcGFuPiA6IGNhdGVnb3J5IChlbXB0eSAvIGltZ19jYXQpPC9s aT4KPC91bD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZT4mbHQ7dHhwOmltYWdlcyBjYXRl Z29yeT0mcXVvdDt7aW1nX2NhdH0mcXVvdDsmZ3Q7CiAgICZsdDt0eHA6aW1hZ2UgLyZndDsK ICAgJmx0O2RpdiBjbGFzcz0mcXVvdDtpbWdfaW5mbyZxdW90OyZndDsmbHQ7dHhwOmltYWdl X2luZm8gLyZndDsgYnkgJmx0O3R4cDppbWFnZV9hdXRob3IgLyZndDsmbHQ7L2RpdiZndDsK Jmx0Oy90eHA6aW1hZ2VzJmd0OzwvY29kZT48L3ByZT4KCjxwPlRodXMsIDxjb2RlPiZsdDt0 eHA6bXlfZ2FsbGVyeSBjYXRlZ29yeT0mcXVvdDthbmltYWxzJnF1b3Q7IC8mZ3Q7PC9jb2Rl PiB3aWxsIHJlbmRlciBhbiBpbWFnZSBnYWxsZXJ5IGZyb20gdGhlIGdpdmVuIGNhdGVnb3J5 LCBjb21wbGV0ZSB3aXRoIGNhcHRpb24gYW5kIGF1dGhvciBpbmZvLiBOb3RlIHRoYXQgbm8g ZGVmYXVsdCB2YWx1ZSBpcyBnaXZlbiBzbyBpZiB0aGUgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+ IGF0dHJpYnV0ZSBpcyBub3Qgc3VwcGxpZWQsIG5vIGdhbGxlcnkgd2lsbCBiZSBwcm9kdWNl ZC48L3A+Cgo8aDMgaWQ9InNtZF9lZzIiPkV4YW1wbGUgMjogaW50ZXJmYWNlIHRvIHNtZF9x dWVyeTwvaDM+Cgo8dWw+Cgk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPk1hY3JvIG5hbWU8L3Nw YW4+IDogbXlfY29sX2Zyb21fdGFibGU8L2xpPgoJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5B dHRyaWJ1dGVzIChkZWZhdWx0IC8gcmVwbGFjZW1lbnQpPC9zcGFuPiA6IGNvbHVtbiAoSUQg LyBjb2wpLCB0YWJsZSAodGV4dHBhdHRlcm4pPC9saT4KPC91bD4KCjxwcmUgY2xhc3M9ImJs b2NrIj48Y29kZT4mbHQ7cCZndDtUaGUgY29udGVudHMgb2YgdGhlIHtjb2x9IGNvbHVtbgpm cm9tIHRoZSB7dGFibGV9IHRhYmxlIGlzOiZsdDsvcCZndDsKJmx0O3R4cDpzbWRfcXVlcnkg Y29sdW1uPSZxdW90O3tjb2x9JnF1b3Q7IHRhYmxlPSZxdW90O3t0YWJsZX0mcXVvdDsKICAg ICB3cmFwdGFnPSZxdW90O3VsJnF1b3Q7IGJyZWFrPSZxdW90O2xpJnF1b3Q7Jmd0OwogICB7 e2NvbH19CiZsdDsvdHhwOnNtZF9xdWVyeSZndDs8L2NvZGU+PC9wcmU+Cgo8cD5Bbnlib2R5 IHVzaW5nIDxjb2RlPiZsdDt0eHA6bXlfY29sX2Zyb21fdGFibGUgY29sdW1uPSZxdW90O1Rp dGxlJnF1b3Q7IC8mZ3Q7PC9jb2RlPiB3b3VsZCBzZWUgYSBsaXN0IG9mIGFsbCBhcnRpY2xl IHRpdGxlcy4gSWYgdGhleSBhZGRlZCA8Y29kZT50YWJsZT0mcXVvdDt0eHBfZmlsZSZxdW90 OzwvY29kZT4gdGhleSYjODIxNztkIHNlZSBhbGwgdGl0bGVzIGZyb20gYWxsIHVwbG9hZGVk IGZpbGVzLiBUaGluZ3MgdG8gbm90ZTo8L3A+Cgo8dWw+Cgk8bGk+Tm8gcmVwbGFjZW1lbnQg dmFyaWFibGUgc3BlY2lmaWVkIGZvciB0aGUgPGNvZGU+dGFibGU8L2NvZGU+IGF0dHJpYnV0 ZSwgdGhlcmVmb3JlIGl0IHRha2VzIG9uIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgaXRz ZWxmLjwvbGk+Cgk8bGk+VGhlIGRvdWJsZSBzZXQgb2YgPGNvZGU+e3t9fTwvY29kZT4gaW4g dGhlIHNtZF9xdWVyeSBjb250YWluZXIgaXMgcmVxdWlyZWQgYmVjYXVzZSB5b3UgZmlyc3Qg d2FudCB0aGUgbWFjcm8gdG8gcmVwbGFjZSA8Y29kZT57Y29sfTwvY29kZT4gd2l0aCB0aGUg dmFsdWUgZnJvbSB5b3VyIG1hY3JvJiM4MjE3O3MgPGNvZGU+Y29sdW1uPC9jb2RlPiBhdHRy aWJ1dGUsIGkuZS4gaWYgeW91JiM4MjE3O2QgY2hvc2VuIDxjb2RlPmNvbHVtbj0mcXVvdDtQ b3N0ZWQmcXVvdDs8L2NvZGU+IHRoZW4gPGNvZGU+e3tjb2x9fTwvY29kZT4gYmVjb21lcyA8 Y29kZT57UG9zdGVkfTwvY29kZT4uIEFmdGVyIHRoYXQsIHNtZF9xdWVyeSBzZWFyY2hlcyBm b3IgPGNvZGU+e1Bvc3RlZH08L2NvZGU+IGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSBjb250 ZW50cyBvZiB0aGUgJiM4MjE2O1Bvc3RlZCYjODIxNzsgY29sdW1uIGZvciBlYWNoIHJvdyBp biB0aGUgdGFibGUuPC9saT4KPC91bD4KCjxoMj5BdXRob3IgLyBjcmVkaXRzPC9oMj4KCjxw PldyaXR0ZW4gYnkgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbnRhY3QiPlN0 ZWYgRGF3c29uPC9hPi4gU3Bhd25lZCBmcm9tIGFuIGlkZWEgYnkganBkdXBvbnQsIHdpdGgg dGhhbmtzLiBBbHNvIGJpZyBwcm9wcyB0byB0aGUgYmV0YSB0ZXN0IHRlYW06IHByaW1hcmls eSBqcGR1cG9udCwgcGllbWFuLCBtcmRhbGUsIG1hdmVyaWNrLCBtYXJ1Y2hhbiBhbmQgamFr b2IuPC9wPiI7czozOiJtZDUiO3M6MzI6IjAzODI2MDYxMTk4ZjQ5ZTkyYjZmMThjZTU3MTVh MjYzIjtzOjg6InRleHRwYWNrIjtzOjExMTM6IiNAc21kX21hY3JvCnNtZF9tYWNyb19hdHRy aWJ1dGVzID0+IEF0dHJpYnV0ZXMKc21kX21hY3JvX2F0dF9jbG9uZSA9PiBbK10Kc21kX21h Y3JvX2F0dF9jbG9uZV9oZWxwID0+IEFkZCBhbiBhdHRyaWJ1dGUKc21kX21hY3JvX2Nhbm5v dF9pbXBvcnQgPT4gVW5hYmxlIHRvIGltcG9ydCBtYWNyby4gUGxlYXNlIGNoZWNrIGZvbGRl ciBwZXJtaXNzaW9ucy9zZXR0aW5ncyBvbiB5b3VyIGhvc3QKc21kX21hY3JvX2Nob29zZSA9 PiBTZWxlY3QgbWFjcm8gdG8gZWRpdApzbWRfbWFjcm9fY2xvbmUgPT4gQ2xvbmUKc21kX21h Y3JvX2NyZWF0ZWQgPT4gTWFjcm8gY3JlYXRlZApzbWRfbWFjcm9fZGVsZXRlZCA9PiBNYWNy byBkZWxldGVkCnNtZF9tYWNyb19leGlzdHMgPT4gTWFjcm8gbmFtZSBhbHJlYWR5IGV4aXN0 cyBvciBjbGFzaGVzCnNtZF9tYWNyb19leHBvcnQgPT4gRXhwb3J0CnNtZF9tYWNyb19maWxl X3NpemUgPT4gTWFjcm8gZmlsZSB0b28gbGFyZ2UKc21kX21hY3JvX2ltcG9ydCA9PiBJbXBv cnQKc21kX21hY3JvX2ltcG9ydGVkID0+IEltcG9ydGVkOiAKc21kX21hY3JvX2ludmFsaWQg PT4gTWFjcm8gbmFtZSBub3QgdmFsaWQKc21kX21hY3JvX2ludmFsaWRfaW5pID0+IE1hY3Jv IGZpbGUgbm90IGluIGV4cGVjdGVkIGZvcm1hdApzbWRfbWFjcm9fbm90X2ltcG9ydGVkID0+ IE5vdCBpbXBvcnRlZDogCnNtZF9tYWNyb19vdmVyd3JpdGUgPT4gRm9yY2Ugb3ZlcndyaXRl CnNtZF9tYWNyb19yZXBuYW1lID0+IFJlcGxhY2VtZW50IG5hbWUKc21kX21hY3JvX3NhdmVk ID0+IE1hY3JvIHNhdmVkCnNtZF9tYWNyb19za2lwcGVkID0+IFNraXBwZWQ6IApzbWRfbWFj cm9fdGFiX25hbWUgPT4gTWFjcm9zCnNtZF9tYWNyb190YWdfZGVmaW5pdGlvbiA9PiBNYWNy byBkZWZpbml0aW9uCnNtZF9tYWNyb190YmxfaW5zdGFsbGVkID0+IFRhYmxlIGluc3RhbGxl ZApzbWRfbWFjcm9fdGJsX25vdF9pbnN0YWxsZWQgPT4gVGFibGUgbm90IGluc3RhbGxlZApz bWRfbWFjcm9fdGJsX25vdF9yZW1vdmVkID0+IFRhYmxlIG5vdCByZW1vdmVkCnNtZF9tYWNy b190YmxfcmVtb3ZlZCA9PiBUYWJsZSByZW1vdmVkCnNtZF9tYWNyb191cGxvYWQgPT4gTWFj cm8gZmlsZSI7fQ==