Dit document is een rapportage van een aantal geautomatiseerde checks op de TWN-lijst. De TWN-lijst bevat vaak inconsistenties die met deze rapportage worden geïdentificeerd.

Deze rapportage geldt voor de TWN-lijst van 2020-03-11.


Fouten in taxonname

In de onderstaande tabel staan enkele taxa waarvan (spel)fouten in de taxonname staan.


Synoniemen

Synoniemen die verwijzen naar andere synoniemen

In onderstaande tabel wordt weergegeven welke taxa met status 20 (Synoniem) verwijzen naar een synoniem in plaats van naar de correcte voorkeursnaam.

Synoniemen die verwijzen naar fouten

In onderstaande tabel wordt weergegeven welke taxa met status 20 (Synoniem) verwijzen naar TWN-fouten (status 91 of 92). Als de voorkeursnaam niet gebruikt dient te worden volgt daaruit dat het synoniem evenmin gebruikt dient te worden. Het zou daarom logisch zijn als deze ook de status 91 of 92 kreeg, ondanks het feit dat het betreffende taxon ook een synoniem is.


Duplicaten

In de TWN-lijst is een taxonnaam zelf niet uniek. Alleen de combinatie taxontype en taxonnaam is uniek. Hierdoor is het mogelijk dat een taxon bij verschillende taxontypen voorkomt waarbij de metadata van het taxon verschillend is. Dat kan leiden tot verwarring en is in een aantal gevallen ook een fout. Het zou zeer wenselijk zijn dat ieder taxon slechts eenmaal in de TWN-lijst voorkwam, omdat dit duidelijkheid schept. Dit beeld wordt verder versterkt door de grote hoeveelheid inconsistenties die voorkomen in de ca. 400 taxonnamen die meer dan 1 keer voorkomen.

  • De TWN-lijst bevat 26627 records.
  • In de TWN-lijst zijn 26627 unieke combinaties van taxontype en taxonname aanwezig.
  • Er zijn in de TWN-lijst 26176 unieke taxa aanwezig.
  • 401 taxa komen meer dan 1 keer voor in de TWN-lijst.

Afwijkende status

In onderstaande tabel is weergegeven welke taxa dubbel in de TWN-lijst voorkomen met een verschillende status. Een veel voorkomende reden hiervoor lijkt te zijn dat een bepaald taxon niet thuis hoort bij een bepaald taxontype. Dan is het taxon onder een ander taxontype ingedeeld en heeft het taxon onder het “verkeerde” taxontype de status 91 (TWN error - Do not use) gekregen. Dit wekt ten onrechte de suggestie dat je het taxon niet zou moeten gebruiken.

Dat veel taxa die dubbel voorkomen vaak de status 91 hebben lijkt een bewuste keuze te zijn. Er zijn ook nog enkele andere afwijkingen in de status van taxa die meer dan 1 keer voorkomen. Deze zijn voor de duidelijkheid nogmaals in onderstaande tabel weergegeven.

Afwijkende taxongroup

Afwijkend taxonlevel

Afwijkende parentname

Afwijkende voorkeurnaam

Afwijkende literatuur

Afwijkende Nederlandse naam

Afwijkende auteur


Parents

Check geldigheid namen

Worden er in de TWN-lijst parents genoemd die zelf niet in de TWN-lijst staan?

Check levels

Een parent van een taxon moet altijd een hoger taxonlevel hebben dan het taxon zelf.

Check status parents

Parents zouden in principe status 10 moeten hebben. Als een parent status 20 heeft wordt naar de verkeerde parent verwezen. Als de parent status 91 en 92 wordt naar een ongeldige parent verwezen. Een parent met status 30 of 80 dient nader onderzocht te worden.

