1. MPC response overview

As of 23 March 2023, a total of 360,787 persons or 74,612 families have been reached by MPC interventions. A total of USD 10.9 million has been disbursed by 14 implementing agencies across 22 sub-districts.

Only beneficiaries who have received at least USD 100/family/month have been included.



225,619 beneficiaries were reached in February 2023 and 135,168 were reached in March 2023.





2. Map of MPC beneficiaries and collective/reception centres



Data on cash response extracted from FSL earthquake tracker on March 17 2023. Data on collective centres extracted from March 15 2023.

A revised version of the map will be available for further reporting with the revised 4Ws that includes all available codes for temporary sites.



3. Geographic breakdown of beneficiaries

Coverage is highest in Afrin and Harim districts, which have been worst-hit by the earthquake.



The current distribution of beneficiaries appears to be aligned with the worst-hit districts: Harim and Afrin. The figures below only pertain to populations within the AOC of Northwest Syria and not representative of the entire district’s population.



When reviewing the district-level spread of casualties and totally- and partially-damaged houses, Harim and Afrin do stand out in terms of the magnitude of the damage. Notably, the share of damaged houses in Afrin is much higher than in Harim.

Following them, Jebel Saman and Jisr-ash-Shugur have the next most severe damage, although, as can be seen from the table below, their populations (within the area of control) are comparatively smaller.

Assessments are still ongoing and the CWG will update these tables when new data becomes available.



Although the earthquake damage is not as severe in A’zaz, Al Bab, Jarablus, Idleb and Jisr-ash-Shugur, a much higher proportion of needs in these areas remain unmet, given the low percentages of persons reached.

The establishment of subnational targets at the district and sub-district level, will go some way towards clarifying how resources should be allocated across the affected areas.



3.1 Breakdown by partner and district

Harim, by far and away has the highest concentration of partners (12), double that of the next highest district (Afrin).




3.2 Scatterplot of sub-districts

The plot below shows the total population of each sub-district on the x-axis (for the moment, all persons in these areas are assumed to be affected and are included in the PIN) and the number of beneficiaries on the y-axis.

The size of each point indicates the number of dead or wounded persons there per 100,000.



Overall, we see fair alignment between the magnitude of the needs (total population) and the number of beneficiaries – this is evidenced by the blue line showing a positive relationship.

However, we do note several mismatches – Dana seems to have received an outsized share of beneficiaries, especially when considering the casualty rate. And Kafr Takharim seems to have been allocated relatively fewer resources in comparison to the death toll there. The response in Dana may be explained by a number of variables outside the scope of the data collected by the earthquake response tracker, such as population movements. Did earthquake survivors displace to Dana with the knowledge that it was a well-served area, where a number of partners were already operational? The CWG will conduct more consultations with partners to understand such disparities.




4. Cash response actors and cash disbursed

In the scatterplot below, each point is a single cash working group partner. The x-axis indicates the number of beneficiaries reached per agency and the y-axis indicates the number of communities (admin4) reached.



USD 10.9 million has been distributed across 155 communities and 22 sub-districts in NW Syria.

The table below summarises the information in the scatterplot above in tabular form:




4.1 USD disbursed by partner

There is very good compliance with CWG standards on the transfer values of multipurpose cash interventions, as can be seen by the usd_per_fam column in the table below.



Below is a breakdown of beneficiaries and families reached by cash-based activities of all values, not just those that qualify as MPC.





5. CCCM site tracker – searchable table


Data from CCCM site tracker. Extracted 15 March 2023.


