# adi_notes v1.0 # Leave notes for Textpattern users # Adi Gilbert # http://www.greatoceanmedia.com.au/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMTp7czo0OiJuYW1lIjtzOjk6ImFkaV9ub3RlcyI7czo3OiJ2ZXJzaW9uIjtzOjM6IjEu MCI7czo2OiJhdXRob3IiO3M6MTE6IkFkaSBHaWxiZXJ0IjtzOjEwOiJhdXRob3JfdXJpIjtz OjM0OiJodHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUvIjtzOjExOiJkZXNjcmlw dGlvbiI7czozMzoiTGVhdmUgbm90ZXMgZm9yIFRleHRwYXR0ZXJuIHVzZXJzIjtzOjQ6InR5 cGUiO2k6MTtzOjU6ImZsYWdzIjtpOjE7czo0OiJoZWxwIjtzOjQ1Mjc6Igk8aDE+PHN0cm9u Zz5hZGlfbm90ZXM8L3N0cm9uZz4gJiM4MjExOyBMZWF2ZSBub3RlcyBmb3IgVGV4dHBhdHRl cm4gdXNlcnM8L2gxPgoKCTxwPlRoaXMgcGx1Z2luIHByb3ZpZGVzOjwvcD4KCgk8dWw+CgkJ PGxpPmEgdGFiIHVuZGVyIEV4dGVuc2lvbnMsIHRvIHNldCB1cCA8c3Ryb25nPmFkaV9ub3Rl czwvc3Ryb25nPjwvbGk+CgkJPGxpPm5ldyB0YWJzIHVuZGVyIENvbnRlbnQsIFByZXNlbnRh dGlvbiBhbmQgQWRtaW4gdG8gcHJlc2VudCB5b3VyIHBlYXJscyBvZiB3aXNkb208L2xpPgoJ CTxsaT5wdWJsaWMgJmFtcDsgcHJpdmF0ZSBmb290bm90ZXMgaW4gYWxsIHN0YW5kYXJkIFRl eHRwYXR0ZXJuIGFkbWluIHBhZ2VzPC9saT4KCTwvdWw+CgoJPGgyPjxzdHJvbmc+SW5zdGFs bGF0aW9uPC9zdHJvbmc+PC9oMj4KCgk8cD48aT5JbnN0YWxsYXRpb24gb2YgPHN0cm9uZz5h ZGlfbm90ZXM8L3N0cm9uZz4gYWRkcyBhIG5ldyB0YWJsZSB0byB5b3VyIFRleHRwYXR0ZXJu IGRhdGFiYXNlIHdoaWNoIHNob3VsZCBub3QgaW50ZXJmZXJlIHdpdGggYW55dGhpbmcgZWxz ZS4gVGhhdCBzYWlkLCBpZiB5b3UgYXJlIG9mIGEgY2F1dGlvdXMgZnJhbWUgb2YgbWluZCB0 aGVuIEkgY2FuIHRob3JvdWdobHkgcmVjb21tZW5kIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50 ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMDM5NSI+cnNzX2FkbWluX2RiX21h bmFnZXI8L2E+IHRvIGRvIGRhdGFiYXNlIGJhY2t1cHMgYmVmb3JlIGluc3RhbGxhdGlvbi48 L2k+PC9wPgoKCTxwPk9uY2UgdGhlIHBsdWdpbiBpcyBpbnN0YWxsZWQgYW5kIGFjdGl2YXRl ZCwgZ28gdG8gdGhlIDxzdHJvbmc+YWRpX25vdGVzPC9zdHJvbmc+IHRhYiB1bmRlciBFeHRl bnNpb25zLCBzZWxlY3QgJiM4MjIwO0luc3RhbGwmIzgyMjE7IGFuZCBjbGljayB0aGUgJiM4 MjIwO0RvIGFkbWluJiM4MjIxOyBidXR0b24uPC9wPgoKCTxoMz48c3Ryb25nPlVwZ3JhZGlu ZyBmcm9tIGEgcHJlLTEuMCB2ZXJzaW9uIG9mIGFkaV9ub3Rlczwvc3Ryb25nPjwvaDM+CgoJ PHA+RHVlIHRvIGEgY2hhbmdlIGluIHRoZSA8c3Ryb25nPmFkaV9ub3Rlczwvc3Ryb25nPiBk YXRhYmFzZSB0YWJsZSBzdHJ1Y3R1cmUsIHdoZW4geW91IHVwZ3JhZGUgZnJvbSBhbiBlYXJs eSB2ZXJzaW9uIG9mIDxzdHJvbmc+YWRpX25vdGVzPC9zdHJvbmc+IHlvdSB3aWxsIGJlIHBy b21wdGVkIHRvIHBlcmZvcm0gYW4gJiM4MjIwO1VwZ3JhZGUmIzgyMjE7IGluIHRoZSA8c3Ry b25nPmFkaV9ub3Rlczwvc3Ryb25nPiBhZG1pbiB0YWIuPC9wPgoKCTxwPkFsdGhvdWdoIGEg YmFja3VwIG9mIHlvdXIgbm90ZXMgd2lsbCBiZSBtYWRlIGR1cmluZyB0aGUgdXBncmFkZSBw cm9jZXNzIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IG1ha2UgYW4gaW5kZXBlbmRlbnQg Y29weS48L3A+CgoJPHA+T25jZSB5b3UgYXJlIGhhcHB5IHdpdGggdGhlIG5ldyB2ZXJzaW9u IG9mIDxzdHJvbmc+YWRpX25vdGVzPC9zdHJvbmc+LCB5b3UgY2FuIGRlbGV0ZSB0aGUgYmFj a3VwIGJ5IHNlbGVjdGluZyB0aGUgJiM4MjIwO0NsZWFudXAmIzgyMjE7IG9wdGlvbiBpbiB0 aGUgPHN0cm9uZz5hZGlfbm90ZXM8L3N0cm9uZz4gYWRtaW4gdGFiLjwvcD4KCgk8aDI+PHN0 cm9uZz5hZGlfbm90ZXMgYWRtaW4gdGFiPC9zdHJvbmc+PC9oMj4KCgk8cD5Vc2VycyB3aXRo IHN1ZmZpY2llbnQgcHJpdmlsZWdlcyB3aWxsIHNlZSB0aGUgPHN0cm9uZz5hZGlfbm90ZXM8 L3N0cm9uZz4gYWRtaW4gdGFiLCB1bmRlciBFeHRlbnNpb25zLiAgVGhpcyBwcm92aWRlcyBm dW5jdGlvbmFsaXR5IHRvOjwvcD4KCgk8dWw+CgkJPGxpPkluc3RhbGw8L2xpPgoJCTxsaT5V bmluc3RhbGw8L2xpPgoJCTxsaT5Td2l0Y2ggbm90ZSB0YWIgdmlzaWJpbGl0eSBvbi9vZmY8 L2xpPgoJCTxsaT5VcGdyYWRlIGZyb20gYW4gZWFybGllciB2ZXJzaW9uIG9mIDxzdHJvbmc+ YWRpX25vdGVzPC9zdHJvbmc+PC9saT4KCQk8bGk+RGVsZXRlIG9sZCBiYWNrdXBzIHRha2Vu IGR1cmluZyBhbiB1cGdyYWRlPC9saT4KCQk8bGk+Q2hhbmdlIG5vdGUgc3R5bGVzPC9saT4K CTwvdWw+CgoJPHA+VG9vbHRpcHMgYXJlIGF2YWlsYWJsZSBoZXJlIGFsc28gJiM4MjExOyBq dXN0IGhvdmVyIG92ZXIgYW55dGhpbmcgd2l0aCBhIGRhc2hlZCB1bmRlcmxpbmUuPC9wPgoK CTxoMj48c3Ryb25nPlB1YmxpYyAmYW1wOyBQcml2YXRlPC9zdHJvbmc+PC9oMj4KCgk8cD48 ZW0+UHVibGljPC9lbT4gbm90ZXMgYXJlIHZpc2libGUgdG8gYWxsIHVzZXJzIGJ1dCBjYW4g b25seSBiZSBhZGRlZC9lZGl0ZWQgYnkgYW4gQWRtaW4gdXNlciAoaS5lLiBhIHVzZXIgd2l0 aCBzdWZmaWNpZW50bHkgZWxldmF0ZWQgcHJpdmlsZWdlczogUHVibGlzaGVyL01hbmFnZXIv RGVzaWduZXIpLjwvcD4KCgk8cD48ZW0+UHJpdmF0ZTwvZW0+IG5vdGVzIGNhbiBiZSBhZGRl ZC9lZGl0ZWQgYnkgYWxsIHVzZXJzIChpbmNsdWRpbmcgQWRtaW4pIGJ1dCBhcmUgb25seSB2 aXNpYmxlIHRvIGluZGl2aWR1YWwgdXNlcnMuPC9wPgoKCTxoMj48c3Ryb25nPk5vdGUgdGFi czwvc3Ryb25nPjwvaDI+CgoJPHA+Tm90ZSB0YWJzIHdpbGwgYXBwZWFyIHVuZGVyIENvbnRl bnQsIFByZXNlbnRhdGlvbiBvciBBZG1pbiBkZXBlbmRpbmcgdG8gdGhlIHZpc2liaWxpdHkg c2V0IGluIDxzdHJvbmc+YWRpX25vdGVzPC9zdHJvbmc+IGFkbWluLiBCeSBkZWZhdWx0LCB0 aGUgQ29udGVudCBub3RlIGlzIHN3aXRjaGVkIG9uIGF1dG9tYXRpY2FsbHkuPC9wPgoKCTxw PlRoZSBOb3RlcyB0YWJzIGFyZSA8ZW0+cHVibGljPC9lbT4sIGkuZS4gdGhleSB3aWxsIGJl IHZpc2libGUgdG8gYW55b25lIHdobyBsb2dzIGluIHRvIHRoZSBUZXh0cGF0dGVybiBBZG1p biBpbnRlcmZhY2UuPC9wPgoKCTxwPk5vdGVzIG1hZGUgdW5kZXIgbm90ZSB0YWJzIGNhbiBv bmx5IGJlIGVkaXRlZCBieSBhbiBBZG1pbiB1c2VyLjwvcD4KCgk8aDI+PHN0cm9uZz5Gb290 bm90ZXM8L3N0cm9uZz48L2gyPgoKCTxwPk5vdGVzIGNhbiBiZSBhZGRlZCB0byBhbGwgb2Yg dGhlIHN0YW5kYXJkIFRleHRwYXR0ZXJuIGFkbWluIHBhZ2VzLiBUaGV5IGFwcGVhciBhdCB0 aGUgYm90dG9tIG9mIHRoZSBwYWdlIGFsb25nIHdpdGggQWRkL0VkaXQgbGlua3MuPC9wPgoK CTxwPkFsbCB1c2VycyBzZWUgcHVibGljIGZvb3Rub3Rlcy4gUHJpdmF0ZSBmb290bm90ZXMg YXJlIG9ubHkgdmlzaWJsZSB0byBpbmRpdmlkdWFsIHVzZXJzLjwvcD4KCgk8cD5Pbmx5IEFk bWluIHVzZXJzIGNhbiBhZGQgJmFtcDsgZWRpdCBwdWJsaWMgZm9vdG5vdGVzLiBBbGwgdXNl cnMgY2FuIGFkZCAmYW1wOyBlZGl0IHRoZWlyIG93biBwcml2YXRlIGZvb3Rub3Rlcy48L3A+ CgoJPHA+PGVtPk5vdGU6IEZvb3Rub3RlcyBhcmUgb25seSBhdmFpbGFibGUgaW4gPHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdmVyc2lvbnMgNC4wLjYrPC9lbT48L3A+CgoJPGgy PjxzdHJvbmc+TW9yZSBub3RlcyBhYm91dCBhZGlfbm90ZXM8L3N0cm9uZz48L2gyPgoKCTx1 bD4KCQk8bGk+VW5pbnN0YWxsIHdpbGwgZGVsZXRlIGFsbCBub3RlcyBmcm9tIHRoZSBUZXh0 cGF0dGVybiBkYXRhYmFzZS48L2xpPgoJCTxsaT5WaXNpYmlsaXR5IHNpbXBseSBjb250cm9s cyB3aGV0aGVyIHRoZSBub3RlIHRhYnMgY2FuIGJlIHNlZW4gdW5kZXIgdGhlIHNwZWNpZmll ZCBhcmVhIHRhYnMuICBOb3RlcyB0aGF0IGFyZSBub3QgdmlzaWJsZSBhcmUgbm90IGRlbGV0 ZWQsIGp1c3QgaGlkZGVuLiBGb290bm90ZXMgYXJlIGFsd2F5cyB2aXNpYmxlLCBob3dldmVy IHRoZXkgbWF5IGJlIHJlbW92ZWQgYnkgZGVsZXRpbmcgdGhlIG5vdGUgY29udGVudHMuPC9s aT4KCQk8bGk+QXR0ZW1wdHMgdG8gbWFrZSBhbGwgbm90ZSB0YWJzIGludmlzaWJsZSB3aWxs IGJlIGlnbm9yZWQuPC9saT4KCQk8bGk+VGhlIEVkaXQgbGlua3Mgd2lsbCBvbmx5IGJlIHNl ZW4gYnkgdGhvc2Ugc3VmZmljaWVudGx5IGVsZXZhdGVkIGluIHRoZSBwcml2aWxlZ2UgZGVw YXJ0bWVudC48L2xpPgoJCTxsaT5Ob3RlcyBhcmUgZm9ybWF0dGVkIHVzaW5nIFRleHRpbGUu PC9saT4KCTwvdWw+CgoJPGgyIGNsYXNzPSJhZGlfZXh0cmFzIj48c3Ryb25nPkFkZGl0aW9u YWwgaW5mb3JtYXRpb248L3N0cm9uZz48L2gyPgoKCTxwIGNsYXNzPSJhZGlfZXh0cmFzIj5T dXBwb3J0IGFuZCBmdXJ0aGVyIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBmcm9tIHRo ZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/ aWQ9Mjc5NTciPlRleHRwYXR0ZXJuIHN1cHBvcnQgZm9ydW08L2E+LiBBIGNvcHkgb2YgdGhp cyBoZWxwIGlzIGFsc28gYXZhaWxhYmxlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ3JlYXRvY2Vh bm1lZGlhLmNvbS5hdS90eHAvP3BsdWdpbj1hZGlfbm90ZXMiPm9ubGluZTwvYT4uICBNb3Jl IGFkaV9wbHVnaW5zIGNhbiBiZSBmb3VuZCA8YSBocmVmPSJodHRwOi8vd3d3LmdyZWF0b2Nl YW5tZWRpYS5jb20uYXUvdHhwLyI+aGVyZTwvYT4uPC9wPiI7czo0OiJjb2RlIjtzOjM0MzA5 OiIvKgoJYWRpX25vdGVzIC0gTGVhdmUgbm90ZXMgZm9yIFRleHRwYXR0ZXJuIHVzZXJzCgoJ V3JpdHRlbiBieSBBZGkgR2lsYmVydAoKCVJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKCglWZXJzaW9uIGhpc3Rvcnk6CgkJMS4wCQktIGVu aGFuY2VtZW50OiBmb290bm90ZXMKCQkJCS0gZW5oYW5jZW1lbnQ6IHB1YmxpYy9wcml2YXRl IG5vdGVzCgkJCQktIGVuaGFuY2VtZW50OiBpbiBzaXR1IGVkaXRpbmcKCQkwLjMJCS0gYWRk ZWQgZWRpdCBsaW5rcyAmIGxpbmtzIGZyb20gQWRtaW4gdGFiIHRvIG5vdGVzIHRhYnMKCQkw LjIJCS0gZml4OiBDUkVBVEUgVEFCTEUgZXJyb3IgKHRoYW5rcyBnb2NvbSkKCQkwLjEJCS0g aW5pdGlhbCByZWxlYXNlCgoqLwoKaWYgKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgewoK CWluY2x1ZGUoJy4vbGliL2NsYXNzVGV4dGlsZS5waHAnKTsKCglkZWZpbmUoJ0FESV9UQUJM RScsJ2FkaV9ub3RlcycpOwkJCQkvLyB0aGUgZGF0YWJhc2UgdGFibGUKCWRlZmluZSgnQURJ X1RBQkxFX09MRCcsJ2FkaV9ub3Rlc19vbGQnKTsJCS8vIG9sZCB2ZXJzaW9uIGJhY2t1cAoJ ZGVmaW5lKCdBRElfVEFCX1RJVExFJywnTm90ZXMnKTsJCQkJLy8gdGhlIG5vdGVzIHRhYiB0 aXRsZQoJZGVmaW5lKCdBRElfTk9URVNfRlJBR01FTlQnLCdhZGlfbm90ZXMnKTsJCS8vIGZy YWdtZW50IGlkIGZvciB0YWIvZW1iZWQgbm90ZXMKCWRlZmluZSgnQURJX1RJUFNfRlJBR01F TlQnLCdhZGlfbm90ZXNfdGlwcycpOwkvLyBmcmFnbWVudCBpZCBmb3IgdGlwcyBlZGl0CgoJ Z2xvYmFsICRhZGlfbm90ZXNfbGlzdCwkYWRpX25vdGVzX2d0eHQsJGFkaV9ub3Rlc19wcmVm cywkdmlzaWJpbGl0eSwkaW5zdGFsbGVkLCRoLCRkZWJ1ZywkYWRpX25vdGVzX2FkbWluX3Vw Z3JhZGVfbXNnLCRhZGlfbm90ZXNfdGFiX3VwZ3JhZGVfbXNnLCRub3RlX3N0eWxlLCRjdXJy ZW50X3N0eWxlLCRhZG1pbl91c2VyLCR0eHA0MDksJGFkbWluX3N0eWxlLCRwbHVnaW5fc3Rh dHVzOwoKCSRhZGlfbm90ZXNfcHJlZnMgPSBhcnJheSgKCQknc3R5bGUnID0+ICdzdGlja3kn LAoJCSd0eHA0MDknID0+ICcwJywKCQknZGVidWcnID0+ICcwJywKCQkpOwoKCSRkZWJ1ZyA9 IGFkaV9ub3Rlc19wcmVmcygnZGVidWcnKTsKCSRhZG1pbl91c2VyID0gaGFzX3ByaXZzKCd0 YWIuZXh0ZW5zaW9ucycpOwoJJHR4cDQwOSA9IHZlcnNpb25fY29tcGFyZSh0eHBfdmVyc2lv biwgJzQuMC45JywgJz49Jyk7CgkkdHhwNDA5ID0gYWRpX25vdGVzX3ByZWZzKCd0eHA0MDkn KTsKCSRwbHVnaW5fc3RhdHVzID0gc2FmZV9maWVsZCgic3RhdHVzIiwgInR4cF9wbHVnaW4i LCAibmFtZT0nYWRpX25vdGVzJyIpOy8vPz8/Pz8/Pz8/Pz8/CgkkaW5zdGFsbGVkID0gYWRp X25vdGVzX2luc3RhbGxlZChBRElfVEFCTEUpOwoKCS8vIGFkaV9ub3RlcyBpbmZvIGFycmF5 OgoJLy8JJ25vdGUgbmFtZScgPT4gKHVzZWQgaW4gdGhlIGRhdGFiYXNlKQoJLy8JCQkJCSd0 eXBlJyA9PiAndGFiJywgJ2VtYmVkJywgJ3RpcCcKCS8vCQkJCQkndGl0bGUnID0+IG5pY2Ug dGl0bGUKCS8vCQkJCQknd2hlcmUnID0+IHRhYiAtIHRoZSBwYXJlbnQgdGFiOyBlbWJlZCAt IHRoZSB0YWIncyBldmVudDsgdGlwIC0gdGhlIHBsdWdnYWJsZV91aQoJLy8JCQkJCSd2aXNp YmxlJyA9PiAwLzE6IGluaXRpYWwgdmlzaWJpbGl0eSAob25seSBhcHBsaWVzIHRvIHRhYiBu b3RlcykKCSRhZGlfbm90ZXNfbGlzdCA9IGFycmF5KAoJCSdjb250ZW50JyA9PgkJYXJyYXko J3R5cGUnID0+ICd0YWInLCAgICd0aXRsZScgPT4gJ0NvbnRlbnQnLCAnd2hlcmUnID0+ICdj b250ZW50JywgJ3Zpc2libGUnID0+ICcxJyksCgkJJ3ByZXNlbnRhdGlvbicgPT4JYXJyYXko J3R5cGUnID0+ICd0YWInLCAgICd0aXRsZScgPT4gJ1ByZXNlbnRhdGlvbicsICd3aGVyZScg PT4gJ3ByZXNlbnRhdGlvbicsICd2aXNpYmxlJyA9PiAnMCcpLAoJCSdhZG1pbicgPT4JCQlh cnJheSgndHlwZScgPT4gJ3RhYicsICAgJ3RpdGxlJyA9PiAnQWRtaW4nLCAnd2hlcmUnID0+ ICdhZG1pbicsICd2aXNpYmxlJyA9PiAnMCcpLAoJCSdhcnRpY2xlJyA9PgkJYXJyYXkoJ3R5 cGUnID0+ICdlbWJlZCcsICd0aXRsZScgPT4gJ0FydGljbGUvV3JpdGUnLCAnd2hlcmUnID0+ ICdhcnRpY2xlJywgJ3Zpc2libGUnID0+ICcwJyksCgkJJ2NhdGVnb3J5JyA9PgkJYXJyYXko J3R5cGUnID0+ICdlbWJlZCcsICd0aXRsZScgPT4gJ0NhdGVnb3JpZXMnLCAnd2hlcmUnID0+ ICdjYXRlZ29yeScsICd2aXNpYmxlJyA9PiAnMCcpLAoJCSdpbWFnZScgPT4JCQlhcnJheSgn dHlwZScgPT4gJ2VtYmVkJywgJ3RpdGxlJyA9PiAnSW1hZ2VzJywgJ3doZXJlJyA9PiAnaW1h Z2UnLCAndmlzaWJsZScgPT4gJzAnKSwKCQknZmlsZScgPT4JCQlhcnJheSgndHlwZScgPT4g J2VtYmVkJywgJ3RpdGxlJyA9PiAnRmlsZXMnLCAnd2hlcmUnID0+ICdmaWxlJywgJ3Zpc2li bGUnID0+ICcwJyksCgkJJ2xpbmsnID0+CQkJYXJyYXkoJ3R5cGUnID0+ICdlbWJlZCcsICd0 aXRsZScgPT4gJ0xpbmtzJywgJ3doZXJlJyA9PiAnbGluaycsICd2aXNpYmxlJyA9PiAnMCcp LAoJCSdjb21tZW50JyA9PgkJYXJyYXkoJ3R5cGUnID0+ICdlbWJlZCcsICd0aXRsZScgPT4g J0NvbW1lbnRzJywgJ3doZXJlJyA9PiAnZGlzY3VzcycsICd2aXNpYmxlJyA9PiAnMCcpLAoJ CSdzZWN0aW9uJyA9PgkJYXJyYXkoJ3R5cGUnID0+ICdlbWJlZCcsICd0aXRsZScgPT4gJ1Nl Y3Rpb25zJywgJ3doZXJlJyA9PiAnc2VjdGlvbicsICd2aXNpYmxlJyA9PiAnMCcpLAoJCSdw YWdlJyA9PgkJCWFycmF5KCd0eXBlJyA9PiAnZW1iZWQnLCAndGl0bGUnID0+ICdQYWdlcycs ICd3aGVyZScgPT4gJ3BhZ2UnLCAndmlzaWJsZScgPT4gJzAnKSwKCQknZm9ybScgPT4JCQlh cnJheSgndHlwZScgPT4gJ2VtYmVkJywgJ3RpdGxlJyA9PiAnRm9ybXMnLCAnd2hlcmUnID0+ ICdmb3JtJywgJ3Zpc2libGUnID0+ICcwJyksCgkJJ2NzcycgPT4JCQlhcnJheSgndHlwZScg PT4gJ2VtYmVkJywgJ3RpdGxlJyA9PiAnU3R5bGUnLCAnd2hlcmUnID0+ICdjc3MnLCAndmlz aWJsZScgPT4gJzAnKSwKCQknZGlhZycgPT4JCQlhcnJheSgndHlwZScgPT4gJ2VtYmVkJywg J3RpdGxlJyA9PiAnRGlhZ25vc3RpY3MnLCAnd2hlcmUnID0+ICdkaWFnJywgJ3Zpc2libGUn ID0+ICcwJyksCgkJJ3ByZWZzJyA9PgkJCWFycmF5KCd0eXBlJyA9PiAnZW1iZWQnLCAndGl0 bGUnID0+ICdQcmVmZXJlbmNlcycsICd3aGVyZScgPT4gJ3ByZWZzJywgJ3Zpc2libGUnID0+ ICcwJyksCgkJJ3VzZXInID0+CQkJYXJyYXkoJ3R5cGUnID0+ICdlbWJlZCcsICd0aXRsZScg PT4gJ1VzZXJzJywgJ3doZXJlJyA9PiAnYWRtaW4nLCAndmlzaWJsZScgPT4gJzAnKSwKCQkn bG9nJyA9PgkJCWFycmF5KCd0eXBlJyA9PiAnZW1iZWQnLCAndGl0bGUnID0+ICdMb2dzJywg J3doZXJlJyA9PiAnbG9nJywgJ3Zpc2libGUnID0+ICcwJyksCgkJJ2ltcG9ydCcgPT4JCQlh cnJheSgndHlwZScgPT4gJ2VtYmVkJywgJ3RpdGxlJyA9PiAnSW1wb3J0JywgJ3doZXJlJyA9 PiAnaW1wb3J0JywgJ3Zpc2libGUnID0+ICcwJyksCgkJJ21hcmt1cCcgPT4JCQlhcnJheSgn dHlwZScgPT4gJ3RpcCcsICAgJ3RpdGxlJyA9PiAnJywgJ3doZXJlJyA9PiAnYXJ0aWNsZV91 aScsICd2aXNpYmxlJyA9PiAnMCcpLAoJCSdvdmVycmlkZScgPT4JCWFycmF5KCd0eXBlJyA9 PiAndGlwJywgICAndGl0bGUnID0+ICcnLCAnd2hlcmUnID0+ICdhcnRpY2xlX3VpJywgJ3Zp c2libGUnID0+ICcwJyksCgkJJ2tleXdvcmRzJyA9PgkJYXJyYXkoJ3R5cGUnID0+ICd0aXAn LCAgICd0aXRsZScgPT4gJycsICd3aGVyZScgPT4gJ2FydGljbGVfdWknLCAndmlzaWJsZScg PT4gJzAnKSwKCQknYXJ0aWNsZV9pbWFnZScgPT4JYXJyYXkoJ3R5cGUnID0+ICd0aXAnLCAg ICd0aXRsZScgPT4gJycsICd3aGVyZScgPT4gJ2FydGljbGVfdWknLCAndmlzaWJsZScgPT4g JzAnKSwKCQkndXJsX3RpdGxlJyA9PgkJYXJyYXkoJ3R5cGUnID0+ICd0aXAnLCAgICd0aXRs ZScgPT4gJycsICd3aGVyZScgPT4gJ2FydGljbGVfdWknLCAndmlzaWJsZScgPT4gJzAnKSwK CQkndGl0bGUnID0+CQkJYXJyYXkoJ3R5cGUnID0+ICd0aXAnLCAgICd0aXRsZScgPT4gJycs ICd3aGVyZScgPT4gJ2FydGljbGVfdWknLCAndmlzaWJsZScgPT4gJzAnKSwKCQknYm9keScg PT4JCQlhcnJheSgndHlwZScgPT4gJ3RpcCcsICAgJ3RpdGxlJyA9PiAnJywgJ3doZXJlJyA9 PiAnYXJ0aWNsZV91aScsICd2aXNpYmxlJyA9PiAnMCcpLAoJCSdleGNlcnB0JyA9PgkJYXJy YXkoJ3R5cGUnID0+ICd0aXAnLCAgICd0aXRsZScgPT4gJycsICd3aGVyZScgPT4gJ2FydGlj bGVfdWknLCAndmlzaWJsZScgPT4gJzAnKSwKCQkndmlldycgPT4JCQlhcnJheSgndHlwZScg PT4gJ3RpcCcsICAgJ3RpdGxlJyA9PiAnJywgJ3doZXJlJyA9PiAnYXJ0aWNsZV91aScsICd2 aXNpYmxlJyA9PiAnMCcpLAoJCS8vJ3N0YXR1cycgPT4JCQlhcnJheSgndHlwZScgPT4gJ3Rp cCcsICAgJ3RpdGxlJyA9PiAnJywgJ3doZXJlJyA9PiAnYXJ0aWNsZV91aScsICd2aXNpYmxl JyA9PiAnMCcpLAoJCSdjYXRlZ29yaWVzJyA9PgkJYXJyYXkoJ3R5cGUnID0+ICd0aXAnLCAg ICd0aXRsZScgPT4gJycsICd3aGVyZScgPT4gJ2FydGljbGVfdWknLCAndmlzaWJsZScgPT4g JzAnKSwKCQknc2VjdGlvbicgPT4JCWFycmF5KCd0eXBlJyA9PiAndGlwJywgICAndGl0bGUn ID0+ICcnLCAnd2hlcmUnID0+ICdhcnRpY2xlX3VpJywgJ3Zpc2libGUnID0+ICcwJyksCgkJ J3RpbWVzdGFtcCcgPT4JCWFycmF5KCd0eXBlJyA9PiAndGlwJywgICAndGl0bGUnID0+ICcn LCAnd2hlcmUnID0+ICdhcnRpY2xlX3VpJywgJ3Zpc2libGUnID0+ICcwJyksCgkJJ2V4cGly ZXMnID0+CQlhcnJheSgndHlwZScgPT4gJ3RpcCcsICAgJ3RpdGxlJyA9PiAnJywgJ3doZXJl JyA9PiAnYXJ0aWNsZV91aScsICd2aXNpYmxlJyA9PiAnMCcpLAoJCSk7CgoJLy8gbWFwcGlu Z3MgZm9yIG1pc21hdGNoZXMgZ1R4dAoJJGFkaV9ub3Rlc19ndHh0ID0gYXJyYXkoCgkJJ21h cmt1cCcgPT4gJ2FydGljbGVfbWFya3VwJywKCQknb3ZlcnJpZGUnID0+ICdvdmVycmlkZV9k ZWZhdWx0X2Zvcm0nLAoJCSk7CgoJLy8gdG9vbHRpcCBoZWxwIGluZm9ybWF0aW9uCgkkaFsn aW4nXSA9ICJJbnN0YWxsIGFkaV9ub3RlcyI7CgkkaFsndW4nXSA9ICJVbmluc3RhbGwgYWRp X25vdGVzIC0gYWxsIG5vdGVzIHdpbGwgYmUgZGVsZXRlZCBmcm9tIHRoZSBkYXRhYmFzZSI7 CgkkaFsnY2wnXSA9ICJEZWxldGUgb2xkIGJhY2t1cCB0YWtlbiBkdXJpbmcgdXBncmFkZSBv ZiBhZGlfbm90ZXMiOwoJJGhbJ21pJ10gPSAiVXBncmFkZSBhZGlfbm90ZXMgZGF0YWJhc2Ug dGFibGUgdG8gdGhlIG5ldyB2ZXJzaW9uIjsKCSRoWyd2aSddID0gIkRlZmluZXMgdmlzaWJp bGl0eSBvZiBpbmRpdmlkdWFsIG5vdGVzIChwcmV2aW91c2x5IHNhdmVkIG5vdGUgY29udGVu dHMgYXJlIHN0aWxsIHByZXNlcnZlZCB3aGVuIG5vdCB2aXNpYmxlKSI7CgoJLy8gbWVzc2Fn ZXMKCSRhZGlfbm90ZXNfYWRtaW5fdXBncmFkZV9tc2cgPSAnWW91ciBub3RlcyBzdG9yZWQg aW4gdGhlIFRleHRwYXR0ZXJuIGRhdGFiYXNlIGFyZSBpbiBhbiBvbGQgZm9ybWF0LCB0aGV5 IG5lZWQgdG8gYmUgdXBncmFkZWQgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLiBUaGUgdXBncmFk ZSB3aWxsIGJlIHBlcmZvcm1lZCBhbmQgeW91ciBjdXJyZW50IG5vdGVzIGF1dG9tYXRpY2Fs bHkgdHJhbnNmZXJyZWQgYWNyb3NzIHdoZW4geW91IHNlbGVjdCA8ZW0+VXBncmFkZTwvZW0+ IGFuZCBjbGljayAiRG8gaXQiIGJlbG93LjwvcD48cD48c3Ryb25nPkFuIGF0dGVtcHQgd2ls bCBiZSBtYWRlIHRvIHRha2UgYSBiYWNrdXAgb2YgeW91ciBjdXJyZW50IG5vdGVzIGJ1dCB0 byBiZSBvbiB0aGUgc2FmZSBzaWRlLCB0YWtlIGFuIGluZGVwZW5kZW50IGNvcHkgb2YgeW91 ciBleGlzdGluZyBDb250ZW50LCBQcmVzZW50YXRpb24gJmFtcDsgQWRtaW4gbm90ZXMgKGUu Zy4gdXNpbmcgY29weS9wYXN0ZSkuPC9zdHJvbmc+JzsKCSRhZGlfbm90ZXNfdGFiX3VwZ3Jh ZGVfbXNnID0gJzxlbT48Yj4mbmJzcDthZGlfbm90ZXMgbmVlZHMgdG8gYmUgdXBncmFkZWQg Li4uIGdvIHRvIDxhIGhyZWY9Ij9ldmVudD1hZGlfbm90ZXNfYWRtaW4iPmFkaV9ub3RlcyBh ZG1pbiB0YWI8L2E+IHRvIHBlcmZvcm0gdXBncmFkZSAob3IgZ2V0IHlvdXIgZnJpZW5kbHkg VFhQIGFkbWluIHBlcnNvbiB0byBkbyBpdCBmb3IgeW91KS48L2I+PC9lbT4nOwoKCS8vIGFk bWluIHN0eWxlCgkkYWRtaW5fc3R5bGVbJ2Zvcm0nXQkJPSAnd2lkdGg6NjAlO21hcmdpbjow IGF1dG8gMmVtO3BhZGRpbmc6MWVtO2JvcmRlcjoxcHggc29saWQgIzkwOTA5MDt0ZXh0LWFs aWduOmNlbnRlcjsnOwoJJGFkbWluX3N0eWxlWyd0aXRsZSddCQk9ICd3aWR0aDphdXRvO2Jv cmRlci1ib3R0b206MXB4IGRhc2hlZCBibGFjazsnOwoJJGFkbWluX3N0eWxlWyd0YWJfbGlu ayddCT0gJ3dpZHRoOjkwJTttYXJnaW46MC41ZW0gYXV0byAwOyc7CgkkYWRtaW5fc3R5bGVb J3RleHRhcmVhJ10JPSAnd2lkdGg6MTAwJTsnOyAvLyB0aGlzIHByZWZpeGVzIGhlaWdodCBz dHlsZSBpbiBmdW5jdGlvbgoJJGFkbWluX3N0eWxlWydociddCQkJPSAnd2lkdGg6MTAwJTtt YXJnaW46MCBhdXRvIDFlbTtib3JkZXI6bm9uZTtoZWlnaHQ6MXB4O2NvbG9yOiNlMGUwZTA7 YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwOyc7CgkkYWRtaW5fc3R5bGVbJ3RpcF9uYW1lJ10J PSAnbWFyZ2luOjFlbSAwIDAgMDsnOwoKCS8vIG5vdGUgc3R5bGUKCSRjdXJyZW50X3N0eWxl ID0gYWRpX25vdGVzX3ByZWZzKCdzdHlsZScpOwoJJG5vdGVfc3R5bGVbJ3N0aWNreSddCT0g J3dpZHRoOjkwJTttYXJnaW46MWVtIGF1dG87cGFkZGluZzoxZW0gMWVtIDA7Ym9yZGVyOjFw eCBzb2xpZDtib3JkZXItY29sb3I6I2UzZDhjMyAjYzNiOGEzICNjM2I4YTMgI2UzZDhjMzti YWNrZ3JvdW5kLWNvbG9yOiNmZmZmY2M7Y29sb3I6IzIwMjAyMDsnOwoJJG5vdGVfc3R5bGVb J3JlZCddCT0gJ3dpZHRoOjkwJTttYXJnaW46MWVtIGF1dG87cGFkZGluZzoxZW0gMWVtIDA7 Ym9yZGVyOjFweCBzb2xpZCAjYjIyMjIyO2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtjb2xv cjojYjIyMjIyOyc7Cgkkbm90ZV9zdHlsZVsnbWluaW1hbCddCT0gJ3dpZHRoOjkwJTttYXJn aW46MWVtIGF1dG87JzsKCgkvLyByZWdpc3RlciBhZGlfbm90ZXMgQWRtaW4gdGFiCglhZGRf cHJpdnMoImFkaV9ub3Rlc19hZG1pbiIsJzEsMiw2Jyk7CglyZWdpc3Rlcl90YWIoImV4dGVu c2lvbnMiLCJhZGlfbm90ZXNfYWRtaW4iLCJhZGlfbm90ZXMiKTsKCgkvLyBhZGlfbm90ZXMg QWRtaW4gdGFiIGNhbGxiYWNrCglyZWdpc3Rlcl9jYWxsYmFjaygiYWRpX25vdGVzX2FkbWlu IiwiYWRpX25vdGVzX2FkbWluIik7CgoJLy8gcmVnaXN0ZXIgbm90ZSB0YWJzIChpZiBtYXJr ZWQgYXMgdmlzaWJsZSkgJiBjYWxsYmFja3MgZm9yIGFsbAoJaWYgKCRpbnN0YWxsZWQpIHsK CQkkdmlzaWJpbGl0eSA9IGFkaV9ub3Rlc192aXNpYmlsaXR5KCk7CgkJZm9yZWFjaCAoJGFk aV9ub3Rlc19saXN0IGFzICRub3RlX25hbWUgPT4gJGFkaV9ub3RlKSB7CgkJCWFkZF9wcml2 cygiYWRpX25vdGVzX3RhYl8iLiRub3RlX25hbWUsJzEsMiwzLDQsNSw2Jyk7CgkJCWlmICgk YWRpX25vdGVbJ3R5cGUnXSA9PSAndGFiJykgewoJCQkJaWYgKCR2aXNpYmlsaXR5WyRub3Rl X25hbWVdKSB7IC8vIG9ubHkgZGlzcGxheSBub3RlIHRhYiBpZiB2aXNpYmlsaXR5IHNldAoJ CQkJCXJlZ2lzdGVyX2NhbGxiYWNrKCJhZGlfbm90ZXNfdGFiIiwiYWRpX25vdGVzX3RhYl8i LiRub3RlX25hbWUpOwoJCQkJCXJlZ2lzdGVyX3RhYigkYWRpX25vdGVbJ3doZXJlJ10sImFk aV9ub3Rlc190YWJfIi4kbm90ZV9uYW1lLEFESV9UQUJfVElUTEUpOwoJCQkJfQoJCQl9CgkJ CWVsc2UgaWYgKCRhZGlfbm90ZVsndHlwZSddID09ICdlbWJlZCcpCgkJCQlyZWdpc3Rlcl9j YWxsYmFjaygnYWRpX25vdGVzX2VtYmVkX25vdGUnLCRhZGlfbm90ZVsnd2hlcmUnXSwnJywg MSk7CgkJCWVsc2UgaWYgKCRhZGlfbm90ZVsndHlwZSddID09ICd0aXAnKQoJCQkJcmVnaXN0 ZXJfY2FsbGJhY2soJ2FkaV9ub3Rlc19yZWFkX3RpcCcsJGFkaV9ub3RlWyd3aGVyZSddLCRu b3RlX25hbWUpOwoJCX0KCX0KCgkvLyBuZXcgNC4wLjkrIHBsdWdpbiBvcHRpb25zCglhZGRf cHJpdnMoJ3BsdWdpbl9wcmVmcy5hZGlfbm90ZXMnLCcxLDIsNicpOwoJcmVnaXN0ZXJfY2Fs bGJhY2soJ2FkaV9ub3Rlc19vcHRpb25zJywncGx1Z2luX3ByZWZzLmFkaV9ub3RlcycpOwp9 CgpmdW5jdGlvbiBhZGlfbm90ZXNfYWRtaW4oJGV2ZW50LCAkc3RlcCkgewovLyB0aGUgYWRt aW4gdGFiCglnbG9iYWwgJHZpc2liaWxpdHksJGluc3RhbGxlZCwkb2xkX3ZlcnNpb24sJHR4 cDQwOSwkZGVidWcsJHBsdWdpbl9zdGF0dXM7CgkkZGVidWcgPSBhZGlfbm90ZXNfcHJlZnMo J2RlYnVnJyk7CgkkbWVzc2FnZSA9ICJhZGlfbm90ZXM6IjsKCSRzb21ldGhpbmcgPSBwcygi c29tZXRoaW5nIik7CgkkYWN0aW9uID0gZ3BzKCJhY3Rpb24iKTsgLy8gbG9vayBmb3IgR0VU IHZhcmlhYmxlICdhY3Rpb24nICh1c2VkIGZvciAidW5hZHZlcnRpc2VkIiBhZG1pbiBmdW5j dGlvbnMpCgkkc3R5bGUgPSBwcygic3R5bGUiKTsKCWlmICgkZGVidWcpIHByaW50ICJzb21l dGhpbmc9JHNvbWV0aGluZywgYWN0aW9uPSRhY3Rpb24sIHN0eWxlPSRzdHlsZSI7CglpZiAo JGFjdGlvbikgJHNvbWV0aGluZyA9ICRhY3Rpb247IC8vIGlmICZhY3Rpb249eHh4eHh4eHh4 eCwgYXNzaWduIHRvICRzb21ldGhpbmcKCSR2aXNpYmlsaXR5ID0gcHMoInZpc2liaWxpdHki KTsKCWlmICgkc29tZXRoaW5nID09ICdkZWJ1ZycpCgkJYWRpX25vdGVzX3ByZWZzKCdkZWJ1 ZycsJ3RvZ2dsZScpOwoJaWYgKCRzb21ldGhpbmcgPT0gJ3R4cDQwOScpCgkJYWRpX25vdGVz X3ByZWZzKCd0eHA0MDknLCd0b2dnbGUnKTsKCWlmICgkc3R5bGUpCgkJYWRpX25vdGVzX3By ZWZzKCdzdHlsZScsJHN0eWxlKTsKCSRvbGRfdmVyc2lvbiA9IGFkaV9ub3Rlc191cGdyYWRl KCk7CglpZiAoJG9sZF92ZXJzaW9uKSB7IC8vIHVwZ3JhZGUgZGF0YWJhc2UgdGFibGUKCQlp ZiAoJHNvbWV0aGluZyA9PSAidXBncmFkZSIpIHsKCQkkcmVzID0gVFJVRTsKCQkJYWRpX25v dGVzX2luc3RhbGxlZChBRElfVEFCTEVfT0xEKSA/CQkJLy8gZGVsZXRlIG9sZCBiYWNrdXAK CQkJCSRyZXMgPSBhZGlfbm90ZXNfZHJvcChBRElfVEFCTEVfT0xEKSA6CgkJCQkkcmVzID0g VFJVRTsKCQkJJHJlcyA9ICRyZXMgJiYgYWRpX25vdGVzX2NvcHkoQURJX1RBQkxFLEFESV9U QUJMRV9PTEQpOwkvLyBtYWtlIGEgYmFja3VwCgkJCWlmICgkcmVzKSAkcmVzID0gJHJlcyAm JiBhZGlfbm90ZXNfZHJvcChBRElfVEFCTEUpOwkJLy8gZGVsZXRlIG9sZCBmb3JtYXQgdGFi bGUKCQkJJHJlcyA9ICRyZXMgJiYgYWRpX25vdGVzX2luc3RhbGwoRkFMU0UpOwkJLy8gY3Jl YXRlIGVtcHR5IG5ldyBmb3JtYXQgdGFibGUKCQkJYWRpX25vdGVzX3VwZ3JhZGUoQURJX1RB QkxFX09MRCk7CQkJCS8vIGNvcHkgbm90ZXMgb2xkIC0+IG5ldwoJCQlpZiAoJHJlcykKCQkJ CSRtZXNzYWdlID0gImFkaV9ub3RlczogdXBncmFkZSBzdWNjZXNzZnVsIjsKCQkJZWxzZQoJ CQkJJG1lc3NhZ2UgPSAiYWRpX25vdGVzOiB1cGdyYWRlIGZhaWxlZCI7CgkJCSRvbGRfdmVy c2lvbiA9IGFkaV9ub3Rlc191cGdyYWRlKCk7CQkJCS8vIGNoZWNrIGFnYWluCgkJfQoJCWVs c2UKCQkJJG1lc3NhZ2UgLj0gIiBkYXRhYmFzZSB0YWJsZSB1cGdyYWRlIHJlcXVpcmVkIjsK Cgl9CgllbHNlIGlmICgkdmlzaWJpbGl0eSkgeyAvLyB2aXNpYmlsaXR5IHVwZGF0ZQoJCWlm IChhZGlfbm90ZXNfdXBkYXRlX3Zpc2liaWxpdHkoJHZpc2liaWxpdHkpKQoJCQkkbWVzc2Fn ZSAuPSAiIHZpc2liaWxpdHkgdXBkYXRlZCI7CgkJZWxzZQoJCQkkbWVzc2FnZSAuPSAiIHZp c2liaWxpdHkgdXBkYXRlIGZhaWxlZCI7Cgl9CgllbHNlIGlmICgkc29tZXRoaW5nID09ICJk b3duZ3JhZGUiKSB7IC8vICZhY3Rpb249ZG93bmdyYWRlCgkJaWYgKGFkaV9ub3Rlc19pbnN0 YWxsZWQoQURJX1RBQkxFX09MRCkpIHsKCQkJJHJlcyA9IGFkaV9ub3Rlc19kcm9wKEFESV9U QUJMRSk7CQkJCQkJLy8gZGVsZXRlIG5ldyBmb3JtYXQgdGFibGUKCQkJJHJlcyA9ICRyZXMg JiYgYWRpX25vdGVzX2NvcHkoQURJX1RBQkxFX09MRCxBRElfVEFCTEUpOwkvLyBjb3B5IG9s ZCBmb3JtYXQgdGFibGUgZnJvbSBiYWNrdXAKCQkJaWYgKCRyZXMpCgkJCQkkbWVzc2FnZSA9 ICJhZGlfbm90ZXM6IGRvd25ncmFkZWQgdG8gb2xkIHZlcnNpb24iOwoJCQllbHNlCgkJCQkk bWVzc2FnZSA9ICJhZGlfbm90ZXM6IGRvd25ncmFkZSBmYWlsZWQiOwoJCQkkb2xkX3ZlcnNp b24gPSBhZGlfbm90ZXNfdXBncmFkZSgpOwkJCQkvLyBjaGVjayBhZ2FpbgoJCX0KCQllbHNl CgkJCSRtZXNzYWdlIC49ICIgZG93bmdyYWRlIGZhaWxlZCwgbm8gYmFja3VwIGZvdW5kIjsK CX0KCWVsc2UgaWYgKCRzb21ldGhpbmcgPT0gInJlc3RvcmUiKSB7IC8vICZhY3Rpb249cmVz dG9yZTogcmVzdG9yZSBvbGQgZm9ybWF0IG5vdGVzIGZyb20gJ2FkaV9ub3Rlc19iYWNrdXAn CgkJaWYgKGFkaV9ub3Rlc19pbnN0YWxsZWQoJ2FkaV9ub3Rlc19iYWNrdXAnKSkgewoJCQkk cmVzID0gYWRpX25vdGVzX2Ryb3AoQURJX1RBQkxFKTsJCQkJCQkvLyBkZWxldGUgbmV3IGZv cm1hdCB0YWJsZQoJCQkkcmVzID0gJHJlcyAmJiBhZGlfbm90ZXNfY29weSgnYWRpX25vdGVz X2JhY2t1cCcsQURJX1RBQkxFKTsJLy8gY29weSBvbGQgZm9ybWF0IHRhYmxlIGZyb20gYmFj a3VwCgkJCWlmICgkcmVzKQoJCQkJJG1lc3NhZ2UgPSAiYWRpX25vdGVzOiByZXN0b3JlZCBv bGQgdmVyc2lvbiI7CgkJCWVsc2UKCQkJCSRtZXNzYWdlID0gImFkaV9ub3RlczogcmVzdG9y ZSBmYWlsZWQiOwoJCQkkb2xkX3ZlcnNpb24gPSBhZGlfbm90ZXNfdXBncmFkZSgpOwkJCQkv LyBjaGVjayBhZ2FpbgoJCX0KCQllbHNlCgkJCSRtZXNzYWdlIC49ICIgcmVzdG9yZSBmYWls ZWQsIGFkaV9ub3Rlc19iYWNrdXAgbm90IGZvdW5kIjsKCX0KCWVsc2UgaWYgKCRzb21ldGhp bmcgPT0gImNsZWFudXAiKSB7IC8vIGRlbGV0ZSB1cGdyYWRlIGJhY2t1cAoJCWlmIChhZGlf bm90ZXNfaW5zdGFsbGVkKEFESV9UQUJMRV9PTEQpKQoJCQkkcmVzID0gYWRpX25vdGVzX2Ry b3AoQURJX1RBQkxFX09MRCk7IC8vIGRlbGV0ZSBvbGQgYmFja3VwCgkJaWYgKCRyZXMpIHsK CQkJJG1lc3NhZ2UgLj0gIiBvbGQgYmFja3VwIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5IjsKCQl9 CgkJZWxzZQoJCQkkbWVzc2FnZSAuPSAiIGRlbGV0aW9uIG9mIG9sZCBiYWNrdXAgZmFpbGVk IjsKCX0KCWVsc2UgewoJCWlmICgkc29tZXRoaW5nID09ICJpbnN0YWxsIikgeyAvLyBpbnN0 YWxsIGFkaV9ub3RlcwoJCQlyZXF1aXJlX3ByaXZzKCdwbHVnaW4nKTsKCQkJaWYgKCRpbnN0 YWxsZWQpCgkJCQkkbWVzc2FnZSAuPSAiIGluc3RhbGwgZmFpbGVkIC0gYWxyZWFkeSBpbnN0 YWxsZWQiOwoJCQllbHNlIHsKCQkJCSRyZXMgPSBhZGlfbm90ZXNfaW5zdGFsbCgkZXZlbnQs JHN0ZXApOwoJCQkJaWYgKCRyZXMpIHsKCQkJCQkkbWVzc2FnZSAuPSAiIGluc3RhbGxlZCBz dWNjZXNzZnVsbHkiOwoJCQkJCSRpbnN0YWxsZWQgPSBUUlVFOwoJCQkJfQoJCQkJZWxzZQoJ CQkJCSRtZXNzYWdlIC49ICIgaW5zdGFsbCBub3Qgc3VjY2Vzc2Z1bCI7CgkJCX0KCQl9CgkJ ZWxzZSBpZiAoJHNvbWV0aGluZyA9PSAidW5pbnN0YWxsIikgeyAvLyB1bmluc3RhbGwgYWRp X25vdGVzCgkJCXJlcXVpcmVfcHJpdnMoJ3BsdWdpbicpOwoJCQlpZiAoJGluc3RhbGxlZCkg ewoJCQkJLy8kcmVzID0gYWRpX25vdGVzX3VuaW5zdGFsbCgkZXZlbnQsJHN0ZXApOwoJCQkJ JHJlcyA9IGFkaV9ub3Rlc19kcm9wKEFESV9UQUJMRSk7CgkJCQkkcmVzID0gJHJlcyAmJiBh ZGlfbm90ZXNfZGVsZXRlX3ByZWZzKCk7CgkJCQlpZiAoJHJlcykgewoJCSAgICAJCSRtZXNz YWdlIC49ICIgdW5pbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5IjsKCQkJCQkkaW5zdGFsbGVkID0g RkFMU0U7CgkJCQl9CgkJCQllbHNlCgkJICAgIAkJJG1lc3NhZ2UgLj0gIiB1bmluc3RhbGwg bm90IHN1Y2Nlc3NmdWwiOwoJCQl9CgkJCWVsc2UKCQkJCSRtZXNzYWdlIC49ICIgdW5pbnN0 YWxsIGZhaWwgLSBub3QgaW5zdGFsbGVkIHlldCI7CgkJfQoJCWVsc2UgLy8gZG8gbm90aGlu ZwoJCQlpZiAoJGluc3RhbGxlZCkKCQkJCSRtZXNzYWdlID0gIiI7CgkJCWVsc2UKCQkJCSRt ZXNzYWdlIC49ICIgbm90IGluc3RhbGxlZCI7Cgl9CglwYWdldG9wKCdhZGlfbm90ZXMgQWRt aW4nLCRtZXNzYWdlKTsKCWlmICgkaW5zdGFsbGVkKQoJCSR2aXNpYmlsaXR5ID0gYWRpX25v dGVzX3Zpc2liaWxpdHkoKTsKCWFkaV9ub3Rlc19jb250cm9scygkZXZlbnQsJHN0ZXApOwoJ aWYgKCEkdHhwNDA5IHx8ICEkcGx1Z2luX3N0YXR1cykgLy8gZGlzcGxheSBhZG1pbiBvcHRp b25zIGlmIG5vdCA0LjAuOSBvciBub3QgYWN0aXZlIChpLmUuIGRldikKCQlhZGlfbm90ZXNf b3B0aW9ucygkZXZlbnQsJHN0ZXApOwp9CgpmdW5jdGlvbiBhZGlfbm90ZXNfY29udHJvbHMo JGV2ZW50LCAkc3RlcCkgewovLyBkaXNwbGF5IGFkaV9ub3RlcyBhZG1pbiBjb250cm9sczog dmlzaWJpbGl0eSAmIGluc3RhbGwvdW5pbnN0YWxsCglnbG9iYWwgJGluc3RhbGxlZCwkdmlz aWJpbGl0eSwkaCwkYWRpX25vdGVzX2xpc3QsJG9sZF92ZXJzaW9uLCRkZWJ1ZywkYWRtaW5f c3R5bGU7CglpZiAoJGluc3RhbGxlZCAmJiAhJG9sZF92ZXJzaW9uKSB7IC8vIGludml0ZSB2 aXNpYmlsaXR5IHVwZGF0ZXMKCQkkY2hlY2tib3hlcyA9ICc8cD4nOwoJCWZvcmVhY2ggKCRh ZGlfbm90ZXNfbGlzdCBhcyAkaW5kZXggPT4gJGFkaV9ub3RlKQoJCQlpZiAoJGFkaV9ub3Rl Wyd0eXBlJ10gPT0gJ3RhYicpCgkJCQkkY2hlY2tib3hlcyAuPSAnICcuJGFkaV9ub3RlWyd0 aXRsZSddLicgJy5jaGVja2JveCgidmlzaWJpbGl0eVsnIi4kaW5kZXguIiddIiwgIjEiLCAk dmlzaWJpbGl0eVskaW5kZXhdKS4nJm5ic3A7Jm5ic3A7JzsKCQkkY2hlY2tib3hlcyAuPSAn PC9wPic7CgkgICAgZWNobyBmb3JtKAoJCQl0YWcodGFnKCdOb3RlIFRhYiBWaXNpYmlsaXR5 Jywnc3BhbicsYWRpX25vdGVzX3RpdGxlKCRoWyd2aSddKSksJ2gyJykuCgkJCQkkY2hlY2ti b3hlcy4KCSAgICAgICAgCWZJbnB1dCgic3VibWl0IiwgImRvX3NvbWV0aGluZyIsICJVcGRh dGUgdmlzaWJpbGl0eSIsICJzbWFsbGVyYm94IiwiIiwnJykuCgkgICAgICAgIGVJbnB1dCgi YWRpX25vdGVzX2FkbWluIikuc0lucHV0KCJhZGlfbm90ZXNfdmlzaWJpbGl0eSIpCgkJCSwk YWRtaW5fc3R5bGVbJ2Zvcm0nXQoJCSk7CgkgICAgZWNobyBmb3JtKAoJCQl0YWcoIk5vdGUg U3R5bGUiLCJoMiIpLgoJCQlncmFmKAoJCQkJdGFnKCdTdGlja3knLCdzcGFuJykuJyAnLgoJ CQkJcmFkaW8oJ3N0eWxlJywnc3RpY2t5JywoYWRpX25vdGVzX3ByZWZzKCdzdHlsZScpID09 ICdzdGlja3knKSkuJyZuYnNwOyZuYnNwOycuCgkJCQl0YWcoJ1JlZCcsJ3NwYW4nKS4nICcu CgkJCQlyYWRpbygnc3R5bGUnLCdyZWQnLChhZGlfbm90ZXNfcHJlZnMoJ3N0eWxlJykgPT0g J3JlZCcpKS4nJm5ic3A7Jm5ic3A7Jy4KCQkJCXRhZygnTWluaW1hbCcsJ3NwYW4nKS4nICcu CgkJCQlyYWRpbygnc3R5bGUnLCdtaW5pbWFsJywoYWRpX25vdGVzX3ByZWZzKCdzdHlsZScp ID09ICdtaW5pbWFsJykpLicmbmJzcDsmbmJzcDsnLgoJICAgICAgICAJZklucHV0KCJzdWJt aXQiLCAiZG9fc29tZXRoaW5nIiwgIkNoYW5nZSBzdHlsZSIsICJzbWFsbGVyYm94IiwiIiwn cmV0dXJuIHZlcmlmeShcJycuZ1R4dCgnYXJlX3lvdV9zdXJlJykuJ1wnKScpCgkJCSkuCgkg ICAgICAgIGVJbnB1dCgiYWRpX25vdGVzX2FkbWluIikuc0lucHV0KCJhZGlfbm90ZXNfYWRt aW4iKQoJCQksJGFkbWluX3N0eWxlWydmb3JtJ10KCQkpOwoJfQp9CgpmdW5jdGlvbiBhZGlf bm90ZXNfb3B0aW9ucygkZXZlbnQsJHN0ZXApIHsKLy8gZGlzcGxheSBhZGlfbm90ZXMgb3B0 aW9uczogaW5zdGFsbC91bmluc3RhbGwvdXBncmFkZQoJZ2xvYmFsICRpbnN0YWxsZWQsJHZp c2liaWxpdHksJGgsJGFkaV9ub3Rlc19saXN0LCRvbGRfdmVyc2lvbiwkYWRpX25vdGVzX2Fk bWluX3VwZ3JhZGVfbXNnLCRhZG1pbl91c2VyLCRkZWJ1ZywkYWRtaW5fc3R5bGU7Cgkkb2xk X2JhY2t1cF9mb3VuZCA9IGFkaV9ub3Rlc19pbnN0YWxsZWQoQURJX1RBQkxFX09MRCk7Cgkk YXJndiA9IGZ1bmNfZ2V0X2FyZ3MoKTsgLy8gZmluZCBvdXQgd2hvJ3MgY2FsbGVkIG1lCglp ZiAoJGFyZ3ZbMF0gPT0gJ3BsdWdpbl9wcmVmcy5hZGlfbm90ZXMnKSAvLyBjYWxsZWQgZnJv bSBwbHVnaW4gb3B0aW9ucywgc28gbmVlZCBwYWdlIHRvcAoJCXBhZ2V0b3AoJ2FkaV9ub3Rl cyBBZG1pbicsJG1lc3NhZ2UpOwoJaWYgKCRhZG1pbl91c2VyKSAvLyBmb3IgQURNSU4gdXNl cnMgb25seQoJCWlmICgkb2xkX3ZlcnNpb24pIC8vIGRpc3BsYXkgdXBncmFkZSBvcHRpb24K CQkgICAgZWNobyBmb3JtKAoJCQkJdGFnKCJhZGlfbm90ZXMgZGF0YWJhc2UgdGFibGUgdXBn cmFkZSIsImgyIikuCgkJCQl0YWcoJGFkaV9ub3Rlc19hZG1pbl91cGdyYWRlX21zZywncCcp LgoJCQkJZ3JhZigKCQkJCQkiICIudGFnKCdVcGdyYWRlJywnc3BhbicsYWRpX25vdGVzX3Rp dGxlKCRoWydtaSddKSkuCgkJCQkJZklucHV0KCJyYWRpbyIsICJzb21ldGhpbmciLCAidXBn cmFkZSIsICJlZGl0IiwgIiIsICIiLCAiMjAiLCAiMSIpLgoJCQkJCSIgIi4KCQkgICAgICAg IAlmSW5wdXQoInN1Ym1pdCIsICJkb19zb21ldGhpbmciLCAiRG8gaXQiLCAic21hbGxlcmJv eCIsIiIsJ3JldHVybiB2ZXJpZnkoXCcnLmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJyknKQoJ CQkJKS4KCQkgICAgICAgIGVJbnB1dCgiYWRpX25vdGVzX2FkbWluIikuc0lucHV0KCJhZGlf bm90ZXNfYWRtaW4iKQoJCQkJLCRhZG1pbl9zdHlsZVsnZm9ybSddCgkJCSk7CgkJZWxzZSB7 IC8vIGRpc3BsYXkgbm9ybWFsIGFkbWluIG9wdGlvbnMKCQkJJGluc3RhbGxlZCA/CgkJCQkk bnN0YWxsX29wdGlvbiA9IHRhZygnVW5pbnN0YWxsJywnc3BhbicsYWRpX25vdGVzX3RpdGxl KCRoWyd1biddKSkuJyAnLgoJCQkJCWZJbnB1dCgicmFkaW8iLCAic29tZXRoaW5nIiwgInVu aW5zdGFsbCIsICJlZGl0IiwgIiIsICIiLCAiMjAiLCAiMSIpIDoKCQkJCSRuc3RhbGxfb3B0 aW9uID0gdGFnKCdJbnN0YWxsJywnc3BhbicsYWRpX25vdGVzX3RpdGxlKCRoWydpbiddKSku JyAnLgoJCQkJCWZJbnB1dCgicmFkaW8iLCAic29tZXRoaW5nIiwgImluc3RhbGwiLCAiZWRp dCIsICIiLCAiIiwgIjIwIiwgIjEiKTsKCQkJJG9sZF9iYWNrdXBfZm91bmQgPwoJCQkJJGNs ZWFudXBfb3B0aW9uID0gdGFnKCdDbGVhbnVwJywnc3BhbicsYWRpX25vdGVzX3RpdGxlKCRo WydjbCddKSkuJyAnLgoJCQkJCWZJbnB1dCgicmFkaW8iLCAic29tZXRoaW5nIiwgImNsZWFu dXAiLCAiZWRpdCIsICIiLCAiIiwgIjIwIiwgIjEiKSA6CgkJCQkkY2xlYW51cF9vcHRpb24g PSAnJzsKCQkgICAgZWNobyBmb3JtKAoJCQkJdGFnKHRhZygnTm90ZXMgQWRtaW5pc3RyYXRp b24nLCdzcGFuJyxhZGlfbm90ZXNfdGl0bGUoJycpKSwnaDInKS4KCQkJCWdyYWYoCgkJCQkJ JG5zdGFsbF9vcHRpb24uJyZuYnNwOyZuYnNwOycuCgkJCQkJJGNsZWFudXBfb3B0aW9uLicm bmJzcDsmbmJzcDsnLgoJCQkJCSIgIi4KCQkJCQlmSW5wdXQoInN1Ym1pdCIsICJkb19zb21l dGhpbmciLCAiRG8gYWRtaW4iLCAic21hbGxlcmJveCIsIiIsJ3JldHVybiB2ZXJpZnkoXCcn LmdUeHQoJ2FyZV95b3Vfc3VyZScpLidcJyknKQoJCQkJKS4KCQkgICAgICAgIGVJbnB1dCgi YWRpX25vdGVzX2FkbWluIikuc0lucHV0KCJhZGlfbm90ZXNfYWRtaW4iKQoJCQkJLCRhZG1p bl9zdHlsZVsnZm9ybSddCgkJCSk7CgkJfQp9CgpmdW5jdGlvbiBhZGlfbm90ZXNfcHJlZnMo JG5hbWUsJG5ld192YWx1ZT0nJykgewovLyBzZXQvcmVhZCBwcmVmZXJlbmNlcwoJZ2xvYmFs ICRwcmVmcywkYWRpX25vdGVzX3ByZWZzOwoJLy8gcmVhZCBjdXJyZW50IHZhbHVlIChlaXRo ZXIgZnJvbSBkYXRhYmFzZSBvciAkYWRpX25vdGVzX3ByZWZzKQoJaXNzZXQoJHByZWZzWydh ZGlfbm90ZXNfJy4kbmFtZV0pID8gJHZhbHVlID0gJHByZWZzWydhZGlfbm90ZXNfJy4kbmFt ZV0gOiAkdmFsdWUgPSAkYWRpX25vdGVzX3ByZWZzWyRuYW1lXTsKCWlmICgkbmV3X3ZhbHVl ID09ICd0b2dnbGUnKSB7IC8vIHRvZ2dsZSBib29sZWFuCgkJJHZhbHVlID8gJHZhbHVlID0g MCA6ICR2YWx1ZSA9IDE7IC8vIHRvZ2dsZSBkZWJ1ZyBtb2RlCgkJc2V0X3ByZWYoJ2FkaV9u b3Rlc18nLiRuYW1lLCR2YWx1ZSwnYWRpX25vdGVzX2FkbWluJywyKTsKCQkkcHJlZnMgPSBn ZXRfcHJlZnMoKTsgLy8gcmUtc2FtcGxlICRwcmVmcwoJfQoJZWxzZSBpZiAoJG5ld192YWx1 ZSkgeyAvLyBzZXQgYSB2YWx1ZQoJCXNldF9wcmVmKCdhZGlfbm90ZXNfJy4kbmFtZSwkbmV3 X3ZhbHVlLCdhZGlfbm90ZXNfYWRtaW4nLDIpOwoJCSRwcmVmcyA9IGdldF9wcmVmcygpOyAv LyByZS1zYW1wbGUgJHByZWZzCgl9CgllbHNlIC8vIHNpbXBseSByZXR1cm4gdmFsdWUKCQly ZXR1cm4gJHZhbHVlOwp9CgpmdW5jdGlvbiBhZGlfbm90ZXNfaW5zdGFsbGVkKCR0YWJsZSkg ewovLyB0ZXN0IGlmIHN1cHBsaWVkIHRhYmxlIGlzIHByZXNlbnQKCWdsb2JhbCAkZGVidWc7 CgkkZm91bmQgPSBGQUxTRTsKCSRycyA9IHNhZmVfcXVlcnkoIlNIT1cgVEFCTEVTIExJS0Ug JyIuc2FmZV9wZngoJHRhYmxlKS4iJyIsJGRlYnVnKTsKCSRhID0gbmV4dFJvdygkcnMpOwoJ aWYgKCRhKQoJCSRmb3VuZCA9IFRSVUU7CgkvKiBPTEQgTUVUSE9ECgkkcnMgPSBzYWZlX3F1 ZXJ5KCJTSE9XIFRBQkxFUyIsJGRlYnVnKTsKCXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkg ewoJCWV4dHJhY3QoJGEpOwoJCSRmb3VuZCA9ICRmb3VuZCB8fCAoY3VycmVudCgkYSkgPT0g c2FmZV9wZngoQURJX1RBQkxFKSk7Cgl9CgkqLwoJcmV0dXJuICRmb3VuZDsKfQoKZnVuY3Rp b24gYWRpX25vdGVzX3VwZ3JhZGUoJGJhY2t1cF90YWJsZT0nJykgewovLyBjaGVjayBmb3Jt YXQgb2YgYWRpX25vdGVzIHRhYmxlCglnbG9iYWwgJGRlYnVnLCRpbnN0YWxsZWQ7CglpZiAo JGluc3RhbGxlZCkKCQlpZiAoJGJhY2t1cF90YWJsZSkgeyAvLyBiYWNrdXAgdGFibGUgc3Vw cGxpZWQgc28gY29weSBub3RlcyBmcm9tIGJhY2t1cAoJCQkkcnMgPSBzYWZlX3Jvd3MoJyon LCRiYWNrdXBfdGFibGUsIjE9MSIsJGRlYnVnKTsKCQkJZm9yZWFjaCAoJHJzIGFzICRuYW1l ID0+ICRyb3cpIHsKCQkJCWV4dHJhY3QoJHJvdyk7CgkJCQlpZiAoJGRlYnVnKSBkbXAoJHJv dyk7CgkJCQlzYWZlX3F1ZXJ5KAoJCQkJCSJJTlNFUlQgSU5UTyAiLgoJCQkJCXNhZmVfcGZ4 KEFESV9UQUJMRSkuCgkJCQkJIiBWQUxVRVMgKERFRkFVTFQsJyIuJG5hbWUuIicsJ3RhYics REVGQVVMVCxERUZBVUxULCciLiR2aXNpYmxlLiInLCciLiRsYXN0X21vZC4iJywnIi4kbGFz dF9tb2RfSUQuIicsJyIuZG9TbGFzaCgkbm90ZSkuIicpIiwkZGVidWcKCQkJCQkpOwoJCQl9 CgkJCXJldHVybiBUUlVFOwoJCX0KCQllbHNlIHsgLy8gY2hlY2sgZm9ybWF0IG9mIGFkaV9u b3RlcyB0YWJsZSAoaWYgJ2lkJyBjb2x1bW4gZG9lc24ndCBleGlzdCB0aGVuIG9sZCBmb3Jt YXQpCgkJCS8vICJTSE9XIENPTFVNTlMgV0hFUkUiIG5vIGdvb2QgZm9yIE15U1FMIHZlcnNp b24gNC4xCgkJCSRycyA9IHNhZmVfcXVlcnkoIlNIT1cgQ09MVU1OUyBGUk9NICIuc2FmZV9w ZngoQURJX1RBQkxFKS4iIExJS0UgJ2lkJyIsJGRlYnVnKTsKCQkJJGEgPSBuZXh0Um93KCRy cyk7CgkJCWlmIChlbXB0eSgkYSkpIC8vICdpZCcgY29sdW1uIG5vdCBmb3VuZAoJCQkJcmV0 dXJuIFRSVUU7CgkJCWVsc2UKCQkJCXJldHVybiBGQUxTRTsKCQl9CgllbHNlCgkJcmV0dXJu IEZBTFNFOwp9CgpmdW5jdGlvbiBhZGlfbm90ZXNfY29weSgkc291cmNlLCRkZXN0aW5hdGlv bikgewovLyBjcmVhdGUgY29weSB0YWJsZTogc291cmNlIC0+IGRlc3RpbmF0aW9uCglnbG9i YWwgJGRlYnVnOwoJJHJlcyA9IHNhZmVfcXVlcnkoIkNSRUFURSBUQUJMRSAiLnNhZmVfcGZ4 KCRkZXN0aW5hdGlvbikuIiBMSUtFICIuc2FmZV9wZngoJHNvdXJjZSkuIjsiLCRkZWJ1Zyk7 CgkvLyBjYW4ndCB1c2UgZm9sbG93aW5nIGJlY2F1c2Ugc2luZ2xlIHF1b3RlcyBldGMuIGlu ICRub3RlIG5lZWQgdG8gYmUgZXNjYXBlZAoJLy8kcmVzID0gJHJlcyAmJiBzYWZlX3F1ZXJ5 KCJJTlNFUlQgIi5zYWZlX3BmeCgkZGVzdGluYXRpb24pLiIgU0VMRUNUICogRlJPTSAiLnNh ZmVfcGZ4KCRzb3VyY2UpLiI7IiwkZGVidWcpOwoJJHJzID0gc2FmZV9yb3dzKCcqJywkc291 cmNlLCIxPTEiLCRkZWJ1Zyk7Cglmb3JlYWNoICgkcnMgYXMgJGluZGV4ID0+ICRyb3cpIHsK CQlleHRyYWN0KCRyb3cpOwoJCSRyZXMgPSAkcmVzICYmIHNhZmVfcXVlcnkoCgkJCQkJIklO U0VSVCBJTlRPICIuCgkJCQkJc2FmZV9wZngoJGRlc3RpbmF0aW9uKS4KCQkJCQkiIFZBTFVF UyAoJyIuJG5hbWUuIicsJyIuJHZpc2libGUuIicsJyIuJGxhc3RfbW9kLiInLCciLiRsYXN0 X21vZF9JRC4iJywnIi4kcmVzdHJpY3RlZF9wcml2cy4iJywnIi4kcmVzdHJpY3RlZF9JRC4i JywnIi5kb1NsYXNoKCRub3RlKS4iJykiLCRkZWJ1ZwoJCQkJCSk7Cgl9CglyZXR1cm4gJHJl czsKfQoKZnVuY3Rpb24gYWRpX25vdGVzX2Ryb3AoJGRiX3RhYmxlKSB7Ci8vIGRlbGV0ZSBh IHRhYmxlCglnbG9iYWwgJGRlYnVnOwoJJHJlcyA9IHNhZmVfcXVlcnkoIkRST1AgVEFCTEUg Ii5zYWZlX3BmeCgkZGJfdGFibGUpLiI7IiwkZGVidWcpOwoJcmV0dXJuICRyZXM7Cn0KCmZ1 bmN0aW9uIGFkaV9ub3Rlc19pbnN0YWxsKCR2YW5pbGxhPVRSVUUpIHsKLy8gY3JlYXRlIGFk aV9ub3RlcyB0YWJsZQoJZ2xvYmFsICRhZGlfbm90ZXNfbGlzdCwkYWRpX25vdGVzX3Zpc2li aWxpdHksJGRlYnVnLCRwcmVmczsKCSRyZXMgPSBzYWZlX3F1ZXJ5KAoJCSJDUkVBVEUgVEFC TEUgSUYgTk9UIEVYSVNUUyAiLnNhZmVfcGZ4KEFESV9UQUJMRSkuIiAoCgkJYGlkYCBJTlQo MTEpIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAoJCWBuYW1lYCBWQVJDSEFSKDY0KSBOT1Qg TlVMTCBERUZBVUxUICcnLAoJCWB0eXBlYCBWQVJDSEFSKDgpIE5PVCBOVUxMIERFRkFVTFQg JycsCgkJYHVzZXJgIFZBUkNIQVIoNjQpIE5VTEwgREVGQVVMVCAnJywKCQlgcHJpdnNgIFZB UkNIQVIoMjIpIE5PVCBOVUxMIERFRkFVTFQgJzEsMiwzLDQsNSw2JywKCQlgdmlzaWJsZWAg VElOWUlOVCgxKSBOT1QgTlVMTCBERUZBVUxUICcwJywKCQlgbGFzdF9tb2RgIERBVEVUSU1F IE5PVCBOVUxMIERFRkFVTFQgJzAwMDAtMDAtMDAgMDA6MDA6MDAnLAoJCWBsYXN0X21vZF91 c2VyYCBWQVJDSEFSKDY0KSBOT1QgTlVMTCBERUZBVUxUICcnLAoJCWBub3RlYCBURVhUIE5P VCBOVUxMIERFRkFVTFQgJycsCgkJUFJJTUFSWSBLRVkoaWQpCgkJKTsiCgkJLCRkZWJ1Zyk7 CglpZiAoJHZhbmlsbGEpIC8vIHBvcHVsYXRlIHRhYmxlIHdpdGggZW1wdHkgbm90ZSB0YWIg cm93cwoJCWZvcmVhY2ggKCRhZGlfbm90ZXNfbGlzdCBhcyAkbmFtZSA9PiAkaW5mbykKCQkJ aWYgKCRpbmZvWyd0eXBlJ10gPT0gJ3RhYicpCgkJCQkkcmVzID0gJHJlcyAmJiBhZGlfbm90 ZXNfYWRkX25vdGUoJG5hbWUsJ3RhYicpOwoJcmV0dXJuICRyZXM7Cn0KCmZ1bmN0aW9uIGFk aV9ub3Rlc19kZWxldGVfcHJlZnMoKSB7Ci8vIGxlYXZlIG5vIHRyYWNlCglnbG9iYWwgJGFk aV9ub3Rlc19wcmVmcywkZGVidWc7CgkkcmVzID0gVFJVRTsKCWZvcmVhY2ggKCRhZGlfbm90 ZXNfcHJlZnMgYXMgJG5hbWUgPT4gJHZhbHVlKQoJCWlmIChzYWZlX3JvdygiKiIsJ3R4cF9w cmVmcycsIm5hbWUgPSAnYWRpX25vdGVzXyRuYW1lJyIsJGRlYnVnKSkKCQkJJHJlcyA9ICRy ZXMgJiYgc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsIm5hbWUgPSAnYWRpX25vdGVzXyRuYW1l JyIsJGRlYnVnKTsKCXJldHVybiAkcmVzOwp9CgpmdW5jdGlvbiBhZGlfbm90ZXNfYWRkX25v dGUoJG5hbWUsJHR5cGUpIHsKLy8gaW5zZXJ0IG5vdGUncyByb3cgaW50byBub3RlcyB0YWJs ZQoJZ2xvYmFsICRhZGlfbm90ZXNfbGlzdCwkZGVidWc7CglpZiAoYXJyYXlfa2V5X2V4aXN0 cygkbmFtZSwkYWRpX25vdGVzX2xpc3QpKQoJCSR2aXNpYmxlID0gJGFkaV9ub3Rlc19saXN0 WyRuYW1lXVsndmlzaWJsZSddOwoJZWxzZQoJCSR2aXNpYmxlID0gMDsKCXJldHVybiBzYWZl X3F1ZXJ5KAoJCSJJTlNFUlQgSU5UTyAiLgoJCXNhZmVfcGZ4KEFESV9UQUJMRSkuCgkJIiBW QUxVRVMgKERFRkFVTFQsJyIuJG5hbWUuIicsJyIuJHR5cGUuIicsREVGQVVMVCxERUZBVUxU LCciLiR2aXNpYmxlLiInLERFRkFVTFQsREVGQVVMVCxERUZBVUxUKSIKCQksJGRlYnVnKTsK fQoKZnVuY3Rpb24gYWRpX25vdGVzX3Zpc2liaWxpdHkoKSB7Ci8vIGNyZWF0ZSB2aXNpYmls aXR5IGxpc3QgYXJyYXkgb2YgdGFiIG5vdGVzIGZyb20gZGF0YWJhc2UKCWdsb2JhbCAkaW5z dGFsbGVkLCRkZWJ1ZzsKCSR2aXNpYmlsaXR5ID0gYXJyYXkoKTsKCSRycyA9IHNhZmVfcm93 cygnKicsQURJX1RBQkxFLCIxPTEiLCRkZWJ1Zyk7Cglmb3JlYWNoICgkcnMgYXMgJGluZGV4 ID0+ICRyb3cpIHsKCQlleHRyYWN0KCRyb3cpOwoJCSR2aXNpYmlsaXR5WyRuYW1lXSA9ICR2 aXNpYmxlOyAvLyBjcmVhdGUgYXJyYXksIGluZGV4ZWQgYnkgbmFtZSwgb2Ygbm90ZXMnIHZp c2liaWxpdHkgZm91bmQgaW4gZGF0YWJhc2UKCX0KCXJldHVybiAkdmlzaWJpbGl0eTsKfQoK ZnVuY3Rpb24gYWRpX25vdGVzX3VwZGF0ZV92aXNpYmlsaXR5KCR2aXNpYmlsaXR5KSB7Ci8v IHVwZGF0ZSBkYXRhYmFzZSB3aXRoIG5ldyB0YWIgbm90ZSB2aXNpYmlsaXR5IGluZm8gKEFM TCBPVEhFUiBOT1RFUyBHRVQgU0VUIFRPIFpFUk8pCglnbG9iYWwgJGFkaV9ub3Rlc19saXN0 LCRkZWJ1ZzsKCSRyZXMgPSBUUlVFOwoJLy8gc2V0IHZpc2liaWxpdHkgdG8gRkFMU0UKCSRy cyA9IHNhZmVfcm93cygnKicsQURJX1RBQkxFLCcxPTEnLCRkZWJ1Zyk7Cglmb3JlYWNoICgk cnMgYXMgJGluZGV4ID0+ICRyb3cpIHsKCQlleHRyYWN0KCRyb3cpOwoJCSRyZXMgPSAkcmVz ICYmIHNhZmVfdXBkYXRlKEFESV9UQUJMRSwidmlzaWJsZT0wIiwibmFtZT0nIi4kbmFtZS4i JyIsJGRlYnVnKTsKCX0KCS8vIHNldCB2aXNpYmlsaXR5IHRvIG5ldyB2YWx1ZXMKCS8vIGlm IGF0dGVtcHQgdG8gc3dpdGNoIGFsbCBvZmYsIG5vdGhpbmcgaXMgYWN0dWFsbHkgY2hhbmdl ZCAoYmVjYXVzZSAkdmlzaWJpbGl0eSBhcnJheSBpcyBlbXB0eSkKCWZvcmVhY2ggKCR2aXNp YmlsaXR5IGFzICRyb3cgPT4gJHZpc2libGUpIHsKCQkkcm93ID0gc3RyaXBzbGFzaGVzKCRy b3cpOwoJCSRyZXMgPSAkcmVzICYmIHNhZmVfdXBkYXRlKEFESV9UQUJMRSwidmlzaWJsZT0k dmlzaWJsZSIsIm5hbWU9Ii4kcm93LCRkZWJ1Zyk7Cgl9CglyZXR1cm4gJHJlczsKfQoKZnVu Y3Rpb24gYWRpX25vdGVzX3RpdGxlKCRoZWxwKSB7Ci8vIGFkbWluIHRpdGxlIGF0dHJpYnV0 ZXMKCWdsb2JhbCAkYWRtaW5fc3R5bGU7CgkkYXR0cyA9ICcnOwoJaWYgKCRoZWxwKSB7CgkJ JGF0dHMgLj0gJyB0aXRsZT0iJy4kaGVscC4nIic7CgkJJGF0dHMgLj0gJyBzdHlsZT0iJy4k YWRtaW5fc3R5bGVbJ3RpdGxlJ10uJyInOwoJfQoJcmV0dXJuICRhdHRzOwp9CgpmdW5jdGlv biBhZGlfbm90ZXNfcmVhZCgkbm90ZV9uYW1lLCR0eXBlLCRub3RlX2lkLCR1c2VyKSB7Ci8v IHJlYWQgc3BlY2lmaWVkIG5vdGUgZnJvbSBkYXRhYmFzZQoJZ2xvYmFsICRkZWJ1ZzsKCSR0 aGlzX25vdGUgPSBhcnJheSgpOwoJaWYgKGVtcHR5KCRub3RlX2lkKSkgeyAvLyBzZWxlY3Rp b24gb2Ygbm90ZSBiYXNlZCBvbiBjb250ZXh0CgkJJHdoZXJlID0gIm5hbWU9JyIuJG5vdGVf bmFtZS4iJyBBTkQgdHlwZT0nIi4kdHlwZS4iJyI7CgkJJHVzZXIgPwoJCQkkd2hlcmUgLj0g IiBBTkQgdXNlcj0nIi4kdXNlci4iJyIgOgoJCQkkd2hlcmUgLj0gIiBBTkQgdXNlcj0nJyI7 CgkJJHRoaXNfbm90ZSA9IHNhZmVfcm93KCIqIixBRElfVEFCTEUsJHdoZXJlLCRkZWJ1Zyk7 Cgl9CgllbHNlIC8vIHNwZWNpZmljIG5vdGUgaWQgc3VwcGxpZWQKCQkkdGhpc19ub3RlID0g c2FmZV9yb3coIioiLEFESV9UQUJMRSwiaWQ9JyIuJG5vdGVfaWQuIiciLCRkZWJ1Zyk7Cglp ZiAoJHRoaXNfbm90ZSkgewoJCWV4dHJhY3QoJHRoaXNfbm90ZSk7CgkJJHRleHRpbGUgPSBu ZXcgVGV4dGlsZTsKCQkkdGhpc19ub3RlWyd0ZXh0aWxlZCddID0gJHRleHRpbGUtPlRleHRp bGVUaGlzKCR0aGlzX25vdGVbJ25vdGUnXSk7Cgl9CglyZXR1cm4gJHRoaXNfbm90ZTsKfQoK ZnVuY3Rpb24gYWRpX25vdGVzX3RhYigkZXZlbnQsJHN0ZXApIHsKLy8gZGlzcGxheSBub3Rl cyB0YWIKCWdsb2JhbCAkYWRpX25vdGVzX2xpc3QsJGRlYnVnLCRub3RlX3N0eWxlLCRjdXJy ZW50X3N0eWxlLCRhZG1pbl91c2VyLCRvbGRfdmVyc2lvbiwkYWRpX25vdGVzX3RhYl91cGdy YWRlX21zZywkYWRtaW5fc3R5bGU7CgkkZGVidWcgPSBhZGlfbm90ZXNfcHJlZnMoJ2RlYnVn Jyk7Cgkkbm90ZV9zdHlsZVskY3VycmVudF9zdHlsZV0gPwoJCSRzdHlsZSA9ICcgc3R5bGU9 IicuJG5vdGVfc3R5bGVbJGN1cnJlbnRfc3R5bGVdLiciJyA6CgkJJHN0eWxlID0gJyc7Cglp ZiAoYWRpX25vdGVzX3VwZ3JhZGUoKSkgeyAvLyB1cGdyYWRlIHJlcXVpcmVkCgkJcGFnZXRv cCgnYWRpX25vdGVzJywnYWRpX25vdGVzOiB1cGdyYWRlIHJlcXVpcmVkJyk7CgkJZWNobyAn PHA+Jy4kYWRpX25vdGVzX3RhYl91cGdyYWRlX21zZy4nPC9wPic7Cgl9CgllbHNlIHsKCQkk YWRpX25vdGVzX3N0ZXAgPSBncHMoJ2FkaV9ub3Rlc19zdGVwJyk7CgkJJGFkaV9ub3Rlc19p ZCA9IGdwcygnYWRpX25vdGVzX2lkJyk7CgkJJGFkaV9ub3Rlc191c2VyID0gZ3BzKCdhZGlf bm90ZXNfdXNlcicpOwoJCSRhZGlfbm90ZXNfbm90ZSA9IGRvU2xhc2goZ3BzKCdhZGlfbm90 ZXNfbm90ZScpKTsKCQkkbm90ZV9uYW1lID0gc3Vic3RyKCRldmVudCxzdHJsZW4oImFkaV9u b3Rlc190YWJfIikpOyAvLyBzdHJpcCAiYWRpX25vdGVzX3RhYl8iIGZyb20gZXZlbnQgbmFt ZQoJCXBhZ2V0b3AoJ2FkaV9ub3RlczogJy4kYWRpX25vdGVzX2xpc3RbJG5vdGVfbmFtZV1b J3RpdGxlJ10uIiBOb3RlcyIpOwoJCWlmICgkZGVidWcpIHByaW50ICc8cD4nLl9fRlVOQ1RJ T05fXy4iOiBldmVudD0kZXZlbnQsYWRpX25vdGVzX3N0ZXA9JGFkaV9ub3Rlc19zdGVwLG5v dGVfbmFtZT0kbm90ZV9uYW1lLGFkaV9ub3Rlc19pZD0kYWRpX25vdGVzX2lkLGFkaV9ub3Rl c191c2VyPSRhZGlfbm90ZXNfdXNlcjwvcD4iOwoJCWVjaG8gJzxkaXYgaWQ9ImFkaV9ub3Rl cyInLiRzdHlsZS4nPic7CgkJaWYgKCRhZGlfbm90ZXNfc3RlcCA9PSAnZWRpdCcpCgkJCWVj aG8gYWRpX25vdGVzX2VkaXRfZm9ybSgkbm90ZV9uYW1lLCd0YWInLCRhZGlfbm90ZXNfaWQs JycpOwoJCWVsc2UgaWYgKCRhZGlfbm90ZXNfc3RlcCA9PSAnc2F2ZScpCgkJCWFkaV9ub3Rl c19zYXZlKCRub3RlX25hbWUsJ3RhYicsJGFkaV9ub3Rlc19pZCwnJywkYWRpX25vdGVzX25v dGUpOwoJCWlmICghKCRhZGlfbm90ZXNfc3RlcCA9PSAnZWRpdCcpKSB7CgkJCSR0aGlzX25v dGUgPSBhZGlfbm90ZXNfcmVhZCgkbm90ZV9uYW1lLCd0YWInLCRhZGlfbm90ZXNfaWQsJycp OwoJCQlpZiAoZW1wdHkoJHRoaXNfbm90ZVsnbm90ZSddKSkKCQkJCSRsaW5rdGV4dCA9ICdB ZGQgbm90ZSc7CgkJCWVsc2UgewoJCQkJZWNobyAkdGhpc19ub3RlWyd0ZXh0aWxlZCddOwoJ CQkJJGxpbmt0ZXh0ID0gZ1R4dCgnZWRpdCcpOwoJCQl9CgkJfQoJCWVjaG8gJzwvZGl2Pic7 CgkJaWYgKCRhZG1pbl91c2VyICYmICEoJGFkaV9ub3Rlc19zdGVwID09ICdlZGl0JykpIC8v IGRpc3BsYXkgZWRpdCBsaW5rIHRvIG5vdGVzIGFkbWluCgkJCWVjaG8gJzxwIHN0eWxlPSIn LiRhZG1pbl9zdHlsZVsndGFiX2xpbmsnXS4nIj5bJy5zbGluaygkZXZlbnQsJyZhbXA7YWRp X25vdGVzX3N0ZXA9ZWRpdCcuJyZhbXA7YWRpX25vdGVzX2lkPScuJHRoaXNfbm90ZVsnaWQn XS4nJmFtcDthZGlfbm90ZXNfdXNlcj0nLicjJy5BRElfTk9URVNfRlJBR01FTlQsJGxpbmt0 ZXh0LCdzbWFsbCcpLiddPC9wPic7Cgl9Cn0KCmZ1bmN0aW9uIGFkaV9ub3Rlc19lZGl0X2Zv cm0oJG5vdGVfbmFtZSwkdHlwZSwkYWRpX25vdGVzX2lkLCRhZGlfbm90ZXNfdXNlcikgewov LyBkaXNwbGF5IGluZGl2aWR1YWwgbm90ZSBlZGl0IGZvcm0KCWdsb2JhbCAkZXZlbnQsJHN0 ZXAsJHR4cF91c2VyLCRhZGlfbm90ZXNfbGlzdCwkYWRpX25vdGVzX3N0ZXAsJHRpbWVvZmZz ZXQsJGRlYnVnOwoJJGFydGljbGVfaWQgPSBncHMoJ0lEJyk7IC8vIGlmIElEIHNldCB0aGVu IG11c3QgYmUgaW4gZWRpdCBzY3JlZW4KCWlmICgkYWRpX25vdGVzX2lkKSB7IC8vIHJlYWQg bm90ZSBmcm9tIGRhdGFiYXNlCgkJJHRoaXNfbm90ZSA9IHNhZmVfcm93KCIqIixBRElfVEFC TEUsImlkPSciLiRhZGlfbm90ZXNfaWQuIiciLCRkZWJ1Zyk7CgkJZXh0cmFjdCgkdGhpc19u b3RlKTsKCQkkcmVhbG5hbWUgPSBmZXRjaCgnUmVhbE5hbWUnLCd0eHBfdXNlcnMnLCduYW1l JywkbGFzdF9tb2RfdXNlcik7CgkJJG1vZF9tc2cgPSBnVHh0KCdtb2RpZmllZF9ieScpLiIg JHJlYWxuYW1lOiAiLmRhdGUoIkg6aSwgZCBNIFkiLHN0cnRvdGltZSgkbGFzdF9tb2QpICsg JHRpbWVvZmZzZXQpOwoJfQoJaWYgKGVtcHR5KCRub3RlKSkgLy8gZG9uJ3QgZGlzcGxheSBt b2RpZmllZCBpbmZvIGlmIGVtcHR5IG5vdGUgKGVtcHR5ID0gImRlbGV0ZWQiKQoJCSRtb2Rf bXNnID0gJyc7CglpZiAoJGFkaV9ub3Rlc191c2VyKSB7CgkJJHN1Ym1pdF9idXR0b24gPSAn U2F2ZSAnLiRhZGlfbm90ZXNfbGlzdFskbm90ZV9uYW1lXVsndGl0bGUnXS4nIG5vdGUgKHBy aXZhdGUpJzsKCQkkYWRpX25vdGVzX3N0ZXAgPSAnc2F2ZV91c2VyJzsKCX0KCWVsc2UgewoJ CSRzdWJtaXRfYnV0dG9uID0gJ1NhdmUgJy4kYWRpX25vdGVzX2xpc3RbJG5vdGVfbmFtZV1b J3RpdGxlJ10uJyBub3RlIChwdWJsaWMpJzsKCQkkYWRpX25vdGVzX3N0ZXAgPSAnc2F2ZSc7 Cgl9CglpZiAoJGRlYnVnKSAkb3V0W10gPSAnPHA+Jy5fX0ZVTkNUSU9OX18uIjogZXZlbnQ9 JGV2ZW50LGFkaV9ub3Rlc19zdGVwPSRhZGlfbm90ZXNfc3RlcCxub3RlX25hbWU9JG5vdGVf bmFtZSxhZGlfbm90ZXNfaWQ9JGFkaV9ub3Rlc19pZCxhZGlfbm90ZXNfdXNlcj0kYWRpX25v dGVzX3VzZXIsdHhwX3VzZXI9JHR4cF91c2VyPC9wPiI7Cglzd2l0Y2ggKCR0eXBlKSB7CgkJ Y2FzZSAndGFiJzoJJGhlaWdodCA9IDUwOyBicmVhazsKCQljYXNlICdlbWJlZCc6ICRoZWln aHQgPSAyNTsgYnJlYWs7CgkJY2FzZSAndGlwJzogJGhlaWdodCA9IDM7IGJyZWFrOyAvLyBu b3QgYWN0dWFsbHkgdXNlZCAodGlwcyBtYWtlIHRoZWlyIG93biBhZGlfbm90ZXNfdGV4dGFy ZWEgY2FsbHMpCgkJZGVmYXVsdDogJGhlaWdodCA9IDI1OyBicmVhazsKCX0KCSRvdXRbXSA9 CgkJYWRpX25vdGVzX3RleHRhcmVhKCRoZWlnaHQsJG5vdGUsJ2FkaV9ub3Rlc19ub3RlJyku CgkJZ3JhZigKCQkJZklucHV0KCdzdWJtaXQnLCdzYXZlbm90ZScsJHN1Ym1pdF9idXR0b24s J3B1Ymxpc2gnKS4KCQkJZUlucHV0KCRldmVudCkuCgkJCXNJbnB1dCgkc3RlcCkuCgkJCSgk YXJ0aWNsZV9pZCA/IGhJbnB1dCgnSUQnLCRhcnRpY2xlX2lkKSA6ICcnKS4gLy8gcGFzcyBv biBlZGl0IHNjcmVlbiBhcnRpY2xlIElECgkJCWhJbnB1dCgnYWRpX25vdGVzX3N0ZXAnLCRh ZGlfbm90ZXNfc3RlcCkuCgkJCWhJbnB1dCgnYWRpX25vdGVzX2lkJywkYWRpX25vdGVzX2lk KS4KCQkJaElucHV0KCdhZGlfbm90ZXNfdXNlcicsJHR4cF91c2VyKS4KCQkJJG1vZF9tc2cK CQkpOwoJcmV0dXJuIGZvcm0oam9pbignJywkb3V0KSwnJywnJywncG9zdCcsJycsQURJX05P VEVTX0ZSQUdNRU5UKTsKfQoKZnVuY3Rpb24gYWRpX25vdGVzX3NhdmUoJG5vdGVfbmFtZSwk dHlwZSwkbm90ZV9pZCwkdXNlciwkbm90ZSkgewovLyBzYXZlIG5vdGUgdG8gZGF0YWJhc2UK CWdsb2JhbCAkZXZlbnQsJHR4cF91c2VyLCRkZWJ1ZzsKCWVtcHR5KCRub3RlX2lkKSA/IC8v IG5ldyBub3RlCgkJJG5vdGVfaWQgPSAiREVGQVVMVCIgOgoJCSRub3RlX2lkID0gIiciLiRu b3RlX2lkLiInIjsKCWVtcHR5KCR1c2VyKSA/IC8vIGJsYW5rIHVzZXIgPSBwdWJsaWMgbm90 ZQoJCSR1c2VyID0gIkRFRkFVTFQiIDoKCQkkdXNlciA9ICInIi4kdXNlci4iJyI7CglzYWZl X3F1ZXJ5KAoJCSJSRVBMQUNFIElOVE8gIi4KCQlzYWZlX3BmeChBRElfVEFCTEUpLgoJCSIg VkFMVUVTICgkbm90ZV9pZCwnJG5vdGVfbmFtZScsJyR0eXBlJywkdXNlcixERUZBVUxULCcx Jyxub3coKSwnJHR4cF91c2VyJywnJG5vdGUnKSIsJGRlYnVnCgkJKTsKfQoKZnVuY3Rpb24g YWRpX25vdGVzX3RleHRhcmVhKCRoLCRjb250ZW50LCRuYW1lKSB7Ci8vIGRpc3BsYXkgPHRl eHRhcmVhPiBmb3IgZWRpdGluZyBub3RlCglnbG9iYWwgJGFkbWluX3N0eWxlOwoJcmV0dXJu ICc8dGV4dGFyZWEgbmFtZT0iJy4kbmFtZS4nIiBzdHlsZT0iJy4kYWRtaW5fc3R5bGVbJ3Rl eHRhcmVhJ10uJ2hlaWdodDonLiRoLidlbTsiPicuaHRtbHNwZWNpYWxjaGFycygkY29udGVu dCkuJzwvdGV4dGFyZWE+JzsKfQoKZnVuY3Rpb24gYWRpX25vdGVzX3dobygkd2hlcmUpIHsK Ly8gcmV0dXJuIHRoZSBlbWJlZGRlZCBub3RlIG5hbWUgZnJvbSBzdXBwbGllZCAnd2hlcmUn IGV2ZW50CglnbG9iYWwgJGFkaV9ub3Rlc19saXN0OwoJZm9yZWFjaCAoJGFkaV9ub3Rlc19s aXN0IGFzICRuYW1lID0+ICRpbmZvKQoJCWlmICgkaW5mb1sndHlwZSddID09ICdlbWJlZCcp CgkJCWlmICgkaW5mb1snd2hlcmUnXSA9PSAkd2hlcmUpCgkJCQlyZXR1cm4gJG5hbWU7Cgly ZXR1cm4gJyc7Cn0KCmZ1bmN0aW9uIGFkaV9ub3Rlc19lbWJlZF9ub3RlKCkgewovLyB0aGUg bWFnaWMgdGhhdCBnZXRzIGFkaV9ub3RlcyBpbnRvIHRoZSBwYWdlCglnbG9iYWwgJGRlYnVn OwoJJGRlYnVnID0gYWRpX25vdGVzX3ByZWZzKCdkZWJ1ZycpOwoJaWYgKGFkaV9ub3Rlc19p bnN0YWxsZWQoQURJX1RBQkxFKSkKCQlvYl9zdGFydCgnYWRpX25vdGVzX2luamVjdCcpOwp9 CgpmdW5jdGlvbiBhZGlfbm90ZXNfaW5qZWN0KCRidWZmZXIpIHsKLy8gbW9yZSBtYWdpYyB0 aGF0IGdldHMgYWRpX25vdGVzIGludG8gdGhlIHBhZ2UKCWdsb2JhbCAkREIsJGRlYnVnOwoJ aWYoIWlzc2V0KCREQikpCgkJJERCID0gbmV3IGRiOwoJJHBhdHRlcm4gPSAnIzxkaXYgaWQ9 ImVuZF9wYWdlIj4jc1UnOwoJJGluc2VydCA9ICdhZGlfbm90ZXNfZm9vdG5vdGUnOwoJJGJ1 ZmZlciA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygkcGF0dGVybiwgJGluc2VydCwgJGJ1ZmZl cik7CglyZXR1cm4gJGJ1ZmZlcjsKfQoKZnVuY3Rpb24gYWRpX25vdGVzX2Zvb3Rub3RlKCkg ewovLyBnZW5lcmF0ZSBtYXJrdXAgZm9yIG5vdGVzCglnbG9iYWwgJGFkaV9ub3Rlc19saXN0 LCRldmVudCwkc3RlcCwkdHhwX3VzZXIsJGRlYnVnLCRsaW5rcywkbm90ZV9zdHlsZSwkY3Vy cmVudF9zdHlsZSwkYWRtaW5fdXNlciwkdHhwNDA5LCRhZG1pbl9zdHlsZTsKCSRhZGlfbm90 ZXNfc3RlcCA9IGdwcygnYWRpX25vdGVzX3N0ZXAnKTsKCSRhZGlfbm90ZXNfaWQgPSBncHMo J2FkaV9ub3Rlc19pZCcpOwoJJGFkaV9ub3Rlc19ub3RlID0gZG9TbGFzaChncHMoJ2FkaV9u b3Rlc19ub3RlJykpOwoJJGFydGljbGVfaWQgPSBncHMoJ0lEJyk7CgkkYXJ0aWNsZV9pZCA/ ICRhcnRpY2xlX2lkID0gJyZhbXA7SUQ9Jy4kYXJ0aWNsZV9pZCA6ICcnOyAvLyBpZiBJRCBz ZXQgdGhlbiBtdXN0IGJlIGluIGVkaXQgc2NyZWVuCgkkbGlua3MgPSAnJzsKCSRub3RlX3N0 eWxlWyRjdXJyZW50X3N0eWxlXSA/CgkJJHN0eWxlID0gJyBzdHlsZT0iJy4kbm90ZV9zdHls ZVskY3VycmVudF9zdHlsZV0uJyInIDoKCQkkc3R5bGUgPSAnJzsKCSRwcmVhbWJsZSA9ICc8 ZGl2IGlkPSJhZGlfbm90ZXMiJy4kc3R5bGUuJz4nOwoJJHBvc3RhbWJsZSA9ICc8L2Rpdj4n OwoJJG5vdGVfbmFtZSA9IGFkaV9ub3Rlc193aG8oJGV2ZW50KTsgLy8gd29yayBvdXQgdGhl IG5vdGUgbmFtZSBmcm9tIHRoZSBldmVudAoJJGFkbWluX25vdGUgPSAkZWRpdF9ub3RlID0g Jyc7CglpZiAoJGRlYnVnKSAkcHJlYW1ibGUgLj0gJzxwPicuX19GVU5DVElPTl9fLiI6IGV2 ZW50PSRldmVudCxzdGVwPSRzdGVwLGFkaV9ub3Rlc19zdGVwPSRhZGlfbm90ZXNfc3RlcCx0 aGlzX25vdGU9JHRoaXNfbm90ZSxub3RlX25hbWU9JG5vdGVfbmFtZTwvcD4iOwoJaWYgKCRh ZGlfbm90ZXNfc3RlcCA9PSAnZWRpdCcpCgkJJGVkaXRfbm90ZSA9IGFkaV9ub3Rlc19lZGl0 X2Zvcm0oJG5vdGVfbmFtZSwnZW1iZWQnLCRhZGlfbm90ZXNfaWQsJycpOwoJZWxzZSBpZiAo JGFkaV9ub3Rlc19zdGVwID09ICdzYXZlJykKCQlhZGlfbm90ZXNfc2F2ZSgkbm90ZV9uYW1l LCdlbWJlZCcsJGFkaV9ub3Rlc19pZCwnJywkYWRpX25vdGVzX25vdGUpOwoJaWYgKCEoJGFk aV9ub3Rlc19zdGVwID09ICdlZGl0JykpIHsKCQkkdGhpc19ub3RlID0gYWRpX25vdGVzX3Jl YWQoJG5vdGVfbmFtZSwnZW1iZWQnLCcnLCcnKTsKCQkkYWRtaW5fbm90ZSAuPSAkdGhpc19u b3RlWyd0ZXh0aWxlZCddOwoJCSRhZGlfbm90ZXNfaWQgPSAkdGhpc19ub3RlWydpZCddOwoJ CWlmICgkYWRtaW5fbm90ZSkKCQkJJGxpbmtfdGV4dCA9ICdFZGl0IHB1YmxpYyBub3RlJzsK CQllbHNlCgkJCSRsaW5rX3RleHQgPSAnQWRkIHB1YmxpYyBub3RlJzsKCQlpZiAoJGFkbWlu X3VzZXIpCgkJCSRsaW5rcyA9ICdbJy5zbGluaygkZXZlbnQsJHN0ZXAuJGFydGljbGVfaWQu JyZhbXA7YWRpX25vdGVzX3N0ZXA9ZWRpdCcuJyZhbXA7YWRpX25vdGVzX2lkPScuJGFkaV9u b3Rlc19pZC4nIycuQURJX05PVEVTX0ZSQUdNRU5ULCRsaW5rX3RleHQsJ3NtYWxsJykuJ10n OwoJfQoJJHVzZXJfbm90ZSA9IGFkaV9ub3Rlc191c2VyX25vdGUoKTsKCWlmICgoJGFkbWlu X25vdGUgfHwgJGVkaXRfbm90ZSkgJiYgJHVzZXJfbm90ZSkKCQkkaHIgPSAnPGhyIHN0eWxl PSInLiRhZG1pbl9zdHlsZVsnaHInXS4nIi8+JzsKCWVsc2UKCQkkaHIgPScnOwoJaWYgKCRh ZG1pbl9ub3RlIHx8ICRlZGl0X25vdGUgfHwgJHVzZXJfbm90ZSkKCQkkb3V0IC49ICRwcmVh bWJsZS4kYWRtaW5fbm90ZS4kZWRpdF9ub3RlLiRoci4kdXNlcl9ub3RlLiRwb3N0YW1ibGU7 CglpZiAoJHR4cDQwOSkKCQkkb3V0IC49IGFkaV9ub3Rlc19lZGl0X3RpcHMoJGV2ZW50KTsK CSRvdXQgLj0gJzxkaXYgaWQ9ImVuZF9wYWdlIj4nOwoJJG91dCAuPSAnPHA+Jy4kbGlua3Mu JzwvcD4nOwoJcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIGFkaV9ub3Rlc191c2VyX25vdGUo KSB7Ci8vIGRpc3BsYXkgcHJpdmF0ZSB1c2VyIG5vdGUKCWdsb2JhbCAkZXZlbnQsJHN0ZXAs JHR4cF91c2VyLCRkZWJ1ZywkbGlua3M7CgkkYWRpX25vdGVzX3N0ZXAgPSBncHMoJ2FkaV9u b3Rlc19zdGVwJyk7CgkkYWRpX25vdGVzX2lkID0gZ3BzKCdhZGlfbm90ZXNfaWQnKTsKCSRh ZGlfbm90ZXNfdXNlciA9IGdwcygnYWRpX25vdGVzX3VzZXInKTsKCSRhZGlfbm90ZXNfbm90 ZSA9IGRvU2xhc2goZ3BzKCdhZGlfbm90ZXNfbm90ZScpKTsKCSRhcnRpY2xlX2lkID0gZ3Bz KCdJRCcpOwoJJGFydGljbGVfaWQgPyAkYXJ0aWNsZV9pZCA9ICcmYW1wO0lEPScuJGFydGlj bGVfaWQgOiAnJzsgLy8gaWYgSUQgc2V0IHRoZW4gbXVzdCBiZSBpbiBlZGl0IHNjcmVlbgoJ JG5vdGVfbmFtZSA9IGFkaV9ub3Rlc193aG8oJGV2ZW50KTsgLy8gd29yayBvdXQgdGhlIG5v dGUgbmFtZSBmcm9tIHRoZSBldmVudAoJJG91dCA9ICcnOwoJaWYgKCRkZWJ1ZykgJG91dCAu PSAnPHA+Jy5fX0ZVTkNUSU9OX18uIjogZXZlbnQ9JGV2ZW50LHN0ZXA9JHN0ZXAsYWRpX25v dGVzX3N0ZXA9JGFkaV9ub3Rlc19zdGVwLHRoaXNfbm90ZT0kdGhpc19ub3RlPC9wPiI7Cglp ZiAoJGRlYnVnKSAkb3V0IC49ICc8cD4nLl9fRlVOQ1RJT05fXy4iOiBpZD0kYWRpX25vdGVz X2lkLGFkaV9ub3Rlc191c2VyPSRhZGlfbm90ZXNfdXNlcjwvcD4iOwoJaWYgKCRhZGlfbm90 ZXNfc3RlcCA9PSAnZWRpdF91c2VyJykKCQkkb3V0IC49IGFkaV9ub3Rlc19lZGl0X2Zvcm0o JG5vdGVfbmFtZSwnZW1iZWQnLCRhZGlfbm90ZXNfaWQsJGFkaV9ub3Rlc191c2VyKTsKCWVs c2UgaWYgKCRhZGlfbm90ZXNfc3RlcCA9PSAnc2F2ZV91c2VyJykKCQlhZGlfbm90ZXNfc2F2 ZSgkbm90ZV9uYW1lLCdlbWJlZCcsJGFkaV9ub3Rlc19pZCwkYWRpX25vdGVzX3VzZXIsJGFk aV9ub3Rlc19ub3RlKTsKCWlmICghKCRhZGlfbm90ZXNfc3RlcCA9PSAnZWRpdF91c2VyJykp IHsKCQkkdGhpc19ub3RlID0gYWRpX25vdGVzX3JlYWQoJG5vdGVfbmFtZSwnZW1iZWQnLCcn LCR0eHBfdXNlcik7CgkJJHVzZXJfbm90ZSAuPSAkdGhpc19ub3RlWyd0ZXh0aWxlZCddOwoJ CSRhZGlfbm90ZXNfaWQgPSAkdGhpc19ub3RlWydpZCddOwoJCSRvdXQgLj0gJHVzZXJfbm90 ZTsKCQlpZiAoJHVzZXJfbm90ZSkgewoJCQkkbGlua190ZXh0ID0gJ0VkaXQgcHJpdmF0ZSBu b3RlJzsKCQkJJGFkaV9ub3Rlc191c2VyID0gJHRoaXNfbm90ZVsndXNlciddOwoJCX0KCQll bHNlIHsKCQkJJGxpbmtfdGV4dCA9ICdBZGQgcHJpdmF0ZSBub3RlJzsKCQkJJGFkaV9ub3Rl c191c2VyID0gJHR4cF91c2VyOwoJCX0KCQkkbGlua3MgLj0gJyBbJy5zbGluaygkZXZlbnQs JHN0ZXAuJGFydGljbGVfaWQuJyZhbXA7YWRpX25vdGVzX3N0ZXA9ZWRpdF91c2VyJy4nJmFt cDthZGlfbm90ZXNfaWQ9Jy4kYWRpX25vdGVzX2lkLicmYW1wO2FkaV9ub3Rlc191c2VyPScu JGFkaV9ub3Rlc191c2VyLicjJy5BRElfTk9URVNfRlJBR01FTlQsJGxpbmtfdGV4dCwnc21h bGwnKS4nXSc7Cgl9CglyZXR1cm4gJG91dDsKfQoKZnVuY3Rpb24gYWRpX25vdGVzX3JlYWRf dGlwKCRldmVudCwkc3RlcCwkZGVmYXVsdCkgewovLyBleGFtcGxlOiAkZXZlbnQgPSBhcnRp Y2xlX3VpLCAkc3RlcCA9IHVybF90aXRsZQoJJHRoaXNfbm90ZSA9IGFkaV9ub3Rlc19yZWFk KCRzdGVwLCd0aXAnLCcnLCcnKTsKCWlmICgkdGhpc19ub3RlKSB7CgkJJHRpcCA9IHRyaW0o c3RyaXBfdGFncygkdGhpc19ub3RlWyd0ZXh0aWxlZCddKSk7CgkJJG5ldyA9IHByZWdfcmVw bGFjZSgnL2xhYmVsLycsJ2xhYmVsIHRpdGxlPSInLiR0aXAuJyInLCAkZGVmYXVsdCk7CgkJ cmV0dXJuICRuZXc7Cgl9CgllbHNlCgkJcmV0dXJuICcnOwp9CgpmdW5jdGlvbiBhZGlfbm90 ZXNfZWRpdF90aXBzKCRldmVudCkgewoJZ2xvYmFsICRhZGlfbm90ZXNfbGlzdCwkbGlua3Ms JGRlYnVnLCRub3RlX3N0eWxlLCRjdXJyZW50X3N0eWxlLCRhZG1pbl91c2VyOwoJJGFkaV9u b3Rlc19pZCA9ICcnOy8vPz8/Pz8/Pz8KCSRhZGlfbm90ZXNfdXNlciA9ICcnOy8vPz8/Pz8/ Pz8KCSRhZGlfbm90ZXNfc3RlcCA9IGdwcygnYWRpX25vdGVzX3N0ZXAnKTsKCSRub3RlX3N0 eWxlWyRjdXJyZW50X3N0eWxlXSA/CgkJJHN0eWxlID0gJyBzdHlsZT0iJy4kbm90ZV9zdHls ZVskY3VycmVudF9zdHlsZV0uJyInIDoKCQkkc3R5bGUgPSAnJzsKCSRwcmVhbWJsZSA9ICc8 ZGl2IGlkPSJhZGlfbm90ZXNfdGlwcyInLiRzdHlsZS4nPic7CgkkcG9zdGFtYmxlID0gJzwv ZGl2Pic7CgkkbGlua190ZXh0ID0gJ0VkaXQgdGlwcyc7CgkkbW9kX21zZyA9ICcnOwoJJG91 dCA9ICcnOwoJaWYgKCRhZGlfbm90ZXNfc3RlcCA9PSAnZWRpdF90aXBzJykgewoJCWZvcmVh Y2ggKCRhZGlfbm90ZXNfbGlzdCBhcyAkbmFtZSA9PiAkaW5mbykgewoJCQlpZiAoJGluZm9b J3doZXJlJ10gPT0gJGV2ZW50LidfdWknKSB7CgkJCQkkdGhpc19ub3RlID0gYWRpX25vdGVz X3JlYWQoJG5hbWUsJ3RpcCcsJycsJycpOwoJCQkJJG91dCAuPSBhZGlfbm90ZXNfdGlwX2Vk aXRib3goJGV2ZW50LCRuYW1lLCR0aGlzX25vdGVbJ25vdGUnXSk7CgkJCQkkb3V0IC49IGhJ bnB1dCgnYWRpX25vdGVzX3RpcF9pZF8nLiRuYW1lLCR0aGlzX25vdGVbJ2lkJ10pOwoJCQkJ aWYgKCR0aGlzX25vdGVbJ2lkJ10pIHsKCQkJCQkkcmVhbG5hbWUgPSBmZXRjaCgnUmVhbE5h bWUnLCd0eHBfdXNlcnMnLCduYW1lJywkdGhpc19ub3RlWydsYXN0X21vZF91c2VyJ10pOwoJ CQkJCSRtb2RfbXNnID0gZ1R4dCgnbW9kaWZpZWRfYnknKS4iICRyZWFsbmFtZTogIi5kYXRl KCJIOmksIGQgTSBZIixzdHJ0b3RpbWUoJHRoaXNfbm90ZVsnbGFzdF9tb2QnXSkgKyAkdGlt ZW9mZnNldCk7CgkJCQl9CgkJCX0KCQl9CgkJJHN1Ym1pdF9idXR0b24gPSAnU2F2ZSAnLiRh ZGlfbm90ZXNfbGlzdFskZXZlbnRdWyd0aXRsZSddLicgdGlwcyc7CgkJJG91dCAuPSBncmFm KAoJCQlmSW5wdXQoJ3N1Ym1pdCcsJ3NhdmV0aXAnLCRzdWJtaXRfYnV0dG9uLCdwdWJsaXNo JykuCgkJCWVJbnB1dCgkZXZlbnQpLgoJCQloSW5wdXQoJ2FkaV9ub3Rlc19zdGVwJywnc2F2 ZV90aXBzJykuCgkJCSRtb2RfbXNnCgkJKTsKCQkkb3V0ID0gZm9ybSgkb3V0KTsKCX0KCWVs c2UgaWYgKCRhZGlfbm90ZXNfc3RlcCA9PSAnc2F2ZV90aXBzJykgewoJCWZvcmVhY2ggKCRh ZGlfbm90ZXNfbGlzdCBhcyAkbmFtZSA9PiAkaW5mbykgewoJCQlpZiAoJGluZm9bJ3doZXJl J10gPT0gJGV2ZW50LidfdWknKSB7CgkJCQkvLyBuYW1lID0gYWRpX25vdGVzX3RpcF91cmxf dGl0bGUsIGlkID0gYWRpX25vdGVzX3RpcF9pZF91cmxfdGl0bGUKCQkJCWlmICgkZGVidWcp IHsKCQkJCQkkb3V0IC49ICdhZGlfbm90ZXNfdGlwXycuJG5hbWUuJz0nLmdwcygnYWRpX25v dGVzX3RpcF8nLiRuYW1lKS4nPGJyLz4nOwoJCQkJCSRvdXQgLj0gJ2FkaV9ub3Rlc190aXBf aWRfJy4kbmFtZS4nPScuZ3BzKCdhZGlfbm90ZXNfdGlwX2lkXycuJG5hbWUpLic8YnIvPic7 CgkJCQl9CgkJCQkkYWRpX25vdGVzX25vdGUgPSBncHMoJ2FkaV9ub3Rlc190aXBfJy4kbmFt ZSk7CgkJCQkkbm90ZV9pZCA9IGdwcygnYWRpX25vdGVzX3RpcF9pZF8nLiRuYW1lKTsKCQkJ CWFkaV9ub3Rlc19zYXZlKCRuYW1lLCd0aXAnLCRub3RlX2lkLCcnLCRhZGlfbm90ZXNfbm90 ZSk7CgkJCX0KCQl9Cgl9CglpZiAoISgkYWRpX25vdGVzX3N0ZXAgPT0gJ2VkaXRfdGlwcycp KSB7CgkJZm9yZWFjaCAoJGFkaV9ub3Rlc19saXN0IGFzICRuYW1lID0+ICRpbmZvKQoJCQlp ZiAoJGluZm9bJ3doZXJlJ10gPT0gJGV2ZW50LidfdWknKSAkdGlwc19mb3VuZCA9IFRSVUU7 CgkJaWYgKCR0aXBzX2ZvdW5kICYmICRhZG1pbl91c2VyKSAvLyBvbmx5ICdhZG1pbicgY2Fu IGVkaXQgdGhlIHRpcHMKCQkJJGxpbmtzIC49ICcgWycuc2xpbmsoJGV2ZW50LCRzdGVwLicm YW1wO2FkaV9ub3Rlc19zdGVwPWVkaXRfdGlwcycuJyMnLkFESV9USVBTX0ZSQUdNRU5ULCRs aW5rX3RleHQsJ3NtYWxsJykuJ10nOwoJfQoJaWYgKCRvdXQpIC8vIHdyYXAgaXQgdXAKCQkk b3V0ID0gJHByZWFtYmxlLiRvdXQuJHBvc3RhbWJsZTsKCXJldHVybiAkb3V0Owp9CgpmdW5j dGlvbiBhZGlfbm90ZXNfdGlwX2VkaXRib3goJGV2ZW50LCRuYW1lLCRub3RlKSB7Ci8vIGdl bmVyYXRlIGVkaXQgYm94IGZvciBzcGVjaWZpZWQgdGlwCglnbG9iYWwgJGFkbWluX3N0eWxl OwoJJG91dCA9ICc8cCBzdHlsZT0iJy4kYWRtaW5fc3R5bGVbJ3RpcF9uYW1lJ10uJyI+Jy5h ZGlfbm90ZXNfZ1R4dCgkbmFtZSkuJzwvcD4nOwoJJG91dCAuPSBhZGlfbm90ZXNfdGV4dGFy ZWEoMywkbm90ZSwnYWRpX25vdGVzX3RpcF8nLiRuYW1lKTsgLy8gTkFNRSA9IGFkaV9ub3Rl c190aXBfdXJsX3RpdGxlIGV0YwoJcmV0dXJuICRvdXQ7Cn0KCmZ1bmN0aW9uIGFkaV9ub3Rl c19nVHh0KCR0ZXh0KSB7Ci8vIG91dHB1dCBsYW5ndWFnZSBzdHJpbmcgKHVzZSAkYWRpX25v dGVzX2d0eHQgbWFwcGluZyBpZiByZXF1aXJlZCkKCWdsb2JhbCAkYWRpX25vdGVzX2d0eHQ7 CgkkZ3R4dCA9IGdUeHQoJHRleHQpOwoJaWYgKCRndHh0ID09ICR0ZXh0KQoJCWlmIChhcnJh eV9rZXlfZXhpc3RzKCR0ZXh0LCRhZGlfbm90ZXNfZ3R4dCkpCgkJCXJldHVybiBnVHh0KCRh ZGlfbm90ZXNfZ3R4dFskdGV4dF0pOwoJCWVsc2UKCQkJcmV0dXJuICR0ZXh0LichJzsKCWVs c2UKCQlyZXR1cm4gJGd0eHQ7Cn0KIjtzOjg6ImhlbHBfcmF3IjtzOjM2NzI6ImgxLiAqYWRp X25vdGVzKiAtIExlYXZlIG5vdGVzIGZvciBUZXh0cGF0dGVybiB1c2VycwoKVGhpcyBwbHVn aW4gcHJvdmlkZXM6CgoqIGEgdGFiIHVuZGVyIEV4dGVuc2lvbnMsIHRvIHNldCB1cCAqYWRp X25vdGVzKgoqIG5ldyB0YWJzIHVuZGVyIENvbnRlbnQsIFByZXNlbnRhdGlvbiBhbmQgQWRt aW4gdG8gcHJlc2VudCB5b3VyIHBlYXJscyBvZiB3aXNkb20KKiBwdWJsaWMgJiBwcml2YXRl IGZvb3Rub3RlcyBpbiBhbGwgc3RhbmRhcmQgVGV4dHBhdHRlcm4gYWRtaW4gcGFnZXMKCmgy LiAqSW5zdGFsbGF0aW9uKgoKX19JbnN0YWxsYXRpb24gb2YgKmFkaV9ub3RlcyogYWRkcyBh IG5ldyB0YWJsZSB0byB5b3VyIFRleHRwYXR0ZXJuIGRhdGFiYXNlIHdoaWNoIHNob3VsZCBu b3QgaW50ZXJmZXJlIHdpdGggYW55dGhpbmcgZWxzZS4gVGhhdCBzYWlkLCBpZiB5b3UgYXJl IG9mIGEgY2F1dGlvdXMgZnJhbWUgb2YgbWluZCB0aGVuIEkgY2FuIHRob3JvdWdobHkgcmVj b21tZW5kICJyc3NfYWRtaW5fZGJfbWFuYWdlciI6aHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJu LmNvbS92aWV3dG9waWMucGhwP2lkPTEwMzk1IHRvIGRvIGRhdGFiYXNlIGJhY2t1cHMgYmVm b3JlIGluc3RhbGxhdGlvbi5fXwoKT25jZSB0aGUgcGx1Z2luIGlzIGluc3RhbGxlZCBhbmQg YWN0aXZhdGVkLCBnbyB0byB0aGUgKmFkaV9ub3RlcyogdGFiIHVuZGVyIEV4dGVuc2lvbnMs IHNlbGVjdCAiSW5zdGFsbCIgYW5kIGNsaWNrIHRoZSAiRG8gYWRtaW4iIGJ1dHRvbi4KCmgz LiAqVXBncmFkaW5nIGZyb20gYSBwcmUtMS4wIHZlcnNpb24gb2YgYWRpX25vdGVzKgoKRHVl IHRvIGEgY2hhbmdlIGluIHRoZSAqYWRpX25vdGVzKiBkYXRhYmFzZSB0YWJsZSBzdHJ1Y3R1 cmUsIHdoZW4geW91IHVwZ3JhZGUgZnJvbSBhbiBlYXJseSB2ZXJzaW9uIG9mICphZGlfbm90 ZXMqIHlvdSB3aWxsIGJlIHByb21wdGVkIHRvIHBlcmZvcm0gYW4gIlVwZ3JhZGUiIGluIHRo ZSAqYWRpX25vdGVzKiBhZG1pbiB0YWIuCgpBbHRob3VnaCBhIGJhY2t1cCBvZiB5b3VyIG5v dGVzIHdpbGwgYmUgbWFkZSBkdXJpbmcgdGhlIHVwZ3JhZGUgcHJvY2VzcyBpdCBpcyByZWNv bW1lbmRlZCB0aGF0IHlvdSBtYWtlIGFuIGluZGVwZW5kZW50IGNvcHkuCgpPbmNlIHlvdSBh cmUgaGFwcHkgd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgKmFkaV9ub3RlcyosIHlvdSBjYW4g ZGVsZXRlIHRoZSBiYWNrdXAgYnkgc2VsZWN0aW5nIHRoZSAiQ2xlYW51cCIgb3B0aW9uIGlu IHRoZSAqYWRpX25vdGVzKiBhZG1pbiB0YWIuCgpoMi4gKmFkaV9ub3RlcyBhZG1pbiB0YWIq CgpVc2VycyB3aXRoIHN1ZmZpY2llbnQgcHJpdmlsZWdlcyB3aWxsIHNlZSB0aGUgKmFkaV9u b3RlcyogYWRtaW4gdGFiLCB1bmRlciBFeHRlbnNpb25zLiAgVGhpcyBwcm92aWRlcyBmdW5j dGlvbmFsaXR5IHRvOgoKKiBJbnN0YWxsCiogVW5pbnN0YWxsCiogU3dpdGNoIG5vdGUgdGFi IHZpc2liaWxpdHkgb24vb2ZmCiogVXBncmFkZSBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiBv ZiAqYWRpX25vdGVzKgoqIERlbGV0ZSBvbGQgYmFja3VwcyB0YWtlbiBkdXJpbmcgYW4gdXBn cmFkZQoqIENoYW5nZSBub3RlIHN0eWxlcwoKVG9vbHRpcHMgYXJlIGF2YWlsYWJsZSBoZXJl IGFsc28gLSBqdXN0IGhvdmVyIG92ZXIgYW55dGhpbmcgd2l0aCBhIGRhc2hlZCB1bmRlcmxp bmUuCgpoMi4gKlB1YmxpYyAmIFByaXZhdGUqCgpfUHVibGljXyBub3RlcyBhcmUgdmlzaWJs ZSB0byBhbGwgdXNlcnMgYnV0IGNhbiBvbmx5IGJlIGFkZGVkL2VkaXRlZCBieSBhbiBBZG1p biB1c2VyIChpLmUuIGEgdXNlciB3aXRoIHN1ZmZpY2llbnRseSBlbGV2YXRlZCBwcml2aWxl Z2VzOiBQdWJsaXNoZXIvTWFuYWdlci9EZXNpZ25lcikuCgpfUHJpdmF0ZV8gbm90ZXMgY2Fu IGJlIGFkZGVkL2VkaXRlZCBieSBhbGwgdXNlcnMgKGluY2x1ZGluZyBBZG1pbikgYnV0IGFy ZSBvbmx5IHZpc2libGUgdG8gaW5kaXZpZHVhbCB1c2Vycy4KCmgyLiAqTm90ZSB0YWJzKgoK Tm90ZSB0YWJzIHdpbGwgYXBwZWFyIHVuZGVyIENvbnRlbnQsIFByZXNlbnRhdGlvbiBvciBB ZG1pbiBkZXBlbmRpbmcgdG8gdGhlIHZpc2liaWxpdHkgc2V0IGluICphZGlfbm90ZXMqIGFk bWluLiBCeSBkZWZhdWx0LCB0aGUgQ29udGVudCBub3RlIGlzIHN3aXRjaGVkIG9uIGF1dG9t YXRpY2FsbHkuCgpUaGUgTm90ZXMgdGFicyBhcmUgX3B1YmxpY18sIGkuZS4gdGhleSB3aWxs IGJlIHZpc2libGUgdG8gYW55b25lIHdobyBsb2dzIGluIHRvIHRoZSBUZXh0cGF0dGVybiBB ZG1pbiBpbnRlcmZhY2UuCgpOb3RlcyBtYWRlIHVuZGVyIG5vdGUgdGFicyBjYW4gb25seSBi ZSBlZGl0ZWQgYnkgYW4gQWRtaW4gdXNlci4KCmgyLiAqRm9vdG5vdGVzKgoKTm90ZXMgY2Fu IGJlIGFkZGVkIHRvIGFsbCBvZiB0aGUgc3RhbmRhcmQgVGV4dHBhdHRlcm4gYWRtaW4gcGFn ZXMuIFRoZXkgYXBwZWFyIGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgYWxvbmcgd2l0aCBB ZGQvRWRpdCBsaW5rcy4KCkFsbCB1c2VycyBzZWUgcHVibGljIGZvb3Rub3Rlcy4gUHJpdmF0 ZSBmb290bm90ZXMgYXJlIG9ubHkgdmlzaWJsZSB0byBpbmRpdmlkdWFsIHVzZXJzLgoKT25s eSBBZG1pbiB1c2VycyBjYW4gYWRkICYgZWRpdCBwdWJsaWMgZm9vdG5vdGVzLiBBbGwgdXNl cnMgY2FuIGFkZCAmIGVkaXQgdGhlaXIgb3duIHByaXZhdGUgZm9vdG5vdGVzLgoKX05vdGU6 IEZvb3Rub3RlcyBhcmUgb25seSBhdmFpbGFibGUgaW4gVFhQIHZlcnNpb25zIDQuMC42K18K CmgyLiAqTW9yZSBub3RlcyBhYm91dCBhZGlfbm90ZXMqCgoqIFVuaW5zdGFsbCB3aWxsIGRl bGV0ZSBhbGwgbm90ZXMgZnJvbSB0aGUgVGV4dHBhdHRlcm4gZGF0YWJhc2UuCiogVmlzaWJp bGl0eSBzaW1wbHkgY29udHJvbHMgd2hldGhlciB0aGUgbm90ZSB0YWJzIGNhbiBiZSBzZWVu IHVuZGVyIHRoZSBzcGVjaWZpZWQgYXJlYSB0YWJzLiAgTm90ZXMgdGhhdCBhcmUgbm90IHZp c2libGUgYXJlIG5vdCBkZWxldGVkLCBqdXN0IGhpZGRlbi4gRm9vdG5vdGVzIGFyZSBhbHdh eXMgdmlzaWJsZSwgaG93ZXZlciB0aGV5IG1heSBiZSByZW1vdmVkIGJ5IGRlbGV0aW5nIHRo ZSBub3RlIGNvbnRlbnRzLgoqIEF0dGVtcHRzIHRvIG1ha2UgYWxsIG5vdGUgdGFicyBpbnZp c2libGUgd2lsbCBiZSBpZ25vcmVkLgoqIFRoZSBFZGl0IGxpbmtzIHdpbGwgb25seSBiZSBz ZWVuIGJ5IHRob3NlIHN1ZmZpY2llbnRseSBlbGV2YXRlZCBpbiB0aGUgcHJpdmlsZWdlIGRl cGFydG1lbnQuCiogTm90ZXMgYXJlIGZvcm1hdHRlZCB1c2luZyBUZXh0aWxlLgoKaDIoYWRp X2V4dHJhcykuICpBZGRpdGlvbmFsIGluZm9ybWF0aW9uKgoKcChhZGlfZXh0cmFzKS4gU3Vw cG9ydCBhbmQgZnVydGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUg IlRleHRwYXR0ZXJuIHN1cHBvcnQgZm9ydW0iOmh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5j b20vdmlld3RvcGljLnBocD9pZD0yNzk1Ny4gQSBjb3B5IG9mIHRoaXMgaGVscCBpcyBhbHNv IGF2YWlsYWJsZSAib25saW5lIjpodHRwOi8vd3d3LmdyZWF0b2NlYW5tZWRpYS5jb20uYXUv dHhwLz9wbHVnaW49YWRpX25vdGVzLiAgTW9yZSBhZGlfcGx1Z2lucyBjYW4gYmUgZm91bmQg ImhlcmUiOmh0dHA6Ly93d3cuZ3JlYXRvY2Vhbm1lZGlhLmNvbS5hdS90eHAvLiI7czozOiJt ZDUiO3M6MzI6IjUwMTBkMTliZTZhODQxYzM3N2VmY2FjYTkwMmM5ZTU2Ijt9