LS0tDQp0aXRsZTogIlRXTiBjaGVja3MiDQphdXRob3I6ICJKb2hhbiB2YW4gVGVudCAoSEhTSykiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjc3M6IENTUy9tYXJrZG93bl9KVC5jc3MNCiAgICAjY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogVFJVRQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQobWVzc2FnZSA9IEZBTFNFLCBlY2hvID0gRkFMU0UpDQpvcHRpb25zKE91dERlYyA9ICIsIikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkodHduKQ0KDQpvcHRpb25zKERULm9wdGlvbnMgPSBsaXN0KA0KICBsYW5ndWFnZSA9IGxpc3QoDQogICAgcGFnaW5hdGUgPSBsaXN0KHByZXZpb3VzID0gJ1ZvcmlnZScsIGBuZXh0YCA9ICdWb2xnZW5kZScpLA0KICAgIHNlYXJjaCA9ICJab2VrZW4iLA0KICAgIGRlY2ltYWwgPSAiLCIsDQogICAgaW5mbyA9ICdSaWogX1NUQVJUXyB0b3QgX0VORF8gVG90YWFsOiBfVE9UQUxfIHJpamVuJywNCiAgICBsZW5ndGhNZW51ID0gIlRvb24gX01FTlVfIHJpamVuIg0KICApKSkNCg0KbXlfZGF0YXRhYmxlIDwtIGZ1bmN0aW9uKGRmLCAuLi4pIHsNCiAgZGF0YXRhYmxlKGRmLCAuLi4sIGV4dGVuc2lvbnMgPSAnQnV0dG9ucycsIA0KICAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAnbGZpcnRwQicsIGJ1dHRvbnMgPSBjKCdjc3YnLCAnZXhjZWwnLCAncGRmJykpKQ0KfQ0KDQpgYGANCg0KRGl0IGRvY3VtZW50IGlzIGVlbiByYXBwb3J0YWdlIHZhbiBlZW4gYWFudGFsIGdlYXV0b21hdGlzZWVyZGUgY2hlY2tzIG9wIGRlIFRXTi1saWpzdC4gRGUgVFdOLWxpanN0IGJldmF0IHZhYWsgaW5jb25zaXN0ZW50aWVzIGRpZSBtZXQgZGV6ZSByYXBwb3J0YWdlIHdvcmRlbiBnZcOvZGVudGlmaWNlZXJkLg0KDQpEZXplIHJhcHBvcnRhZ2UgZ2VsZHQgdm9vciBkZSBUV04tbGlqc3QgdmFuIGByIGF0dHIodHduX2xpanN0LCAiZGF0dW1fdHduX2xpanN0IilgLg0KDQotLS0NCg0KIyMgRm91dGVuIGluIHRheG9ubmFtZQ0KDQpJbiBkZSBvbmRlcnN0YWFuZGUgdGFiZWwgc3RhYW4gZW5rZWxlIHRheGEgd2FhcnZhbiAoc3BlbClmb3V0ZW4gaW4gZGUgdGF4b25uYW1lIHN0YWFuLg0KDQpgYGB7ciBmb3V0ZW5faW5fdGF4b25uYW1lfQ0KdHduX2xpanN0ICU+JSANCiAgZmlsdGVyKHRheG9ubmFtZSAlaW4lIGMoIlBva2FyeW90YSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiR29uYXRvenlnb24gYnJlYmlzc29uaWkgdmFyLiB2dWxnYXJlIFsyXV0iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAiR3lyeXN0YSBbMV0iKSkgJT4lIA0KICBzZWxlY3QodGF4b250eXBlLCB0YXhvbm5hbWUsIHRheG9ubGV2ZWwpICU+JSANCiAgbXlfZGF0YXRhYmxlKCkNCmBgYA0KDQotLS0NCg0KIyMgU3lub25pZW1lbg0KDQojIyMgU3lub25pZW1lbiBkaWUgdmVyd2lqemVuIG5hYXIgYW5kZXJlIHN5bm9uaWVtZW4NCg0KSW4gb25kZXJzdGFhbmRlIHRhYmVsIHdvcmR0IHdlZXJnZWdldmVuIHdlbGtlIHRheGEgbWV0IHN0YXR1cyAyMCAoU3lub25pZW0pIHZlcndpanplbiBuYWFyIGVlbiBzeW5vbmllbSBpbiBwbGFhdHMgdmFuIG5hYXIgZGUgY29ycmVjdGUgdm9vcmtldXJzbmFhbS4NCg0KYGBge3Igc3lub25pZW1lbl9uYWFyX3N5bm9uaWVtZW59DQoNCnR3bl9saWpzdCAlPiUgDQogIGZpbHRlcihzdGF0dXMgPT0gIjIwIikgJT4lIA0KICBtdXRhdGUodGF4b25uYWFtX3Zvb3JrZXVyID0gdHduX3Zvb3JrZXVybmFhbSh0YXhvbm5hbWUpLCANCiAgICAgICAgIHN0YXR1c192b29ya2V1ciA9IHR3bl9zdGF0dXModGF4b25uYWFtX3Zvb3JrZXVyKSkgJT4lIA0KICBmaWx0ZXIoc3RhdHVzX3Zvb3JrZXVyID09ICIyMCIpICU+JSANCiAgc2VsZWN0KHRheG9udHlwZSwgdGF4b25uYW1lLCBzdGF0dXMsIHRheG9ubmFhbV92b29ya2V1ciwgc3RhdHVzX3Zvb3JrZXVyKSAlPiUgDQogIG15X2RhdGF0YWJsZSgpDQoNCmBgYA0KDQojIyMgU3lub25pZW1lbiBkaWUgdmVyd2lqemVuIG5hYXIgZm91dGVuDQoNCkluIG9uZGVyc3RhYW5kZSB0YWJlbCB3b3JkdCB3ZWVyZ2VnZXZlbiB3ZWxrZSB0YXhhIG1ldCBzdGF0dXMgMjAgKFN5bm9uaWVtKSB2ZXJ3aWp6ZW4gbmFhciBUV04tZm91dGVuIChzdGF0dXMgOTEgb2YgOTIpLiBBbHMgZGUgdm9vcmtldXJzbmFhbSBuaWV0IGdlYnJ1aWt0IGRpZW50IHRlIHdvcmRlbiB2b2xndCBkYWFydWl0IGRhdCBoZXQgc3lub25pZW0gZXZlbm1pbiBnZWJydWlrdCBkaWVudCB0ZSB3b3JkZW4uIEhldCB6b3UgZGFhcm9tIGxvZ2lzY2ggemlqbiBhbHMgZGV6ZSBvb2sgZGUgc3RhdHVzIDkxIG9mIDkyIGtyZWVnLCBvbmRhbmtzIGhldCBmZWl0IGRhdCBoZXQgYmV0cmVmZmVuZGUgdGF4b24gKm9vayogZWVuIHN5bm9uaWVtIGlzLg0KDQpgYGB7ciBzeW5vbmllbWVuX25hYXJfZm91dGVufQ0KdHduX2xpanN0ICU+JSANCiAgZmlsdGVyKHN0YXR1cyA9PSAiMjAiKSAlPiUgDQogIG11dGF0ZSh0YXhvbm5hYW1fdm9vcmtldXIgPSB0d25fdm9vcmtldXJuYWFtKHRheG9ubmFtZSksIA0KICAgICAgICAgc3RhdHVzX3Zvb3JrZXVyID0gdHduX3N0YXR1cyh0YXhvbm5hYW1fdm9vcmtldXIpKSAlPiUgDQogIGZpbHRlcihzdGF0dXNfdm9vcmtldXIgJWluJSBjKCI5MSIsICI5MiIpKSAlPiUgDQogIHNlbGVjdCh0YXhvbnR5cGUsIHRheG9ubmFtZSwgc3RhdHVzLCB0YXhvbm5hYW1fdm9vcmtldXIsIHN0YXR1c192b29ya2V1cikgJT4lIA0KICBteV9kYXRhdGFibGUoKQ0KYGBgDQoNCg0KDQoNCg0KLS0tDQoNCiMjIER1cGxpY2F0ZW4gDQoNCmBgYHtyIGxpanN0X2R1cGxpY2F0ZW59DQpkdXBsaWNhdGVuIDwtIHR3bl9saWpzdCAlPiUgZ3JvdXBfYnkodGF4b25uYW1lKSAlPiUgY291bnQoKSAlPiUgZmlsdGVyKG4gPiAxKSAlPiUgLiR0YXhvbm5hbWUNCg0KdHduX2R1cGwgPC0gdHduX2xpanN0ICU+JSBmaWx0ZXIodGF4b25uYW1lICVpbiUgZHVwbGljYXRlbikNCg0KYGBgDQoNCkluIGRlIFRXTi1saWpzdCBpcyBlZW4gdGF4b25uYWFtIHplbGYgbmlldCB1bmllay4gQWxsZWVuIGRlIGNvbWJpbmF0aWUgdGF4b250eXBlIGVuIHRheG9ubmFhbSBpcyB1bmllay4gSGllcmRvb3IgaXMgaGV0IG1vZ2VsaWprIGRhdCBlZW4gdGF4b24gYmlqIHZlcnNjaGlsbGVuZGUgdGF4b250eXBlbiB2b29ya29tdCB3YWFyYmlqIGRlIG1ldGFkYXRhIHZhbiBoZXQgdGF4b24gdmVyc2NoaWxsZW5kIGlzLiBEYXQga2FuIGxlaWRlbiB0b3QgdmVyd2FycmluZyBlbiBpcyBpbiBlZW4gYWFudGFsIGdldmFsbGVuIG9vayBlZW4gZm91dC4gSGV0IHpvdSB6ZWVyIHdlbnNlbGlqayB6aWpuIGRhdCBpZWRlciB0YXhvbiBzbGVjaHRzIGVlbm1hYWwgaW4gZGUgVFdOLWxpanN0IHZvb3Jrd2FtLCBvbWRhdCBkaXQgZHVpZGVsaWpraGVpZCBzY2hlcHQuIERpdCBiZWVsZCB3b3JkdCB2ZXJkZXIgdmVyc3Rlcmt0IGRvb3IgZGUgZ3JvdGUgaG9ldmVlbGhlaWQgaW5jb25zaXN0ZW50aWVzIGRpZSB2b29ya29tZW4gaW4gZGUgY2EuIDQwMCB0YXhvbm5hbWVuIGRpZSBtZWVyIGRhbiAxIGtlZXIgdm9vcmtvbWVuLg0KDQotIERlIFRXTi1saWpzdCBiZXZhdCAqKmByIG5yb3codHduX2xpanN0KWAqKiByZWNvcmRzLg0KLSBJbiBkZSBUV04tbGlqc3QgemlqbiAqKmByIHR3bl9saWpzdCAlPiUgc2VsZWN0KHRheG9udHlwZSwgdGF4b25uYW1lKSAlPiUgZGlzdGluY3QoKSAlPiUgbnJvdygpYCoqIHVuaWVrZSBjb21iaW5hdGllcyB2YW4gdGF4b250eXBlIGVuIHRheG9ubmFtZSBhYW53ZXppZy4NCi0gRXIgemlqbiBpbiBkZSBUV04tbGlqc3QgKipgciBsZW5ndGgodW5pcXVlKHR3bl9saWpzdCR0YXhvbm5hbWUpKWAqKiB1bmlla2UgdGF4YSBhYW53ZXppZy4NCi0gKipgciBsZW5ndGgoZHVwbGljYXRlbilgKiogdGF4YSBrb21lbiBtZWVyIGRhbiAxIGtlZXIgdm9vciBpbiBkZSBUV04tbGlqc3QuDQoNCg0KDQojIyMgQWZ3aWprZW5kZSBzdGF0dXMNCg0KSW4gb25kZXJzdGFhbmRlIHRhYmVsIGlzIHdlZXJnZWdldmVuIHdlbGtlIHRheGEgZHViYmVsIGluIGRlIFRXTi1saWpzdCB2b29ya29tZW4gbWV0IGVlbiB2ZXJzY2hpbGxlbmRlIHN0YXR1cy4gRWVuIHZlZWwgdm9vcmtvbWVuZGUgcmVkZW4gaGllcnZvb3IgbGlqa3QgdGUgemlqbiBkYXQgZWVuIGJlcGFhbGQgdGF4b24gbmlldCB0aHVpcyBob29ydCBiaWogZWVuIGJlcGFhbGQgdGF4b250eXBlLiBEYW4gaXMgaGV0IHRheG9uIG9uZGVyIGVlbiBhbmRlciB0YXhvbnR5cGUgaW5nZWRlZWxkIGVuIGhlZWZ0IGhldCB0YXhvbiBvbmRlciBoZXQgInZlcmtlZXJkZSIgdGF4b250eXBlIGRlIHN0YXR1cyA5MSAoVFdOIGVycm9yIC0gRG8gbm90IHVzZSkgZ2VrcmVnZW4uIERpdCB3ZWt0IHRlbiBvbnJlY2h0ZSBkZSBzdWdnZXN0aWUgZGF0IGplIGhldCB0YXhvbiBuaWV0IHpvdSBtb2V0ZW4gZ2VicnVpa2VuLg0KDQpgYGB7ciBhZndpamtlbmRlX3N0YXR1c30NCmFmd2lqa2VuZGVfc3RhdHVzIDwtIA0KICB0d25fZHVwbCAlPiUgDQogIHNlbGVjdCh0YXhvbm5hbWUsIHN0YXR1cykgJT4lIA0KICBkaXN0aW5jdCgpICU+JSANCiAgZ3JvdXBfYnkodGF4b25uYW1lKSAlPiUgDQogIG11dGF0ZShuICA9IG4oKSAtIDEpICU+JSANCiAgZmlsdGVyKG4gPiAwKSAlPiUgDQogIHNwcmVhZChzdGF0dXMsIHZhbHVlID0gbikNCg0KbXlfZGF0YXRhYmxlKGFmd2lqa2VuZGVfc3RhdHVzKQ0KYGBgDQoNCkRhdCB2ZWVsIHRheGEgZGllIGR1YmJlbCB2b29ya29tZW4gdmFhayBkZSBzdGF0dXMgOTEgaGViYmVuIGxpamt0IGVlbiBiZXd1c3RlIGtldXplIHRlIHppam4uIEVyIHppam4gb29rIG5vZyBlbmtlbGUgYW5kZXJlIGFmd2lqa2luZ2VuIGluIGRlIHN0YXR1cyB2YW4gdGF4YSBkaWUgbWVlciBkYW4gMSBrZWVyIHZvb3Jrb21lbi4gRGV6ZSB6aWpuIHZvb3IgZGUgZHVpZGVsaWpraGVpZCBub2dtYWFscyBpbiBvbmRlcnN0YWFuZGUgdGFiZWwgd2VlcmdlZ2V2ZW4uDQoNCmBgYHtyIGFmd2lqa2VuZGVfc3RhdHVzMn0NCmFmd2lqa2VuZGVfc3RhdHVzICU+JSANCiAgZmlsdGVyKGlzLm5hKGA5MWApKSAlPiUgDQogIG15X2RhdGF0YWJsZSgpDQoNCmBgYA0KDQojIyMgQWZ3aWprZW5kZSB0YXhvbmdyb3VwDQoNCmBgYHtyIGFmd2lqa2VuZGVfdGF4b25ncm91cH0NCnR3bl9kdXBsICU+JSANCiAgc2VsZWN0KHRheG9ubmFtZSwgdGF4b25ncm91cCkgJT4lIA0KICBkaXN0aW5jdCgpICU+JSANCiAgZ3JvdXBfYnkodGF4b25uYW1lKSAlPiUgDQogIG11dGF0ZShuICA9IG4oKSAtIDEpICU+JSANCiAgZmlsdGVyKG4gPiAwKSAlPiUgDQogIHNlbGVjdCgtbikgJT4lIA0KICBteV9kYXRhdGFibGUoKQ0KDQpgYGANCg0KIyMjIEFmd2lqa2VuZCB0YXhvbmxldmVsDQoNCmBgYHtyIGFmd2lqa2VuZF90YXhvbmxldmVsfQ0KdHduX2R1cGwgJT4lIA0KICBzZWxlY3QodGF4b25uYW1lLCB0YXhvbmxldmVsKSAlPiUgDQogIGRpc3RpbmN0KCkgJT4lIA0KICBncm91cF9ieSh0YXhvbm5hbWUpICU+JSANCiAgbXV0YXRlKG4gID0gbigpIC0gMSkgJT4lIA0KICBmaWx0ZXIobiA+IDApICU+JSANCiAgc2VsZWN0KC1uKSAlPiUgDQogIG15X2RhdGF0YWJsZSgpDQoNCmBgYA0KDQojIyMgQWZ3aWprZW5kZSBwYXJlbnRuYW1lDQoNCmBgYHtyIGFmd2lqa2VuZGVfcGFyZW50fQ0KdHduX2R1cGwgJT4lIA0KICBzZWxlY3QodGF4b25uYW1lLCBwYXJlbnRuYW1lKSAlPiUgDQogIGRpc3RpbmN0KCkgJT4lIA0KICBncm91cF9ieSh0YXhvbm5hbWUpICU+JSANCiAgbXV0YXRlKG4gID0gbigpIC0gMSkgJT4lIA0KICBmaWx0ZXIobiA+IDApICU+JSANCiAgc2VsZWN0KC1uKSAlPiUgDQogIG15X2RhdGF0YWJsZSgpDQoNCmBgYA0KDQojIyMgQWZ3aWprZW5kZSB2b29ya2V1cm5hYW0NCg0KYGBge3IgYWZ3aWprZW5kZV92b29ya2V1cm5hYW19DQp0d25fZHVwbCAlPiUgDQogIHNlbGVjdCh0YXhvbm5hbWUsIHJlZmVybmFtZSkgJT4lIA0KICBkaXN0aW5jdCgpICU+JSANCiAgZ3JvdXBfYnkodGF4b25uYW1lKSAlPiUgDQogIG11dGF0ZShuICA9IG4oKSAtIDEpICU+JSANCiAgZmlsdGVyKG4gPiAwKSAlPiUgDQogIHNlbGVjdCgtbikgJT4lIA0KICBteV9kYXRhdGFibGUoKQ0KDQpgYGANCg0KIyMjIEFmd2lqa2VuZGUgbGl0ZXJhdHV1cg0KDQpgYGB7ciBhZndpamtlbmRlX2xpdGVyYXR1dXJ9DQp0d25fZHVwbCAlPiUgDQogIHNlbGVjdCh0YXhvbm5hbWUsIGxpdGVyYXR1cmUpICU+JSANCiAgZGlzdGluY3QoKSAlPiUgDQogIGdyb3VwX2J5KHRheG9ubmFtZSkgJT4lIA0KICBtdXRhdGUobiAgPSBuKCkgLSAxKSAlPiUgDQogIGZpbHRlcihuID4gMCkgJT4lIA0KICBzZWxlY3QoLW4pICU+JSANCiAgbXlfZGF0YXRhYmxlKCkNCg0KYGBgDQoNCiMjIyBBZndpamtlbmRlIE5lZGVybGFuZHNlIG5hYW0NCg0KYGBge3IgYWZ3aWprZW5kZV9sb2NhbG5hbWV9DQp0d25fZHVwbCAlPiUgDQogIHNlbGVjdCh0YXhvbm5hbWUsIGxvY2FsbmFtZSkgJT4lIA0KICBkaXN0aW5jdCgpICU+JSANCiAgZ3JvdXBfYnkodGF4b25uYW1lKSAlPiUgDQogIG11dGF0ZShuICA9IG4oKSAtIDEpICU+JSANCiAgZmlsdGVyKG4gPiAwKSAlPiUgDQogIHNlbGVjdCgtbikgJT4lIA0KICBteV9kYXRhdGFibGUoKQ0KDQpgYGANCg0KDQojIyMgQWZ3aWprZW5kZSBhdXRldXINCg0KYGBge3IgYWZ3aWprZW5kZV9hdXRldXJ9DQp0d25fZHVwbCAlPiUgDQogIHNlbGVjdCh0YXhvbm5hbWUsIGF1dGhvcikgJT4lIA0KICBkaXN0aW5jdCgpICU+JSANCiAgZ3JvdXBfYnkodGF4b25uYW1lKSAlPiUgDQogIG11dGF0ZShuICA9IG4oKSAtIDEpICU+JSANCiAgZmlsdGVyKG4gPiAwKSAlPiUgDQogIHNlbGVjdCgtbikgJT4lIA0KICBteV9kYXRhdGFibGUoKQ0KDQpgYGANCg0KIyMNCg0KLS0tDQoNCiMjIFBhcmVudHMNCg0KIyMjIENoZWNrIGdlbGRpZ2hlaWQgbmFtZW4NCg0KV29yZGVuIGVyIGluIGRlIFRXTi1saWpzdCBwYXJlbnRzIGdlbm9lbWQgZGllIHplbGYgbmlldCBpbiBkZSBUV04tbGlqc3Qgc3RhYW4/IA0KDQpgYGB7ciBjaGVja19wYXJlbnRuYW1lc30NCg0KdHduX25hbWVzIDwtIHR3bl9saWpzdCR0YXhvbm5hbWUNCg0KdHduX2xpanN0ICU+JSANCiAgZmlsdGVyKCFpcy5uYShwYXJlbnRuYW1lKSkgJT4lIA0KICBmaWx0ZXIoIXBhcmVudG5hbWUgJWluJSB0d25fbmFtZXMpICU+JSANCiAgc2VsZWN0KHRheG9udHlwZSwgdGF4b25uYW1lLCBwYXJlbnRuYW1lKSAlPiUgDQogIG15X2RhdGF0YWJsZSgpDQoNCmBgYA0KDQojIyMgQ2hlY2sgbGV2ZWxzDQoNCkVlbiBwYXJlbnQgdmFuIGVlbiB0YXhvbiBtb2V0IGFsdGlqZCBlZW4gaG9nZXIgdGF4b25sZXZlbCBoZWJiZW4gZGFuIGhldCB0YXhvbiB6ZWxmLiANCmBgYHtyIGNoZWNrX3BhcmVudGxldmVsc30NCiMgdGF4b25sZXZlbF92b2xnb3JkZSA8LSByZWFkcjo6cmVhZF9jc3YyKCIuLi8uLi9kYXRhLXJhdy90d24vdm9sZ29yZGVfdGF4b25sZXZlbHMuY3N2IikgJT4lIC4kdGF4b25sZXZlbA0KIyB0d25fbGlqc3QgPC0gdHduX2xpanN0ICU+JSBtdXRhdGUodGF4b25sZXZlbCA9IGZhY3Rvcih0YXhvbmxldmVsLCBsZXZlbHMgPSB0YXhvbmxldmVsX3ZvbGdvcmRlLCBvcmRlcmVkID0gVFJVRSkpDQoNCnR3bl9saWpzdCAlPiUgDQogIG11dGF0ZShwYXJlbnRsZXZlbCA9IHR3bl90YXhvbmxldmVsKHBhcmVudG5hbWUpKSAlPiUgDQogIGZpbHRlcih0YXhvbmxldmVsID49IHBhcmVudGxldmVsKSAlPiUgDQogIHNlbGVjdCh0YXhvbnR5cGUsIHRheG9ubmFtZSwgdGF4b25sZXZlbCwgcGFyZW50bmFtZSwgcGFyZW50bGV2ZWwpICU+JSANCiAgbXlfZGF0YXRhYmxlKCkNCg0KYGBgDQoNCg0KIyMjIENoZWNrIHN0YXR1cyBwYXJlbnRzDQoNClBhcmVudHMgem91ZGVuIGluIHByaW5jaXBlIHN0YXR1cyAxMCBtb2V0ZW4gaGViYmVuLiBBbHMgZWVuIHBhcmVudCBzdGF0dXMgMjAgaGVlZnQgd29yZHQgbmFhciBkZSB2ZXJrZWVyZGUgcGFyZW50IHZlcndlemVuLiBBbHMgZGUgcGFyZW50IHN0YXR1cyA5MSBlbiA5MiB3b3JkdCBuYWFyIGVlbiBvbmdlbGRpZ2UgcGFyZW50IHZlcndlemVuLiBFZW4gcGFyZW50IG1ldCBzdGF0dXMgMzAgb2YgODAgZGllbnQgbmFkZXIgb25kZXJ6b2NodCB0ZSB3b3JkZW4uDQoNCmBgYHtyIGNoZWNrX3BhcmVudF9zdGF0dXN9DQoNCnR3bl9saWpzdCAlPiUgDQogIGZpbHRlcighaXMubmEocGFyZW50bmFtZSkpICU+JSANCiAgbXV0YXRlKHBhcmVudF9zdGF0dXMgPSB0d25fc3RhdHVzKHBhcmVudG5hbWUpKSAlPiUgDQogIGZpbHRlcihwYXJlbnRfc3RhdHVzICE9IDEwKSAlPiUgDQogIHNlbGVjdCh0YXhvbnR5cGUsIHRheG9ubmFtZSwgcGFyZW50bmFtZSwgcGFyZW50X3N0YXR1cykgJT4lIA0KICBteV9kYXRhdGFibGUoKQ0KICAgIA0KICBgYGANCg0K