LS0tDQp0aXRsZTogIk5vcnRod2VzdCBTeXJpYSBDYXNoIFdvcmtpbmcgR3JvdXAgRWFydGhxdWFrZSBSZXNwb25zZSBCdWxsZXRpbiINCmRhdGU6ICAiMjMgTWFyY2ggMjAyMyINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIGNvbGxhcHNlZDogbm8NCmFsd2F5c19hbGxvd19odG1sOiB5ZXMNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KDQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogNzBweDsNCiAgbWFyZ2luOiAyZW0gMjBweCA0MHB4IDIwcHg7DQogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiTldTLUNXRyBsb2dvLlBORyIpOw0KICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47DQogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7DQogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQp9DQpgYGANCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KICAgIGJvZHkgLm1haW4tY29udGFpbmVyIHsNCiAgICAgICAgbWF4LXdpZHRoOiAxMjgwcHg7DQogICAgfQ0KPC9zdHlsZT4NCmBgYA0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgZmlnLndpZHRoPTksIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZz1GQUxTRSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoc3RyaW5naSkNCmxpYnJhcnkocGFuZGVyKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShmbGV4dGFibGUpDQpsaWJyYXJ5KGdncmVwZWwpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KDQp0aGVtZV9zZXQodGhlbWVfbGlnaHQoKSkNCg0KIyBkaXNhYmxpbmcgc2NpZW50aWZpYyBub3RhdGlvbg0Kb3B0aW9ucyhzY2lwZW4gPSAxMDApDQoNCiMgcGFuZGVyIHRhYmxlcyBhbGwgaW4gb25lIHJvdw0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCiMgcGFuZGVyIHRob3VzYW5kcyBzZXBhcmF0b3INCnBhbmRlck9wdGlvbnMoImJpZy5tYXJrIiwgIiwiKQ0KDQojIHJlcGxhY2UgDQpvcHRzIDwtIG9wdGlvbnMoa25pdHIua2FibGUuTkEgPSAiIikNCg0KYCVvdXQlYCA8LSBOZWdhdGUoYCVpbiVgKQ0KDQojIGZ1bmN0aW9uIGZvciB0cmFuc3Bvc2luZyBkZg0KdHJhbnNwb3NlX2RmIDwtIGZ1bmN0aW9uKGRmKSB7DQogIHRfZGYgPC0gZGF0YS50YWJsZTo6dHJhbnNwb3NlKGRmKQ0KICBjb2xuYW1lcyh0X2RmKSA8LSByb3duYW1lcyhkZikNCiAgcm93bmFtZXModF9kZikgPC0gY29sbmFtZXMoZGYpDQogIHRfZGYgPC0gdF9kZiAlPiUNCiAgICB0aWJibGU6OnJvd25hbWVzX3RvX2NvbHVtbiguZGF0YSA9IC4pICU+JQ0KICAgIHRpYmJsZTo6YXNfdGliYmxlKC4pDQogIHJldHVybih0X2RmKQ0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcw0Kc3VtX2JlbiA8LSBmdW5jdGlvbihkZiwgY29sdW1uX3Zhcil7DQogIA0KICBjb2x1bW5fdmFyIDwtIGVucXVvKGNvbHVtbl92YXIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIpICU+JSAjIG11c3QgYWRkIGJhbmctYmFuZw0KICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKG5ld19iZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKQ0KICAgIA0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcywgMiBncm91cGVkIHZhcmlhYmxlcw0Kc3VtX2JlbjIgPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIxLCBjb2x1bW5fdmFyMil7DQogIA0KICBjb2x1bW5fdmFyMSA8LSBlbnF1byhjb2x1bW5fdmFyMSkNCiAgY29sdW1uX3ZhcjIgPC0gZW5xdW8oY29sdW1uX3ZhcjIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIxLCAhIWNvbHVtbl92YXIyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShuZXdfYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikNCiAgICANCn0NCg0KIyBzY2FsaW5nIGZ1bmN0aW9ucyANCnJhbmdlMDEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgpKS8obWF4KHgpLW1pbih4KSl9DQpyYW5nZV93bmEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgsIG5hLnJtID0gVFJVRSkpLyhtYXgoeCwgbmEucm0gPSBUUlVFKS1taW4oeCwgbmEucm0gPSBUUlVFKSl9DQoNCiNtb2RlIGZ1bmN0aW9uIA0KbW9kZSA8LSBmdW5jdGlvbih4KSB7DQogIHV4IDwtIHVuaXF1ZSh4KQ0KICB1eFt3aGljaC5tYXgodGFidWxhdGUobWF0Y2goeCwgdXgpKSldDQp9DQoNCmBgYA0KDQpgYGB7ciBkYXRhfQ0KcGNvZGUzX3NoYXBlIDwtIA0KICBzZjo6c3RfcmVhZCgiLi9kYXRhL3N5cl9hZG1ibmRhX3VuY3NfdW5vY2hhXzIwMjAxMjE3L3N5cl9hZG1ibmRhX2FkbTNfdW5jc191bm9jaGFfMjAyMDEyMTcuc2hwIiwgDQogICAgICAgICAgcXVpZXQgPSBUUlVFKQ0KDQpsb2NhdGlvbnMgPC0gcmVhZF9leGNlbCgiLi9kYXRhL0xvY2F0aW9ucy54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQoNCmZzbCA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvZnNsLmNzdiIpICU+JSANCiAgbXV0YXRlKHBhcnRuZXJfY29kZSA9IGlmZWxzZShpcy5uYShwYXJ0bmVyX2NvZGUpLCAidGVtcF8xIiwgcGFydG5lcl9jb2RlKSkNCg0Kc2l0ZXMgPC0gcmVhZF9jc3YoIi4vZGF0YS9mb3JfcmVwb3J0L3NpdGVzLmNzdiIpDQoNCnJlbW92ZV9zaXRlcyA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvc2l0ZXNfbG9jYXRpb25zX2ZzbC5jc3YiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShsb25naXR1ZGVfeCkgJiAhaXMubmEobGF0aXR1ZGVfeSkpICU+JSANCiAgc3RfYXNfc2YoY29vcmRzID0gYygibG9uZ2l0dWRlX3giLCAibGF0aXR1ZGVfeSIpLCBjcnMgPSA0MzI2KSAlPiUNCiAgc3RfdHJhbnNmb3JtKHN0X2NycyhwY29kZTNfc2hhcGUpKSAlPiUgDQogIG11dGF0ZShpbnRlcnNlY3Rpb24gPSBhcy5pbnRlZ2VyKHN0X2ludGVyc2VjdHMoZ2VvbWV0cnksIHBjb2RlM19zaGFwZSkpLCANCiAgICAgICAgIGFyZWEgPSBpZmVsc2UoaXMubmEoaW50ZXJzZWN0aW9uKSwgIiIsIHBjb2RlM19zaGFwZSRBRE0zX1BDT0RFW2ludGVyc2VjdGlvbl0pKSAlPiUNCiAgZmlsdGVyKGlzLm5hKGludGVyc2VjdGlvbikpIA0KDQpzaXRlc19sb2NhdGlvbnNfZnNsIDwtIHJlYWRfY3N2KCIuL2RhdGEvZm9yX3JlcG9ydC9zaXRlc19sb2NhdGlvbnNfZnNsLmNzdiIpICU+JSANCiAgYW50aV9qb2luKHJlbW92ZV9zaXRlcywgYnkgPSBjKCJzaXRlX25hbWUiKSkNCg0KbmFtZXNfZXEgPC0gYygNCiAgImRhdGUiLA0KICAiZ292ZXJub3JhdGUiLA0KICAiZGlzdHJpY3QiLA0KICAic3ViX2Rpc3RyaWN0IiwNCiAgImNvbW11bml0eSIsDQogICJhZG1pbjQiLA0KICAiY2FzdWFsdGllcyIsDQogICJpbmp1cmllcyIsDQogICJjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMiLA0KICAiZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzIiwNCiAgInRlbXBvcmFyeV9hY2NvbW1vZGF0aW9uX2NlbnRyZXMiLA0KICAiaWRwc19pbl9hbGxfY2VudHJlcyIsDQogICJzY2hvb2xzX2FzX2FjY29tb2RhdGlvbl9jZW50cmVzIiwNCiAgImlkcHNfaW5fc2Nob29scyIsDQogICJ0ZW50c19uZWVkZWQiLA0KICAiYmxhbmtldHNfbWF0dHJlc3Nlc19uZWVkZWQiLA0KICAidGVtcG9yYXJ5X2FjY29tbW9kYXRpb25fY2VudHJlc19hdmFpbGFibGUiLCANCiAgImFjY2Vzc2libGVfY2l2aWxfZGVmZW5zZSIsDQogICJsYXRyaW5lc19hdmFpbGFibGUiLA0KICAibWVhbHNfbmVlZGVkX3Blcl9kYXkiLA0KICAibmVlZF9ibG9vZF9kb25hdGlvbnMiLA0KICAiaGVhbHRoX3NlcnZpY2VzX2F2YWlsYWJsZSIsDQogICJuZWNlc3NhcnlfbWVkaWNhbF9lcXVpcG1lbnQiLA0KICAicnViYmxlX3ZvbHVudGVlcnMiLA0KICAidGVsZWNvbXNfYXZhaWxhYmxlIiwNCiAgImVsZWN0cmljaXR5X2F2YWlsYWJsZSIsIA0KICAiaGVhdGluZ19mdWVsX25lZWRlZCINCikNCg0KZXEgPC0gcmVhZF9leGNlbCgiLi9kYXRhL3N5cmlhLWVhcnRocXVha2UtaW1wYWN0LTA1LW1hcmNoLTIwMjMueGxzeCIsDQogICAgICAgICAgICAgICAgIHNoZWV0ID0gIkRBVEFTRVQiKSAlPiUgDQogIHNldE5hbWVzKG5hbWVzX2VxKSAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIHNlbGVjdChhZG1pbjRwY29kZSwgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gYygiYWRtaW40IiA9ICJhZG1pbjRwY29kZSIpKQ0KDQoNCmhubyA8LSByZWFkX2V4Y2VsKCIuL2RhdGEvMjAyM0hOT19QaU5fU2V2ZXJpdHlfZGV0YWlsZWRBb0lfRk9SU0hBUkUgMTUwMzIwMjMueGxzeCIsIHNraXAgPSAxLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkgJT4lDQogIGNsZWFuX25hbWVzKCkNCg0KbndfcGNvZGUzIDwtIGhubyAlPiUgDQogIGZpbHRlcihhb19jID09ICJOVyIpICU+JSANCiAgcHVsbChhZG1pbjNwY29kZSkNCg0KIyBud19wY29kZTMgJT4lIA0KIyAgIGFzX3RpYmJsZSgpICU+JSANCiMgICB3cml0ZV9jc3YoIm53X3Bjb2RlMy5jc3YiKQ0KYGBgDQoNCg0KDQo8YnI+PGJyPjxicj4NCg0KIyAxLiBNUEMgcmVzcG9uc2Ugb3ZlcnZpZXcNCg0KQXMgb2YgMjMgTWFyY2ggMjAyMywgYSB0b3RhbCBvZiBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIG9yIGByIGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIHtzdW0oLiRmYW1pbGllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBmYW1pbGllcyBoYXZlIGJlZW4gcmVhY2hlZCBieSBNUEMgaW50ZXJ2ZW50aW9ucy4gDQpBIHRvdGFsIG9mIFVTRCBgciBwYXN0ZShmb3JtYXQocm91bmQoKGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgIHtzdW0oLiR1c2RfdG90YWwpfSkgLyAxMDAwMDAwLCAxKSwgdHJpbSA9IFRSVUUpLCAibWlsbGlvbiIpYCBoYXMgYmVlbiBkaXNidXJzZWQgYnkgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgc3VtbWFyaXNlKG5fZGlzdGluY3QocGFydG5lcl9jb2RlKSkgJT4lIHB1bGwoKWAgaW1wbGVtZW50aW5nIGFnZW5jaWVzIGFjcm9zcyBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSBzdW1tYXJpc2Uobl9kaXN0aW5jdChhZG1pbjNwY29kZSkpICU+JSBwdWxsKClgIHN1Yi1kaXN0cmljdHMuIA0KDQpPbmx5IGJlbmVmaWNpYXJpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgYXQgbGVhc3QgVVNEIDEwMC9mYW1pbHkvbW9udGggaGF2ZSBiZWVuIGluY2x1ZGVkLg0KDQoNCjxicj4NCg0KYGBge3Igc3VtbWFyeSB0YWJsZX0NCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JQ0KICBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChwYXJ0bmVyX2NvZGUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSksIA0KICAgICAgICAgICAgaG91c2Vob2xkcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxfdXNkID0gc3VtKHVzZF90b3RhbCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSANCiAgICAgICAgICAgcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lDQogIGFkb3JuX3RvdGFscygicm93IiwsLCwgaG91c2Vob2xkcywgYmVuZWZpY2lhcmllcywgdG90YWxfdXNkLCBgJV9iZW5lZmljaWFyaWVzYCkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSBpZmVsc2UoYCVfYmVuZWZpY2lhcmllc2AgPiA5OS45OCwgMTAwLCBgJV9iZW5lZmljaWFyaWVzYCkpICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgY29tbXVuaXRpZXMsIHBhcnRuZXJzLCANCiAgICAgICAgIGhvdXNlaG9sZHMsIGJlbmVmaWNpYXJpZXMsIHRvdGFsX3VzZCwgYCVfYmVuZWZpY2lhcmllc2ApICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiMzYwLDc4NyBwZW9wbGUgcmVhY2hlZCwgVVNEIDEwLjkgbWlsbGlvbiBkaXNidXJzZWQsIDIzIE1hcmNoIDIwMjMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDYsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYSIsDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiQmVuZWZpY2lhcnkgZmlndXJlcyBpbmNsdWRlIG9ubHkgcmVwb3J0ZWQgTVBDIHdpdGggYSBtaW5pbXVtIHRyYW5zZmVyIHZhbHVlIG9mIFVTRCAxMDAiKSkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDgsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYiIsICANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJBcyBwZXJjZW50YWdlIG9mIGFsbCBNUEMgYmVuZWZpY2lhcmllcyByZWFjaGVkIGluIE5XIFN5cmlhIikpIA0KDQogIA0KYGBgDQo8YnI+DQoNCmBgYHtyIGV2YWwgPSBGQUxTRX0NCg0KIyBKdXN0IGJyZWFrZG93biBieSBtb250aCAtLSBkb24ndCBrbm93IHdoeSBJIGRpZCBhIGxpbmUgcGxvdCBpbnN0ZWFkIG9mIGEgYmFycGxvdCwgDQojIG1heWJlIGJhcnBsb3Qgd2hlbiB0aGVyZSBhcmUgbW9yZSBtb250aHMgDQoNCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIsIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBtdXRhdGUobW9udGggPSBtb250aChkaXN0cmlidXRpb25fZGF0ZSkpICU+JSANCiAgZ3JvdXBfYnkobW9udGgpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcykpDQpgYGANCg0KDQoyMjUsNjE5IGJlbmVmaWNpYXJpZXMgd2VyZSByZWFjaGVkIGluIEZlYnJ1YXJ5IDIwMjMgYW5kIDEzNSwxNjggd2VyZSByZWFjaGVkIGluIE1hcmNoIDIwMjMuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgbXV0YXRlKGRpc3RyaWJ1dGlvbl9kYXRlID0gYXMuRGF0ZShkaXN0cmlidXRpb25fZGF0ZSkpICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShkaXN0cmlidXRpb25fZGF0ZSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBhcnJhbmdlKGRpc3RyaWJ1dGlvbl9kYXRlKSAlPiUgDQogIG11dGF0ZShjdW1fYmVuID0gY3Vtc3VtKGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIG11dGF0ZShjdW1fbGFiZWwgPSBpZmVsc2UoY3VtX2JlbiAlaW4lIGMoMjE0NSwgMjI1NjE5LCAzNjA3ODcpLCBjdW1fYmVuLCAiIiksIA0KICAgICAgICAgY3VtX2xhYmVsID0gYXMuZG91YmxlKGN1bV9sYWJlbCkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZGlzdHJpYnV0aW9uX2RhdGUsIHkgPSBjdW1fYmVuKSkgKyANCiAgZ2VvbV9saW5lKGNvbG91ciA9ICJibHVlIikgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6Y29tbWEoY3VtX2xhYmVsKSksIHZqdXN0ID0gLS42LCANCiAgICAgICAgICAgIHNpemUgPSA0KSArIA0KICBzY2FsZV94X2RhdGUoZGF0ZV9icmVha3MgPSAiMSB3ZWVrIiwgZGF0ZV9sYWJlbHMgPSAiJWQtJWIiKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSwgZXhwYW5kID0gZXhwYW5zaW9uKG11bHQgPSAuMSkpICsgDQogIGxhYnMoeCA9ICJEaXN0cmlidXRpb24gZGF0ZSIsIA0KICAgICAgIHkgPSAiQ3VtdWxhdGl2ZSBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgdGl0bGUgPSAiTVBDIHByb2dyZXNzIGJ5IGRhdGUiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJUaGUgZWFybGllc3QgZGlzdHJpYnV0aW9uIHdhcyAyMDIzLTAyLTA5IikgIA0KICANCiAgDQoNCg0KYGBgDQoNCg0KDQo8YnI+PGJyPjxicj4NCg0KDQojIDIuIE1hcCBvZiBNUEMgYmVuZWZpY2lhcmllcyBhbmQgY29sbGVjdGl2ZS9yZWNlcHRpb24gY2VudHJlcw0KDQoNCjxicj4NCg0KDQpgYGB7ciBwbG90bHktc2l0ZXN9DQoNCnNpdGVfbWFwIDwtIHNpdGVzX2xvY2F0aW9uc19mc2wgJT4lIA0KICBsZWZ0X2pvaW4obG9jYXRpb25zICU+JSBzZWxlY3QoYWRtaW4zcGNvZGUsIGFkbWluNHBjb2RlKSwgDQogICAgICAgICAgICBieSA9ICJhZG1pbjRwY29kZSIpICU+JQ0KICByaWdodF9qb2luKHBjb2RlM19zaGFwZSwgDQogICAgICAgICAgICAgYnkgPSBjKCJhZG1pbjNwY29kZSIgPSAiQURNM19QQ09ERSIpKSAlPiUgDQogIGZpbHRlcihBRE0xX1BDT0RFICVpbiUgYygiU1kwMiIsICJTWTA3IikpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIG11dGF0ZSh0eXBlID0gZmN0X3JlbGV2ZWwodHlwZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiUkMvSURQIiwgIkJlbmVmaWNpYXJpZXMiKSkpICU+JSANCiAgZ2dwbG90KCkgKyANCiAgZ2VvbV9zZihzaXplID0gMC4xLCBjb2xvdXIgPSAiZ3JleTcwIikgKw0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gcGVyc29ucywgDQogICAgICAgICAgICAgICAgICBjb2xvdXIgPSB0eXBlLA0KICAgICAgICAgICAgICAgICAgeCA9IGxvbmdpdHVkZV94LCB5ID0gbGF0aXR1ZGVfeSwNCiAgICAgICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAoInN1Yl9kaXN0cmljdDogIiwgc3ViX2Rpc3RyaWN0LCAiXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZTogIiwgc2l0ZV9uYW1lLCAiXG4iLCAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJzb25zOiAiLCBwZXJzb25zLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGU6ICIsIHR5cGUsICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9uX3g6ICIsIGxvbmdpdHVkZV94LCAiXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXRfeTogIiwgbGF0aXR1ZGVfeSkpLCANCiAgICAgICAgICAgICBzaGFwZSA9IDIxLCBzdHJva2UgPSAuMg0KICAgICAgICAgICAgICMgQWRqdXN0aW5nIGFscGhhIHdvbid0IGFmZmVjdCBhIHBsb3RseQ0KICAgICAgICAgICAgICkgKw0KICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsNCiAgdGhlbWVfdm9pZCgpICsgDQogIHRoZW1lKHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3VyID0gTkEpLCANCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwgDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKw0KICBsYWJzKHRpdGxlID0gIkNvbGxlY3RpdmUvcmVjZXB0aW9uIGNlbnRyZXMgYW5kIE1QQyBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgc3VidGl0bGUgPSAiSURQcyBpbiByZWQsIGJlbmVmaWNpYXJpZXMgaW4gYmx1ZSwgc2l6ZSBzaG93cyBudW1iZXIgb2YgcGVyc29ucyIpDQoNCmdncGxvdGx5KHNpdGVfbWFwLCB0b29sdGlwID0gYygidGV4dCIpKSAlPiUgDQogIHBsb3RseTo6c3R5bGUoaG92ZXJvbiA9ICJwb2ludCIpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJDb2xsZWN0aXZlIGNlbnRyZXMgYW5kIGNhc2ggcmVzcG9uc2UgYmVuZWZpY2lhcmllcyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklEUHMgaW4gcmVkLCBiZW5lZmljaWFyaWVzIGluIGJsdWUsIHNpemUgc2hvd3MgbnVtYmVyIG9mIHBlcnNvbnM7IGNsaWNrIGFuZCBkcmFnIHRvIHpvb207IG1vdXNlIG92ZXIgZm9yIGRldGFpbHMiKSkpIA0KDQojIFdpbGwgdGhpcyB3b3JrPyANCiMgJT4lIHBhcnRpYWxfYnVuZGxlKCkNCg0KIyBnZ3NhdmUoInNpdGVfbWFwLnBuZyIsIGRwaSA9IDMwMCwgaGVpZ2h0ID0gOC4yNywgd2lkdGggPSAxMS42OSwgdW5pdHMgPSAiaW4iKQ0KYGBgDQoNCjxicj4NCg0KRGF0YSBvbiBjYXNoIHJlc3BvbnNlIGV4dHJhY3RlZCBmcm9tIFtGU0wgZWFydGhxdWFrZSB0cmFja2VyXShodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC8xS0dxdC0zWURoMms4cU5Da3NPSkFuZFJQTzU2R3E2cEdzNmVzRVF0SUZJdy9lZGl0I2dpZD0xODkwOTgxMTE1KSBvbiBNYXJjaCAxNyAyMDIzLiBEYXRhIG9uIGNvbGxlY3RpdmUgY2VudHJlcyBleHRyYWN0ZWQgZnJvbSBNYXJjaCAxNSAyMDIzLiANCg0KQSByZXZpc2VkIHZlcnNpb24gb2YgdGhlIG1hcCB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgZnVydGhlciByZXBvcnRpbmcgd2l0aCB0aGUgcmV2aXNlZCA0V3MgdGhhdCBpbmNsdWRlcyBhbGwgYXZhaWxhYmxlIGNvZGVzIGZvciB0ZW1wb3Jhcnkgc2l0ZXMuIA0KDQoNCjxicj48YnI+DQoNCg0KIyAzLiBHZW9ncmFwaGljIGJyZWFrZG93biBvZiBiZW5lZmljaWFyaWVzDQoNCkNvdmVyYWdlIGlzIGhpZ2hlc3QgaW4gQWZyaW4gYW5kIEhhcmltIGRpc3RyaWN0cywgd2hpY2ggaGF2ZSBiZWVuIHdvcnN0LWhpdCBieSB0aGUgZWFydGhxdWFrZS4gDQoNCjxicj4NCg0KYGBge3J9DQpmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIG11dGF0ZShnb3Zlcm5vcmF0ZSA9IGlmZWxzZShnb3Zlcm5vcmF0ZSA9PSAiaWRsZWIiLCAiSWRsZWIiLCBnb3Zlcm5vcmF0ZSksDQogICAgICAgICBkaXN0cmljdCA9IGlmZWxzZShkaXN0cmljdCA9PSAiaWRsZWIiLCAiSWRsZWIiLCBkaXN0cmljdCkpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKGRpc3RyaWN0ID0gZmN0X3Jlb3JkZXIoZGlzdHJpY3QsIGJlbmVmaWNpYXJpZXMpLCANCiAgICAgICAgIGdvdmVybm9yYXRlID0gZmN0X3JlbGV2ZWwoZ292ZXJub3JhdGUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJJZGxpYiIsICJBbGVwcG8iKSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IGRpc3RyaWN0KSkgKyANCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBnb3Zlcm5vcmF0ZSkpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShiZW5lZmljaWFyaWVzKSksIA0KICAgICAgICAgICAgaGp1c3QgPSAiaW53YXJkIikgKyANCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QoYmVnaW4gPSAuMykgKyANCiAgbGFicyh0aXRsZSA9ICJNUEMgYmVuZWZpY2lhcmllcyBieSBkaXN0cmljdCIsIA0KICAgICAgIHN1YnRpdGxlID0gImFzIG9mIDIzIE1hcmNoIDIwMjMiLCANCiAgICAgICB5ID0gIiIpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCg0KaG5vICU+JSANCiAgZmlsdGVyKGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlID0gYWRtaW4xbmFtZV9lbiwgZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9wb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbGVmdF9qb2luKA0KICAgIGZzbCAlPiUNCiAgICAgIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgICAgIG11dGF0ZShnb3Zlcm5vcmF0ZSA9IGlmZWxzZShnb3Zlcm5vcmF0ZSA9PSAiaWRsZWIiLCAiSWRsZWIiLCBnb3Zlcm5vcmF0ZSksDQogICAgICAgICAgICAgZGlzdHJpY3QgPSBpZmVsc2UoZGlzdHJpY3QgPT0gImlkbGViIiwgIklkbGViIiwgZGlzdHJpY3QpKSAlPiUgDQogICAgICBncm91cF9ieShkaXN0cmljdCkgJT4lIA0KICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgLCAgDQogIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVvcmRlcihkaXN0cmljdCwgYmVuZWZpY2lhcmllcyksIA0KICAgICAgICAgZ292ZXJub3JhdGUgPSBmY3RfcmVsZXZlbChnb3Zlcm5vcmF0ZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIklkbGliIiwgIkFsZXBwbyIpKSwgDQogICAgICAgICBwY19yZWFjaGVkID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHRvdGFsX3BvcHVsYXRpb24gKiAxMDAsIGRpZ2l0cyA9IDEpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBjX3JlYWNoZWQsIHkgPSBkaXN0cmljdCkpICsNCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBnb3Zlcm5vcmF0ZSkpICsgDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBjb21tYShwY19yZWFjaGVkKSksIA0KICAgICAgICAgICAgaGp1c3QgPSAiaW53YXJkIikgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZChiZWdpbiA9IC4zKSArIA0KICBsYWJzKHRpdGxlID0gIlBlcmNlbnQgb2YgcG9wdWxhdGlvbiByZWFjaGVkIiwgDQogICAgICAgc3VidGl0bGUgPSAiYXMgb2YgMjMgTWFyY2ggMjAyMyIsIA0KICAgICAgIHkgPSAiIiwgDQogICAgICAgeCA9ICIlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCIpICsNCiAgDQogIHBsb3RfbGF5b3V0KGd1aWRlcyA9ICJjb2xsZWN0IikgJiANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCg0KYGBgDQoNCjxicj4NCg0KVGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uIG9mIGJlbmVmaWNpYXJpZXMgYXBwZWFycyB0byBiZSBhbGlnbmVkIHdpdGggdGhlIHdvcnN0LWhpdCBkaXN0cmljdHM6IEhhcmltIGFuZCBBZnJpbi4gVGhlIGZpZ3VyZXMgYmVsb3cgb25seSBwZXJ0YWluIHRvIHBvcHVsYXRpb25zIHdpdGhpbiB0aGUgQU9DIG9mIE5vcnRod2VzdCBTeXJpYSBhbmQgbm90IHJlcHJlc2VudGF0aXZlIG9mIHRoZSBlbnRpcmUgZGlzdHJpY3QncyBwb3B1bGF0aW9uLiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KZXEgJT4lIA0KICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJiANCiAgICAgICAgICAgZGlzdHJpY3QgJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UoY2FzdWFsdGllcyA9IHN1bShjYXN1YWx0aWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGluanVyaWVzID0gc3VtKGluanVyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHRvdGFsbHlfZGFtYWdlZCA9IHN1bShjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgcGFydGlhbGx5X2RhbWFnZWQgPSBzdW0oZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzLCBuYS5ybSA9IFRSVUUpKSAlPiUNCiAgIyBXaGVyZSBpcyBBcmloYSwgYW5kIHdoeSBpcyBpdCBzaG93aW5nIHVwIGhlcmUNCiAgZmlsdGVyKGRpc3RyaWN0ICE9ICJBcmloYSIpICU+JSANCiAgbGVmdF9qb2luKGhubyAlPiUgDQogICAgICAgICAgICAgIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmDQogICAgICAgICAgICAgICAgICAgICAgIGFkbWluMm5hbWVfZW4gJWluJSBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSAlPiUNCiAgICAgICAgICAgICAgZ3JvdXBfYnkoZGlzdHJpY3QgPSBhZG1pbjJuYW1lX2VuKSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSksIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkID0gY2FzdWFsdGllcyArIGluanVyaWVzLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gdG90YWxseV9kYW1hZ2VkICsgcGFydGlhbGx5X2RhbWFnZWQsIA0KICAgICAgICAgd291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBzZWxlY3QoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCB3b3VuZGVkX2RlYWQsIHdvdW5kZWRfZGVhZF8xMDBrLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzLCBkYW1hZ2VkX2hvdXNlc18xMDBrKSAlPiUgDQogIGZsZXh0YWJsZSgpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOTkpICU+JSANCiAgc2V0X2NhcHRpb24oIkNhc3VhbHRpZXMgYW5kIGRhbWFnZWQgaG91c2VzLCBhYnNvbHV0ZSBmaWd1cmVzIGFuZCBwZXIgMTAwLDAwMCBwZXJzb25zIikgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDM6NiwgcGFydCA9ICJoZWFkZXIiLA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkRhdGEgZnJvbSB0aGUgQXNzaXN0YW5jZSBDb29yZGluYXRpb24gVW5pdCwgU3lyaWEgMjAyMzAzMDciKSkNCg0KDQpgYGANCg0KPGJyPg0KDQpXaGVuIHJldmlld2luZyB0aGUgZGlzdHJpY3QtbGV2ZWwgc3ByZWFkIG9mIGNhc3VhbHRpZXMgYW5kIHRvdGFsbHktIGFuZCBwYXJ0aWFsbHktZGFtYWdlZCBob3VzZXMsIEhhcmltIGFuZCBBZnJpbiBkbyBzdGFuZCBvdXQgaW4gdGVybXMgb2YgdGhlIG1hZ25pdHVkZSBvZiB0aGUgZGFtYWdlLiBOb3RhYmx5LCB0aGUgc2hhcmUgb2YgZGFtYWdlZCBob3VzZXMgaW4gQWZyaW4gaXMgbXVjaCBoaWdoZXIgdGhhbiBpbiBIYXJpbS4gDQoNCkZvbGxvd2luZyB0aGVtLCBKZWJlbCBTYW1hbiBhbmQgSmlzci1hc2gtU2h1Z3VyIGhhdmUgdGhlIG5leHQgbW9zdCBzZXZlcmUgZGFtYWdlLCBhbHRob3VnaCwgYXMgY2FuIGJlIHNlZW4gZnJvbSB0aGUgdGFibGUgYmVsb3csIHRoZWlyIHBvcHVsYXRpb25zICh3aXRoaW4gdGhlIGFyZWEgb2YgY29udHJvbCkgYXJlIGNvbXBhcmF0aXZlbHkgc21hbGxlci4gDQoNCkFzc2Vzc21lbnRzIGFyZSBzdGlsbCBvbmdvaW5nIGFuZCB0aGUgQ1dHIHdpbGwgdXBkYXRlIHRoZXNlIHRhYmxlcyB3aGVuIG5ldyBkYXRhIGJlY29tZXMgYXZhaWxhYmxlLiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KDQpobm8gJT4lIA0KICBmaWx0ZXIoYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikgJg0KICAgICAgICAgICBhb19jID09ICJOVyIpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuLCBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4pICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX3BvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBsZWZ0X2pvaW4oDQogICAgZnNsICU+JQ0KICAgICAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICAgICAgbXV0YXRlKGdvdmVybm9yYXRlID0gaWZlbHNlKGdvdmVybm9yYXRlID09ICJpZGxlYiIsICJJZGxlYiIsIGdvdmVybm9yYXRlKSwNCiAgICAgICAgICAgICBkaXN0cmljdCA9IGlmZWxzZShkaXN0cmljdCA9PSAiaWRsZWIiLCAiSWRsZWIiLCBkaXN0cmljdCkpICU+JSANCiAgICAgIGdyb3VwX2J5KGRpc3RyaWN0KSAlPiUgDQogICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgICAgICBwYXJ0bmVycyA9IG5fZGlzdGluY3QocGFydG5lcl9jb2RlKSkgLCAgDQogIGJ5ID0gImRpc3RyaWN0IikgJT4lIA0KICBtdXRhdGUoYCVfcmVhY2hlZGAgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMCwgZGlnaXRzID0gMikpICU+JSANCiAgcmVsb2NhdGUocGFydG5lcnMsIC5hZnRlciA9IGxhc3RfY29sKCkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC44KSAlPiUgDQogIHNldF9jYXB0aW9uKCJQZXJjZW50YWdlIG9mIHBvcHVsYXRpb24gcmVhY2hlZCBieSBkaXN0cmljdCIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAzLCBwYXJ0ID0gImhlYWRlciIsIA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIlRvdGFsIHBvcHVsYXRpb24gb2Ygc3ViLWRpc3RyaWN0cyB3aXRoaW4gdGhlIE5XIEFPQywgcGVyc29ucyBub3QgcmVzaWRpbmcgaW4gdGhlIE5XIEFPQyBoYXZlIGJlZW4gZXhjbHVkZWQgZnJvbSB0aGlzIHRvdGFsIikpDQpgYGANCg0KPGJyPg0KDQpBbHRob3VnaCB0aGUgZWFydGhxdWFrZSBkYW1hZ2UgaXMgbm90IGFzIHNldmVyZSBpbiBBJ3pheiwgQWwgQmFiLCBKYXJhYmx1cywgSWRsZWIgYW5kIEppc3ItYXNoLVNodWd1ciwgYSBtdWNoIGhpZ2hlciBwcm9wb3J0aW9uIG9mIG5lZWRzIGluIHRoZXNlIGFyZWFzIHJlbWFpbiB1bm1ldCwgZ2l2ZW4gdGhlIGxvdyBwZXJjZW50YWdlcyBvZiBwZXJzb25zIHJlYWNoZWQuIA0KDQpUaGUgZXN0YWJsaXNobWVudCBvZiBzdWJuYXRpb25hbCB0YXJnZXRzIGF0IHRoZSBkaXN0cmljdCBhbmQgc3ViLWRpc3RyaWN0IGxldmVsLCB3aWxsIGdvIHNvbWUgd2F5IHRvd2FyZHMgY2xhcmlmeWluZyBob3cgcmVzb3VyY2VzIHNob3VsZCBiZSBhbGxvY2F0ZWQgYWNyb3NzIHRoZSBhZmZlY3RlZCBhcmVhcy4gDQoNCg0KPGJyPjxicj4NCg0KIyMgMy4xIEJyZWFrZG93biBieSBwYXJ0bmVyIGFuZCBkaXN0cmljdA0KDQpIYXJpbSwgYnkgZmFyIGFuZCBhd2F5IGhhcyB0aGUgaGlnaGVzdCBjb25jZW50cmF0aW9uIG9mIHBhcnRuZXJzICgxMiksIGRvdWJsZSB0aGF0IG9mIHRoZSBuZXh0IGhpZ2hlc3QgZGlzdHJpY3QgKEFmcmluKS4gDQoNCjxicj4NCg0KYGBge3J9DQoNCg0Kc3RhY2tfdGV4dCA8LSBmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIGdyb3VwX2J5KGdvdmVybm9yYXRlLCBkaXN0cmljdCkgJT4lIA0KICBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVsZXZlbChkaXN0cmljdCwgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwgDQogICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkpDQoNCnN0YWNrIDwtIGZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkoZGlzdHJpY3QsIHBhcnRuZXJfY29kZSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUNCiAgbXV0YXRlKGRpc3RyaWN0ID0gZmN0X3JlbGV2ZWwoZGlzdHJpY3QsIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSksIA0KICAgICAgICAgZGlzdHJpY3QgPSBmY3RfcmV2KGRpc3RyaWN0KSkgJT4lDQogIGdncGxvdChhZXMoeSA9IGRpc3RyaWN0LCANCiAgICAgICAgICAgICB4ID0gYmVuZWZpY2lhcmllcykpICsNCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBwYXJ0bmVyX2NvZGUpKSArIA0KICBnZW9tX3RleHQoZGF0YSA9IHN0YWNrX3RleHQsIA0KICAgICAgICAgICAgYWVzKHggPSB0b3RhbCArIDYwMDAsIA0KICAgICAgICAgICAgICAgIGxhYmVsID0gc2NhbGVzOjpjb21tYSh0b3RhbCkpKSArIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsgDQogIGxhYnMoeSA9ICIiLCANCiAgICAgICB4ID0gIkJlbmVmaWNpYXJpZXMiLCANCiAgICAgICB0aXRsZSA9ICJQYXJ0bmVyIGFjaGlldmVtZW50cyBieSBkaXN0cmljdCwgMjAyMzAzMTciKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpDQoNCmdncGxvdGx5KHN0YWNrLCB0b29sdGlwID0gYygiZmlsbCIsICJ4IiwgInkiKSkgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIlBhcnRuZXIgYWNoaWV2ZW1lbnRzIGJ5IGRpc3RyaWN0LCAyMDIzMDMxNyIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxicj4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vdXNlIG92ZXIgZm9yIGRldGFpbHMiKSkpDQoNCmBgYA0KDQo8YnI+PGJyPg0KDQojIyAzLjIgU2NhdHRlcnBsb3Qgb2Ygc3ViLWRpc3RyaWN0cyANCg0KVGhlIHBsb3QgYmVsb3cgc2hvd3MgdGhlIHRvdGFsIHBvcHVsYXRpb24gb2YgZWFjaCBzdWItZGlzdHJpY3Qgb24gdGhlIHgtYXhpcyAoZm9yIHRoZSBtb21lbnQsIGFsbCBwZXJzb25zIGluIHRoZXNlIGFyZWFzIGFyZSBhc3N1bWVkIHRvIGJlIGFmZmVjdGVkIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhlIFBJTikgYW5kIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyBvbiB0aGUgeS1heGlzLiANCg0KVGhlIHNpemUgb2YgZWFjaCBwb2ludCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBkZWFkIG9yIHdvdW5kZWQgcGVyc29ucyB0aGVyZSBwZXIgMTAwLDAwMC4gDQoNCjxicj4NCg0KDQpgYGB7ciwgZHBpID0gMzAwLCBmaWcuaGVpZ2h0PTZ9DQplcSAlPiUgDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0LCBzdWJfZGlzdHJpY3QsIGFkbWluM3Bjb2RlKSAlPiUgDQogIHN1bW1hcmlzZShjYXN1YWx0aWVzID0gc3VtKGNhc3VhbHRpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgaW5qdXJpZXMgPSBzdW0oaW5qdXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxseV9kYW1hZ2VkID0gc3VtKGNvbXBsZXRlbHlfZGVzdHJveWVkX2hvdXNlcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBwYXJ0aWFsbHlfZGFtYWdlZCA9IHN1bShkYW1hZ2VkX3VuaWhhYml0YWJsZV9ob3VzZXMsIG5hLnJtID0gVFJVRSkpICU+JQ0KICAjIFdoZXJlIGlzIEFyaWhhLCBhbmQgd2h5IGlzIGl0IHNob3dpbmcgdXAgaGVyZQ0KICBmaWx0ZXIoZGlzdHJpY3QgIT0gIkFyaWhhIikgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYNCiAgICAgICAgICAgICAgICAgICAgICAgYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lDQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3B1bGF0aW9uID0gc3VtKHRvdGFsX3BvcHVsYXRpb24sIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluM3Bjb2RlIikgJT4lIA0KICBtdXRhdGUod291bmRlZF9kZWFkID0gY2FzdWFsdGllcyArIGluanVyaWVzLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzID0gdG90YWxseV9kYW1hZ2VkICsgcGFydGlhbGx5X2RhbWFnZWQsIA0KICAgICAgICAgd291bmRlZF9kZWFkXzEwMGsgPSByb3VuZCh3b3VuZGVkX2RlYWQgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSwgDQogICAgICAgICBkYW1hZ2VkX2hvdXNlc18xMDBrID0gcm91bmQoZGFtYWdlZF9ob3VzZXMgLyBwb3B1bGF0aW9uICogMTAwMDAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICAgIGxlZnRfam9pbihmc2wgJT4lIA0KICAgICAgICAgICAgICAgIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgICAgICAgICAgICAgICBncm91cF9ieShhZG1pbjNwY29kZSkgJT4lIA0KICAgICAgICAgICAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpLCANCiAgICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IHBvcHVsYXRpb24sIHkgPSBiZW5lZmljaWFyaWVzKSkgKyANCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IHdvdW5kZWRfZGVhZF8xMDBrKSkgKyANCiAgZ2VvbV90ZXh0X3JlcGVsKGFlcyhsYWJlbCA9IHN1Yl9kaXN0cmljdCksDQogICAgICAgICAgICAgICAgICAgcG9pbnQucGFkZGluZyA9IC41LCANCiAgICAgICAgICAgICAgICAgICBzZWdtZW50LmNvbG9yID0gImdyZXk1MCIsIHNpemUgPSAzKSArDQogIHNjYWxlX3hfbG9nMTAoYnJlYWtzID0gYygwLCAzMDAwLCAxMDAwMCwgMzAwMDAsIDEwMDAwMCwgMzAwMDAwLCAxMDAwMDAwKSwgDQogICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX3lfbG9nMTAoYnJlYWtzID0gYygwLCAxMDAwLCAzMDAwLCAxMDAwMCwgMzAwMDAsIDEwMDAwMCksDQogICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEpICsgDQogIHNjYWxlX3NpemUoYnJlYWtzID0gYygwLCAxMDAsIDUwMCwgMTAwMCwgMzAwMCkpICsNCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSwgY29sb3VyID0gImJsdWUiLCBzaXplID0gLjUpICsNCiAgbGFicyh0aXRsZSA9ICJQb3B1bGF0aW9uIGFuZCBNUEMgYmVuZWZpY2lhcmllcyBieSBzdWItZGlzdHJpY3QiLA0KICAgICAgIHN1YnRpdGxlID0gIlNpemUgaW5kaWNhdGVzIGRlYWQvd291bmRlZCBwZXIgMTAwLDAwMDAiLCANCiAgICAgICB4ID0gIlBvcHVsYXRpb24iLCANCiAgICAgICB5ID0gIkJlbmVmaWNpYXJpZXMiLCANCiAgICAgICBzaXplID0gIkRlYWQvd291bmRlZFxucGVyIDEwMGsiLCANCiAgICAgICBjYXB0aW9uID0gIkRhdGEgZnJvbSBBc3Npc3RhbmNlIENvb3JkaW5hdGlvbiBVbml0IGFuZCBGb29kIFNlY3VyaXR5IGFuZCBMaXZlbGlob29kcyBDbHVzdGVyIikgKw0KICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAuNSkpDQpgYGANCg0KPGJyPg0KDQpPdmVyYWxsLCB3ZSBzZWUgZmFpciBhbGlnbm1lbnQgYmV0d2VlbiB0aGUgbWFnbml0dWRlIG9mIHRoZSBuZWVkcyAodG90YWwgcG9wdWxhdGlvbikgYW5kIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyAtLSB0aGlzIGlzIGV2aWRlbmNlZCBieSB0aGUgYmx1ZSBsaW5lIHNob3dpbmcgYSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAuIA0KDQpIb3dldmVyLCB3ZSBkbyBub3RlIHNldmVyYWwgbWlzbWF0Y2hlcyAtLSBEYW5hIHNlZW1zIHRvIGhhdmUgcmVjZWl2ZWQgYW4gb3V0c2l6ZWQgc2hhcmUgb2YgYmVuZWZpY2lhcmllcywgZXNwZWNpYWxseSB3aGVuIGNvbnNpZGVyaW5nIHRoZSBjYXN1YWx0eSByYXRlLiBBbmQgS2FmciBUYWtoYXJpbSBzZWVtcyB0byBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlbGF0aXZlbHkgZmV3ZXIgcmVzb3VyY2VzIGluIGNvbXBhcmlzb24gdG8gdGhlIGRlYXRoIHRvbGwgdGhlcmUuIFRoZSByZXNwb25zZSBpbiBEYW5hIG1heSBiZSBleHBsYWluZWQgYnkgYSBudW1iZXIgb2YgdmFyaWFibGVzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZSBkYXRhIGNvbGxlY3RlZCBieSB0aGUgZWFydGhxdWFrZSByZXNwb25zZSB0cmFja2VyLCBzdWNoIGFzIHBvcHVsYXRpb24gbW92ZW1lbnRzLiBEaWQgZWFydGhxdWFrZSBzdXJ2aXZvcnMgZGlzcGxhY2UgdG8gRGFuYSB3aXRoIHRoZSBrbm93bGVkZ2UgdGhhdCBpdCB3YXMgYSB3ZWxsLXNlcnZlZCBhcmVhLCB3aGVyZSBhIG51bWJlciBvZiBwYXJ0bmVycyB3ZXJlIGFscmVhZHkgb3BlcmF0aW9uYWw/IFRoZSBDV0cgd2lsbCBjb25kdWN0IG1vcmUgY29uc3VsdGF0aW9ucyB3aXRoIHBhcnRuZXJzIHRvIHVuZGVyc3RhbmQgc3VjaCBkaXNwYXJpdGllcy4NCg0KDQo8YnI+PGJyPjxicj4NCg0KDQojIDQuIENhc2ggcmVzcG9uc2UgYWN0b3JzIGFuZCBjYXNoIGRpc2J1cnNlZA0KDQpJbiB0aGUgc2NhdHRlcnBsb3QgYmVsb3csIGVhY2ggcG9pbnQgaXMgYSBzaW5nbGUgY2FzaCB3b3JraW5nIGdyb3VwIHBhcnRuZXIuIFRoZSB4LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYmVuZWZpY2lhcmllcyByZWFjaGVkIHBlciBhZ2VuY3kgYW5kIHRoZSB5LWF4aXMgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29tbXVuaXRpZXMgKGFkbWluNCkgcmVhY2hlZC4gDQoNCjxicj4NCg0KYGBge3IgdG90YWxzLCBldmFsID0gRkFMU0V9DQoNCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgbXV0YXRlKHVzZF90b3RhbCA9IGZhbWlsaWVzICogcXVhbnRpdHkpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICB1c2RfdG90YWwgPSBzdW0odXNkX3RvdGFsLCBuYS5ybSA9IFRSVUUpKQ0KDQpgYGANCg0KDQoNCmBgYHtyIHBhcnRuZXItc2NhdHRlcn0NCnBhcnRuZXJfc2NhdHRlciA8LSBmc2wgJT4lIA0KICAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUsIA0KICAgICAgICAgICBhZG1pbjJwY29kZSwgDQogICAgICAgICAgIGFkbWluNHBjb2RlKSAlPiUgDQogIHNsaWNlKHdoaWNoLm1heChiZW5lZmljaWFyaWVzKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGJlbmVmaWNpYXJpZXMsIHkgPSBjb21tdW5pdGllcykpICsNCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IGJlbmVmaWNpYXJpZXMsIA0KICAgICAgICAgICAgICAgICB0ZXh0ID0gcGFzdGUwKHBhcnRuZXJfY29kZSwgIlxuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlbmVmaWNpYXJpZXM6ICIsIGZvcm1hdChiZW5lZmljaWFyaWVzLCBiaWcubWFyayA9ICIsIiksICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tdW5pdGllczogIiwgY29tbXVuaXRpZXMpKSkgKyANCiAgc2NhbGVfeF9sb2cxMChsYWJlbHMgPSBjb21tYSkgKyANCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArIA0KICBsYWJzKHggPSAiQmVuZWZpY2lhcmllcyByZWFjaGVkIiwgDQogICAgICAgeSA9ICJDb21tdW5pdGllcyAoYWRtaW40KSByZWFjaGVkIiwgDQogICAgICAgdGl0bGUgPSAiSW1wbGVtZW50aW5nIHBhcnRuZXJzIC0tIGJlbmVmaWNpYXJpZXMgYW5kIGNvbW11bml0aWVzIHJlYWNoZWQiKQ0KDQpnZ3Bsb3RseShwYXJ0bmVyX3NjYXR0ZXIsIHRvb2x0aXAgPSBjKCJ0ZXh0IikpICU+JSANCiAgbGF5b3V0KHNob3dsZWdlbmQgPSBUUlVFLCBsZWdlbmQgPSBsaXN0KGZvbnQgPSAobGlzdChzaXplID0gNikpKSkgJT4lIA0KICBwbG90bHk6OnN0eWxlKGhvdmVyb24gPSAicG9pbnQiKSAlPiUgDQogIGxheW91dCh0aXRsZSA9IGxpc3QodGV4dCA9IHBhc3RlMCgiQmVuZWZpY2lhcmllcyBhbmQgY29tbXVuaXRpZXMgcmVhY2hlZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHN1cD4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhc2ggcmVzcG9uc2UgaW1wbGVtZW50aW5nIHBhcnRuZXJzIiwiPC9zdXA+IikpKQ0KDQoNCmBgYA0KDQo8YnI+DQoNClVTRCBgciBwYXN0ZShmb3JtYXQocm91bmQoKGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgIHtzdW0oLiR1c2RfdG90YWwpfSkgLyAxMDAwMDAwLCAxKSwgdHJpbSA9IFRSVUUpLCAibWlsbGlvbiIpYCBoYXMgYmVlbiBkaXN0cmlidXRlZCBhY3Jvc3MgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUge25fZGlzdGluY3QoLiRhZG1pbjRwY29kZSl9YCBjb21tdW5pdGllcyBhbmQgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUge25fZGlzdGluY3QoLiRhZG1pbjNwY29kZSl9YCBzdWItZGlzdHJpY3RzIGluIE5XIFN5cmlhLg0KDQoNClRoZSB0YWJsZSBiZWxvdyBzdW1tYXJpc2VzIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc2NhdHRlcnBsb3QgYWJvdmUgaW4gdGFidWxhciBmb3JtOg0KDQo8YnI+DQoNCg0KDQpgYGB7cn0NCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlLCANCiAgICAgICAgICAgYWRtaW4ycGNvZGUsIA0KICAgICAgICAgICBhZG1pbjRwY29kZSkgJT4lIA0KICBzbGljZSh3aGljaC5tYXgoYmVuZWZpY2lhcmllcykpICU+JSANCiAgdW5ncm91cCgpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcl9jb2RlKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZGlzdHJpY3RzID0gbl9kaXN0aW5jdChhZG1pbjJwY29kZSksIA0KICAgICAgICAgICAgY29tbXVuaXRpZXMgPSBuX2Rpc3RpbmN0KGFkbWluNHBjb2RlKSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoYmVuZWZpY2lhcmllcykpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiUmVhY2ggYW5kIGZvb3RwcmludCBvZiBjYXNoIHJlc3BvbnNlIGFjdG9ycyIpICU+JSANCiAgdGhlbWVfemVicmEoKSAlPiUgDQogIHNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkgJT4lIA0KICBmb290bm90ZShhc19wYXJhZ3JhcGgoIk9ubHkgcGFydG5lcnMgd2hvIHByb3ZpZGVkIG1vcmUgdGhhbiBVU0QgMTAwL2ZhbWlseS9tb250aCIpLCANCiAgICAgICAgICAgaSA9IDEsIGogPSAxLCBwYXJ0ID0gImhlYWRlciIpDQogIA0KYGBgDQoNCg0KDQo8YnI+PGJyPg0KDQoNCg0KIyMgNC4xIFVTRCBkaXNidXJzZWQgYnkgcGFydG5lcg0KDQpUaGVyZSBpcyB2ZXJ5IGdvb2QgY29tcGxpYW5jZSB3aXRoIENXRyBzdGFuZGFyZHMgb24gdGhlIHRyYW5zZmVyIHZhbHVlcyBvZiBtdWx0aXB1cnBvc2UgY2FzaCBpbnRlcnZlbnRpb25zLCBhcyBjYW4gYmUgc2VlbiBieSB0aGUgYHVzZF9wZXJfZmFtYCBjb2x1bW4gaW4gdGhlIHRhYmxlIGJlbG93LiANCg0KPGJyPg0KDQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUpICU+JSANCiAgc3VtbWFyaXNlKHVzZF90b3RhbCA9IHN1bSh1c2RfdG90YWwsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgZmFtaWxpZXMgPSBzdW0oZmFtaWxpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKHVzZF9wZXJfZmFtID0gcm91bmQodXNkX3RvdGFsIC8gZmFtaWxpZXMsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIGAlX3VzZF90b3RhbGAgPSByb3VuZCh1c2RfdG90YWwgLyBzdW0odXNkX3RvdGFsKSAqIDEwMCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0cyA9IDIpKSAlPiUNCiAgYXJyYW5nZShkZXNjKHVzZF90b3RhbCkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiVVNEIGRpc2J1cnNlZCBhbmQgZmFtaWxpZXMgcmVhY2hlZCBieSBwYXJ0bmVyIikgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgZmxleHRhYmxlOjpzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjgpDQpgYGANCg0KDQo8YnI+DQoNCkJlbG93IGlzIGEgYnJlYWtkb3duIG9mIGJlbmVmaWNpYXJpZXMgYW5kIGZhbWlsaWVzIHJlYWNoZWQgYnkgY2FzaC1iYXNlZCBhY3Rpdml0aWVzIG9mIGFsbCB2YWx1ZXMsIG5vdCBqdXN0IHRob3NlIHRoYXQgcXVhbGlmeSBhcyBNUEMuIA0KDQo8YnI+DQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKHVuaXQgPT0gIlVTRCIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkodXNkX3RyYW5zZmVyX3ZhbHVlID0gcXVhbnRpdHkpICU+JSANCiAgc3VtbWFyaXNlKGZhbWlsaWVzID0gc3VtKGZhbWlsaWVzLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgICAgICAgYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShgJV9iZW5lZmljaWFyaWVzYCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyBzdW0oYmVuZWZpY2lhcmllcykgKiAxMDAsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIHVzZF90cmFuc2Zlcl92YWx1ZSA9IHBhc3RlMCgiJCIsIHVzZF90cmFuc2Zlcl92YWx1ZSkpICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X2NhcHRpb24oIlVTRCB0cmFuc2ZlciB2YWx1ZXMgZm9yIGFsbCBjYXNoLWJhc2VkIGFjdGl2aXRpZXMsIG5vdCBqdXN0IE1QQyIpICU+JSANCiAgZm9vdG5vdGUoaSA9IDEsIGogPSAzLCBwYXJ0ID0gImhlYWRlciIsIA0KICAgICAgICAgICBhc19wYXJhZ3JhcGgoIkRhdGEgZnJvbSB0aGUgRlNMIHRyYWNrZXIsIGFsbCBjYXNoIHJlc3BvbnNlIGFjdGl2aXRpZXMgcmVwb3J0ZWQiKSkgJT4lIA0KICBmbGV4dGFibGU6OnNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkNCmBgYA0KDQoNCjxicj48YnI+PGJyPg0KDQoNCiMgNS4gQ0NDTSBzaXRlIHRyYWNrZXIgLS0gc2VhcmNoYWJsZSB0YWJsZQ0KDQo8YnI+DQoNCkRhdGEgZnJvbSBbQ0NDTSBzaXRlIHRyYWNrZXJdKGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFEREJ2SVRkZzVuNGVDLWwzbTZXRWFMRTcyOTBlejloTS9lZGl0I2dpZD01NTQ4MDE5OTkpLiBFeHRyYWN0ZWQgMTUgTWFyY2ggMjAyMy4gDQoNCjxicj4NCg0KYGBge3IgZHR9DQpzaXRlcyAlPiUgDQogIHNlbGVjdChnb3Zlcm5vcmF0ZSwgDQogICAgICAgICBkaXN0cmljdCwgDQogICAgICAgICBzdWJfZGlzdHJpY3QsIA0KICAgICAgICAgY29tbXVuaXR5LCANCiAgICAgICAgIHNpdGVfbmFtZSwgDQogICAgICAgICBsb25naXR1ZGVfeCwNCiAgICAgICAgIGxhdGl0dWRlX3ksIA0KICAgICAgICAgZmFtaWxpZXMsIA0KICAgICAgICAgaW5kaXZpZHVhbHMsIA0KICAgICAgICAgZm9jYWxfcG9pbnQgPSBvcmdhbml6YXRpb25fbmFtZSwgDQogICAgICAgICBmb2NhbF9jb250YWN0ID0gcGhvbmUsIA0KICAgICAgICAgcGNvZGUgPSB0ZW1wX2NvZGUpICU+JSANCiAgZGF0YXRhYmxlKG9wdGlvbnMgPSBsaXN0KHBhZ2VMZW5ndGggPSAxMCwgc2Nyb2xsWCA9IFRSVUUpLCANCiAgICAgICAgICAgIGZpbHRlciA9IGxpc3QocG9zaXRpb24gPSAidG9wIiwgY2xlYXIgPSBGQUxTRSksDQogICAgICAgICAgICBjYXB0aW9uID0gaHRtbHRvb2xzOjp0YWdzJGNhcHRpb24oc3R5bGUgPSAnY2FwdGlvbi1zaWRlOiB0b3A7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6MTIwJSA7JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgdGFibGUgLS0gQ29sbGVjdGl2ZSBzaXRlcywgbGlzdCBtYWludGFpbmVkIGJ5IENDQ00iKSkgJT4lIA0KICBmb3JtYXRTdHlsZSgwLCB0YXJnZXQgPSAicm93IiwgbGluZUhlaWdodCA9ICI4MCUiLCBmb250U2l6ZSA9ICI4MCUiKQ0KICANCmBgYA0KDQoNCg0KDQoNCg0K