UNPKG

tox-susy-kss-playground

Version:
3 lines (2 loc) 93.5 kB
body{background-color:#f3c} /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5jc3MiLCJzb3VyY2VzIjpbIm1haW4uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3MvX3N1c3kuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9fc3VzeS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L19zdS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L3N1L191dGlsaXRpZXMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9zdS9fc2V0dGluZ3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9zdS9fdmFsaWRhdGlvbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L3N1L19ncmlkLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L19mbG9hdC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9fc2hhcmVkLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L19zdXBwb3J0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX3N1cHBvcnQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fcHJlZml4LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX2JhY2tncm91bmQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fYm94LXNpemluZy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19yZW0uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fY2xlYXJmaXguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19pbnNwZWN0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fb3V0cHV0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fZGlyZWN0aW9uLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fYmFja2dyb3VuZC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2NvbnRhaW5lci5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX21hcmdpbnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19wYWRkaW5nLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L2Zsb2F0L19jb250YWluZXIuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvZmxvYXQvX3NwYW4uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvZmxvYXQvX2VuZC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9mbG9hdC9faXNvbGF0ZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3NldHRpbmdzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fdmFsaWRhdGlvbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2dyaWRzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYm94LXNpemluZy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2NvbnRleHQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19iYWNrZ3JvdW5kLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fY29udGFpbmVyLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fc3Bhbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2d1dHRlcnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19pc29sYXRlLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fZ2FsbGVyeS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3Jvd3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19tYXJnaW5zLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fcGFkZGluZy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JsZWVkLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYnJlYWtwb2ludC1wbHVnaW4uc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0IFwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5XCI7XG5cbiR0ZXN0LXZhcjogI2YzYztcblxuYm9keSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICR0ZXN0LXZhcjtcbn1cbiIsIi8vIFN1c3lcbi8vID09PT1cblxuQGltcG9ydCAnc3VzeS9sYW5ndWFnZS9zdXN5JztcbiIsIi8vIFN1c3kgTmV4dCBTeW50YXhcbi8vID09PT09PT09PT09PT09PT1cblxuJHN1c3ktdmVyc2lvbjogMi4xO1xuXG5AaW1wb3J0IFwiLi4vc3VcIjtcbkBpbXBvcnQgXCIuLi9vdXRwdXQvZmxvYXRcIjtcblxuQGltcG9ydCBcInN1c3kvc2V0dGluZ3NcIjtcbkBpbXBvcnQgXCJzdXN5L3ZhbGlkYXRpb25cIjtcbkBpbXBvcnQgXCJzdXN5L2dyaWRzXCI7XG5AaW1wb3J0IFwic3VzeS9ib3gtc2l6aW5nXCI7XG5AaW1wb3J0IFwic3VzeS9jb250ZXh0XCI7XG5AaW1wb3J0IFwic3VzeS9iYWNrZ3JvdW5kXCI7XG5AaW1wb3J0IFwic3VzeS9jb250YWluZXJcIjtcbkBpbXBvcnQgXCJzdXN5L3NwYW5cIjtcbkBpbXBvcnQgXCJzdXN5L2d1dHRlcnNcIjtcbkBpbXBvcnQgXCJzdXN5L2lzb2xhdGVcIjtcbkBpbXBvcnQgXCJzdXN5L2dhbGxlcnlcIjtcbkBpbXBvcnQgXCJzdXN5L3Jvd3NcIjtcbkBpbXBvcnQgXCJzdXN5L21hcmdpbnNcIjtcbkBpbXBvcnQgXCJzdXN5L3BhZGRpbmdcIjtcbkBpbXBvcnQgXCJzdXN5L2JsZWVkXCI7XG5AaW1wb3J0IFwic3VzeS9icmVha3BvaW50LXBsdWdpblwiO1xuIiwiLy8gU3Vcbi8vID09XG5cbkBpbXBvcnQgXCJzdS91dGlsaXRpZXNcIjtcbkBpbXBvcnQgXCJzdS9zZXR0aW5nc1wiO1xuQGltcG9ydCBcInN1L3ZhbGlkYXRpb25cIjtcbkBpbXBvcnQgXCJzdS9ncmlkXCI7XG4iLCIvLyBNYXAgRnVuY3Rpb25zXG4vLyA9PT09PT09PT09PT09XG5cblxuLy8gVHJ1bmNhdGUgTGlzdFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gLSBSZXR1cm4gYSBsaXN0LCB0cnVuY2F0ZWQgdG8gYSBnaXZlbiBsZW5ndGhcbkBmdW5jdGlvbiBfc3VzeS10cnVuY2F0ZS1saXN0KFxuICAkbGlzdCxcbiAgJGxlbmd0aFxuKSB7XG4gICRfcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIGxlbmd0aCgkbGlzdCkge1xuICAgICRfcmV0dXJuOiBpZigkaSA8PSAkbGVuZ3RoLCBhcHBlbmQoJF9yZXR1cm4sIG50aCgkbGlzdCwgJGkpKSwgJF9yZXR1cm4pO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBEZWVwIEdldFxuLy8gLS0tLS0tLS1cbi8vIC0gUmV0dXJuIGEgdmFsdWUgZGVlcCBpbiBuZXN0ZWQgbWFwc1xuQGZ1bmN0aW9uIF9zdXN5LWRlZXAtZ2V0KFxuICAkbWFwLFxuICAka2V5cy4uLlxuKSB7XG4gICRfcmV0dXJuOiAkbWFwO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiB0eXBlLW9mKCRfcmV0dXJuKSA9PSBtYXAge1xuICAgICAgJF9yZXR1cm46IG1hcC1nZXQoJF9yZXR1cm4sICRrZXkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gRGVlcCBTZXRcbi8vIC0tLS0tLS0tXG4vLyAtIFNldCBhIHZhbHVlIGRlZXAgaW4gbmVzdGVkIG1hcHNcbkBmdW5jdGlvbiBfc3VzeS1kZWVwLXNldChcbiAgJG1hcCxcbiAgJGtleXMtdmFsdWUuLi5cbikge1xuICAkX3ZhbHVlOiBudGgoJGtleXMtdmFsdWUsIC0xKTtcbiAgJF9rZXlzOiBfc3VzeS10cnVuY2F0ZS1saXN0KCRrZXlzLXZhbHVlLCBsZW5ndGgoJGtleXMtdmFsdWUpIC0gMSk7XG4gICRfbGVuZ3RoOiBsZW5ndGgoJF9rZXlzKTtcbiAgJF9yZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJF9sZW5ndGgge1xuICAgICRfbjogMCAtICRpO1xuICAgICRfbGV2ZWw6IF9zdXN5LXRydW5jYXRlLWxpc3QoJF9rZXlzLCAkX2xlbmd0aCArICRfbik7XG4gICAgJF9sZXZlbDogX3N1c3ktZGVlcC1nZXQoJG1hcCwgJF9sZXZlbC4uLik7XG4gICAgJF9tZXJnZTogbnRoKCRfa2V5cywgJF9uKTtcbiAgICAkX21lcmdlOiAoJF9tZXJnZTogJF92YWx1ZSk7XG4gICAgJF9yZXR1cm46IGlmKCRfbGV2ZWwsIG1hcC1tZXJnZSgkX2xldmVsLCAkX21lcmdlKSwgJF9tZXJnZSk7XG4gICAgJF92YWx1ZTogJF9yZXR1cm47XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIERlZXAgTWVyZ2Vcbi8vIC0tLS0tLS0tLS1cbi8vIFJldHVybiAyIG9iamVjdHMgb2YgYW55IGRlcHRoLCBtZXJnZWRcbkBmdW5jdGlvbiBfc3VzeS1kZWVwLW1lcmdlKFxuICAkbWFwMSxcbiAgJG1hcDJcbikge1xuXG4gIEBpZiB0eXBlLW9mKCRtYXAxKSAhPSBtYXAgb3IgdHlwZS1vZigkbWFwMikgIT0gbWFwIHtcbiAgICAkbWFwMTogJG1hcDI7XG4gIH0gQGVsc2Uge1xuICAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkbWFwMiB7XG4gICAgICAkX25ldzogKCRrZXk6IF9zdXN5X2RlZXAtbWVyZ2UobWFwLWdldCgkbWFwMSwgJGtleSksICR2YWx1ZSkpO1xuICAgICAgJG1hcDE6IG1hcC1tZXJnZSgkbWFwMSwgJF9uZXcpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJG1hcDE7XG59XG5cblxuLy8gRGVlcCBIYXMtS2V5XG4vLyAtLS0tLS0tLS0tLS1cbi8vIC0gUmV0dXJuIHRydWUgaWYgYSBkZWVwIGtleSBleGlzdHNcbkBmdW5jdGlvbiBfc3VzeS1kZWVwLWhhcy1rZXkoXG4gICRtYXAsXG4gICRrZXlzLi4uXG4pIHtcbiAgJF9yZXR1cm46IG51bGw7XG4gICRfc3RvcDogZmFsc2U7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmIG5vdCgkX3N0b3ApIHtcbiAgICAgICRfcmV0dXJuOiBtYXAtaGFzLWtleSgkbWFwLCAka2V5KTtcbiAgICB9XG5cbiAgICBAaWYgJF9yZXR1cm4ge1xuICAgICAgJG1hcDogbWFwLWdldCgkbWFwLCAka2V5KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRfc3RvcDogdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuIiwiLy8gU2V0dGluZ3Ncbi8vID09PT09PT09XG5cbi8vIFZlcnNpb25cbi8vIC0tLS0tLS1cbiRzdS12ZXJzaW9uOiAxLjE7XG5cblxuLy8gRGVmYXVsdCBTZXR0aW5nc1xuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gUFJJVkFURTogVGhlIGJhc2ljIHNldHRpbmdzXG4kc3VzeS1kZWZhdWx0czogKFxuICBjb2x1bW5zOiA0LFxuICBndXR0ZXJzOiAuMjUsXG4pO1xuXG5cbi8vIFVzZXIgU2V0dGluZ3Ncbi8vIC0tLS0tLS0tLS0tLS1cbi8vIC0gRGVmaW5lIHRoZSAkc3VzeSB2YXJpYWJsZSB3aXRoIGEgbWFwIG9mIHlvdXIgb3duIHNldHRpbmdzLlxuLy8gLSBTZXQgRUlUSEVSICRjb2x1bW4td2lkdGggT1IgJGNvbnRhaW5lclxuLy8gLSBVc2UgJGNvbHVtbi13aWR0aCBmb3Igc3RhdGljIGxheW91dHNcbiRzdXN5OiAoKSAhZGVmYXVsdDtcblxuXG4vLyBTdXN5IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBQUklWQVRFOiBBZGQgZGVmYXVsdHMgdG8gU3VzeVxuQG1peGluIHN1c3ktZGVmYXVsdHMoXG4gICRkZWZhdWx0c1xuKSB7XG4gICRzdXN5LWRlZmF1bHRzOiBtYXAtbWVyZ2UoJHN1c3ktZGVmYXVsdHMsICRkZWZhdWx0cykgIWdsb2JhbDtcbn1cblxuXG4vLyBTdXN5IFNldFxuLy8gLS0tLS0tLS1cbi8vIENoYW5nZSBvbmUgc2V0dGluZ1xuLy8gLSAka2V5ICAgOiBzZXR0aW5nIG5hbWVcbi8vIC0gJHZhbHVlIDogc2V0dGluZyB2YWx1ZVxuQG1peGluIHN1c3ktc2V0KFxuICAka2V5LXZhbHVlLi4uXG4pIHtcbiAgJHN1c3k6IF9zdXN5LWRlZXAtc2V0KCRzdXN5LCAka2V5LXZhbHVlLi4uKSAhZ2xvYmFsO1xufVxuXG5cbi8vIFN1c3kgR2V0XG4vLyAtLS0tLS0tLVxuLy8gUmV0dXJuIG9uZSBzZXR0aW5nIGZyb20gYSBncmlkXG4vLyAtICRrZXkgICAgIDogPGtleXdvcmQ+XG4vLyAtICRsYXlvdXQgIDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIHN1c3ktZ2V0KFxuICAka2V5LFxuICAkbGF5b3V0OiBtYXAtbWVyZ2UoJHN1c3ktZGVmYXVsdHMsICRzdXN5KVxuKSB7XG4gICRsYXlvdXQ6IHBhcnNlLWdyaWQoJGxheW91dCk7XG4gICRfb3B0aW9uczogJGxheW91dCAkc3VzeSAkc3VzeS1kZWZhdWx0cztcbiAgJF9icmVhazogZmFsc2U7XG4gICRfcmV0dXJuOiBudWxsO1xuXG4gIEBlYWNoICRvcHQgaW4gJF9vcHRpb25zIHtcbiAgICBAaWYgdHlwZS1vZigkb3B0KSA9PSBtYXAgYW5kIG5vdCgkX2JyZWFrKSB7XG4gICAgICAkX2tleXNldDogX3N1c3ktZGVlcC1oYXMta2V5KCRvcHQsICRrZXkuLi4pO1xuICAgICAgQGlmICRfa2V5c2V0IHtcbiAgICAgICAgJF9yZXR1cm46IF9zdXN5LWRlZXAtZ2V0KCRvcHQsICRrZXkuLi4pO1xuICAgICAgICAkX2JyZWFrOiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG4iLCIvLyBNYXRoIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PVxuXG5cbi8vIFZhbGlkIENvbHVtbnNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIHRoYXQgYSBjb2x1bW4gc2V0dGluZyBpcyB2YWxpZC5cbkBmdW5jdGlvbiB2YWxpZC1jb2x1bW5zKFxuICAkY29sdW1ucyxcbiAgJHNpbGVudDogZmFsc2Vcbikge1xuICAkdHlwZTogdHlwZS1vZigkY29sdW1ucyk7XG4gICRyZXR1cm46IG51bGw7XG5cbiAgQGlmICR0eXBlID09IG51bWJlciBhbmQgdW5pdGxlc3MoJGNvbHVtbnMpIHtcbiAgICAkcmV0dXJuOiAkY29sdW1ucztcbiAgfSBAZWxzZSBpZiAkdHlwZSA9PSBsaXN0IHtcbiAgICAkZmFpbDogbnVsbDtcbiAgICBAZWFjaCAkY29sIGluICRjb2x1bW5zIHtcbiAgICAgIEBpZiB0eXBlLW9mKCRjb2wpID09IG51bWJlciB7XG4gICAgICAgICRmYWlsOiAkZmFpbCBvciBpZih1bml0bGVzcygkY29sKSwgbnVsbCwgdHJ1ZSk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJGZhaWw6IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgICRyZXR1cm46IGlmKCRmYWlsLCAkcmV0dXJuLCAkY29sdW1ucyk7XG4gIH1cblxuICBAaWYgJHJldHVybiAhPSAkY29sdW1ucyBhbmQgbm90KCRzaWxlbnQpIHtcbiAgICAkcmV0dXJuOiBudWxsO1xuICAgICR3YXJuOiAnJGNvbHVtbnMgbXVzdCBiZSBhIHVuaXRsZXNzIG51bWJlciBvciBsaXN0IG9mIHVuaXRsZXNzIG51bWJlcnMuJztcbiAgICBAd2FybiAkd2FybiArICcgQ3VycmVudCB2YWx1ZSBbI3skdHlwZX1dOiAjeyRjb2x1bW5zfSc7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG5cblxuLy8gVmFsaWQgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgdGhhdCBhIGd1dHRlciBzZXR0aW5nIGlzIHZhbGlkLlxuQGZ1bmN0aW9uIHZhbGlkLWd1dHRlcnMoXG4gICRndXR0ZXJzLFxuICAkc2lsZW50OiBmYWxzZVxuKSB7XG4gICR0eXBlOiB0eXBlLW9mKCRndXR0ZXJzKTtcbiAgJHJldHVybjogbnVsbDtcblxuICBAaWYgJHR5cGUgPT0gbnVtYmVyIGFuZCB1bml0bGVzcygkZ3V0dGVycykge1xuICAgICRyZXR1cm46ICRndXR0ZXJzO1xuICB9IEBlbHNlIGlmIG5vdCgkc2lsZW50KSB7XG4gICAgJHdhcm46ICckZ3V0dGVycyBtdXN0IGJlIGEgdW5pdGxlc3MgbnVtYmVyLic7XG4gICAgQHdhcm4gJHdhcm4gKyAnIEN1cnJlbnQgdmFsdWUgWyN7JHR5cGV9XTogI3skZ3V0dGVyc30nO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuIiwiLy8gQ29sdW1uIG1hdGhcbi8vID09PT09PT09PT09XG5cblxuLy8gSXMgU3ltbWV0cmljYWxcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm5zIHRydWUgaWYgYSBncmlkIGlzIHN5bW1ldHJpY2FsLlxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuQGZ1bmN0aW9uIGlzLXN5bW1ldHJpY2FsKFxuICAkY29sdW1uczogc3VzeS1nZXQoY29sdW1ucylcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gIEByZXR1cm4gaWYodHlwZS1vZigkY29sdW1ucykgPT0gbnVtYmVyLCAkY29sdW1ucywgbnVsbCk7XG59XG5cblxuLy8gU3VzeSBDb3VudFxuLy8gLS0tLS0tLS0tLVxuLy8gRmluZCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gYSBnaXZlbiBsYXlvdXRcbi8vIC0gWyRjb2x1bW5zXSAgIDogPG51bWJlcj4gfCA8bGlzdD5cbkBmdW5jdGlvbiBzdXN5LWNvdW50KFxuICAkY29sdW1uczogc3VzeS1nZXQoY29sdW1ucylcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gIEByZXR1cm4gaXMtc3ltbWV0cmljYWwoJGNvbHVtbnMpIG9yIGxlbmd0aCgkY29sdW1ucyk7XG59XG5cblxuLy8gU3VzeSBTdW1cbi8vIC0tLS0tLS0tXG4vLyBGaW5kIHRoZSB0b3RhbCBzdW0gb2YgY29sdW1uLXVuaXRzIGluIGEgbGF5b3V0XG4vLyAtIFskY29sdW1uc10gICA6IDxudW1iZXI+IHwgPGxpc3Q+XG4vLyAtIFskZ3V0dGVyc10gICA6IDxyYXRpbz5cbi8vIC0gWyRzcHJlYWRdICAgIDogZmFsc2UvbmFycm93IHwgd2lkZSB8IHdpZGVyXG5AZnVuY3Rpb24gc3VzeS1zdW0oXG4gICRjb2x1bW5zICA6IHN1c3ktZ2V0KGNvbHVtbnMpLFxuICAkZ3V0dGVycyAgOiBzdXN5LWdldChndXR0ZXJzKSxcbiAgJHNwcmVhZCAgIDogZmFsc2Vcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICRndXR0ZXJzOiB2YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcblxuICAkc3ByZWFkOiBpZigkc3ByZWFkID09IHdpZGUsIDAsIGlmKCRzcHJlYWQgPT0gd2lkZXIsIDEsIC0xKSk7XG4gICRndXR0ZXItc3VtOiAoc3VzeS1jb3VudCgkY29sdW1ucykgKyAkc3ByZWFkKSAqICRndXR0ZXJzO1xuICAkY29sdW1uLXN1bTogaXMtc3ltbWV0cmljYWwoJGNvbHVtbnMpO1xuXG4gIEBpZiBub3QoJGNvbHVtbi1zdW0pIHtcbiAgICBAZWFjaCAkY29sdW1uIGluICRjb2x1bW5zIHtcbiAgICAgICRjb2x1bW4tc3VtOiAoJGNvbHVtbi1zdW0gb3IgMCkgKyAkY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJGNvbHVtbi1zdW0gKyAkZ3V0dGVyLXN1bTtcbn1cblxuXG4vLyBTdXN5IFNsaWNlXG4vLyAtLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBzdWJzZXQgb2YgY29sdW1ucyBhdCBhIGdpdmVuIGxvY2F0aW9uLlxuLy8gLSAkc3BhbiAgICAgICAgOiA8bnVtYmVyPlxuLy8gLSAkbG9jYXRpb24gICAgOiA8bnVtYmVyPlxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuQGZ1bmN0aW9uIHN1c3ktc2xpY2UoXG4gICRzcGFuLFxuICAkbG9jYXRpb24sXG4gICRjb2x1bW5zOiBzdXN5LWdldChjb2x1bW5zKVxuKSB7XG4gICRjb2x1bW5zOiB2YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgJHN1Yi1jb2x1bW5zOiAkc3BhbjtcblxuICBAaWYgbm90KGlzLXN5bW1ldHJpY2FsKCRjb2x1bW5zKSkge1xuICAgICRsb2NhdGlvbjogJGxvY2F0aW9uIG9yIDE7XG4gICAgJHN1Yi1jb2x1bW5zOiAoKTtcbiAgICBAZm9yICRpIGZyb20gJGxvY2F0aW9uIHRvICgkbG9jYXRpb24gKyAkc3Bhbikge1xuICAgICAgJHN1Yi1jb2x1bW5zOiBhcHBlbmQoJHN1Yi1jb2x1bW5zLCBudGgoJGNvbHVtbnMsICRpKSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkc3ViLWNvbHVtbnM7XG59XG5cblxuLy8gU3VzeVxuLy8gLS0tLVxuLy8gRmluZCB0aGUgc3VtIG9mIGEgY29sdW1uLXNwYW4uXG4vLyAtICRzcGFuICAgICAgICA6IDxudW1iZXI+XG4vLyAtICRsb2NhdGlvbiAgICA6IDxudW1iZXI+XG4vLyAtIFskY29sdW1uc10gICA6IDxudW1iZXI+IHwgPGxpc3Q+XG4vLyAtIFskZ3V0dGVyc10gICA6IDxyYXRpbz5cbi8vIC0gWyRzcHJlYWRdICAgIDogZmFsc2UvbmFycm93IHwgd2lkZSB8IHdpZGVyXG5AZnVuY3Rpb24gc3VzeShcbiAgJHNwYW4sXG4gICRsb2NhdGlvbiAgICAgOiBmYWxzZSxcbiAgJGNvbHVtbnMgICAgICA6IHN1c3ktZ2V0KGNvbHVtbnMpLFxuICAkZ3V0dGVycyAgICAgIDogc3VzeS1nZXQoZ3V0dGVycyksXG4gICRzcHJlYWQgICAgICAgOiBmYWxzZVxuKSB7XG4gICRjb2x1bW5zOiB2YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgJGd1dHRlcnM6IHZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuICAkc3Bhbjogc3VzeS1zbGljZSgkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG5cbiAgQHJldHVybiBzdXN5LXN1bSgkc3BhbiwgJGd1dHRlcnMsICRzcHJlYWQpO1xufVxuIiwiLy8gRmxvYXQgQVBJXG4vLyA9PT09PT09PT1cblxuQGltcG9ydCBcInNoYXJlZFwiO1xuXG5AaW1wb3J0IFwiZmxvYXQvY29udGFpbmVyXCI7XG5AaW1wb3J0IFwiZmxvYXQvc3BhblwiO1xuQGltcG9ydCBcImZsb2F0L2VuZFwiO1xuQGltcG9ydCBcImZsb2F0L2lzb2xhdGVcIjtcbiIsIi8vIFNoYXJlZCBBUElcbi8vID09PT09PT09PT1cblxuQGltcG9ydCBcInN1cHBvcnRcIjtcblxuQGltcG9ydCBcInNoYXJlZC9pbnNwZWN0XCI7XG5AaW1wb3J0IFwic2hhcmVkL291dHB1dFwiO1xuQGltcG9ydCBcInNoYXJlZC9kaXJlY3Rpb25cIjtcbkBpbXBvcnQgXCJzaGFyZWQvYmFja2dyb3VuZFwiO1xuQGltcG9ydCBcInNoYXJlZC9jb250YWluZXJcIjtcbkBpbXBvcnQgXCJzaGFyZWQvbWFyZ2luc1wiO1xuQGltcG9ydCBcInNoYXJlZC9wYWRkaW5nXCI7XG5cblxuXG4iLCIvLyBTdXN5IEJyb3dzZXIgU3VwcG9ydFxuLy8gPT09PT09PT09PT09PT09PT09PT1cblxuQGltcG9ydCBcInN1cHBvcnQvc3VwcG9ydFwiO1xuQGltcG9ydCBcInN1cHBvcnQvcHJlZml4XCI7XG5AaW1wb3J0IFwic3VwcG9ydC9iYWNrZ3JvdW5kXCI7XG5AaW1wb3J0IFwic3VwcG9ydC9ib3gtc2l6aW5nXCI7XG5AaW1wb3J0IFwic3VwcG9ydC9yZW1cIjtcbkBpbXBvcnQgXCJzdXBwb3J0L2NsZWFyZml4XCI7XG4iLCIvLyBCcm93c2VyIFN1cHBvcnRcbi8vID09PT09PT09PT09PT09PVxuXG4vLyBTdXN5IFN1cHBvcnQgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIHVzZS1jdXN0b206IChcbiAgICBjbGVhcmZpeDogZmFsc2UsXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kLW9wdGlvbnM6IGZhbHNlLFxuICAgIGJyZWFrcG9pbnQ6IHRydWUsXG4gICAgYm94LXNpemluZzogdHJ1ZSxcbiAgICByZW06IHRydWUsXG4gICksXG4pKTtcblxuXG4vLyBTdXN5IFN1cHBvcnQgW21peGluXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlbmQgcHJvcGVydHktdmFsdWUgcGFpcnMgdG8gdGhlIHByb3BlciBzdXBwb3J0IG1vZHVsZXMuXG4vLyAtICRwcm9wICA6IDxjc3MgcHJvcGVydHk+XG4vLyAtICR2YWwgICA6IDxjc3MgdmFsdWU+XG5AbWl4aW4gc3VzeS1zdXBwb3J0KFxuICAkcHJvcCxcbiAgJHZhbFxuKSB7XG4gIC8vIEJhY2tncm91bmQgU3VwcG9ydFxuICBAaWYgJHByb3AgPT0gYmFja2dyb3VuZC1pbWFnZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1iYWNrZ3JvdW5kLWltYWdlKCR2YWwpO1xuICB9IEBlbHNlIGlmICRwcm9wID09IGJhY2tncm91bmQtc2l6ZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1iYWNrZ3JvdW5kLXNpemUoJHZhbCk7XG4gIH0gQGVsc2UgaWYgJHByb3AgPT0gYmFja2dyb3VuZC1vcmlnaW4ge1xuICAgIEBpbmNsdWRlIHN1c3ktYmFja2dyb3VuZC1vcmlnaW4oJHZhbCk7XG4gIH0gQGVsc2UgaWYgJHByb3AgPT0gYmFja2dyb3VuZC1jbGlwIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJhY2tncm91bmQtY2xpcCgkdmFsKTtcbiAgfVxuXG4gIC8vIEJveC1TaXppbmcgU3VwcG9ydFxuICBAZWxzZSBpZiAkcHJvcCA9PSBib3gtc2l6aW5nIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJveC1zaXppbmcoJHZhbCk7XG4gIH1cblxuICAvLyBSZW0gU3VwcG9ydFxuICBAZWxzZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1yZW0oJHByb3AsICR2YWwpO1xuICB9XG59XG5cblxuLy8gU3VzeSBTdXBwb3J0IFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3Igc3VwcG9ydCBvZiBhIGZlYXR1cmUuXG4vLyAtICRmZWF0dXJlICAgICAgIDogPHN0cmluZz5cbi8vICAgICAgICAgICAgICAgICAgICAtIGUuZyBcInJlbVwiIG9yIFwiYm94LXNpemluZ1wiXG4vLyAtICRyZXF1aXJlbWVudHMgIDogPG1hcD5cbi8vICAgICAgICAgICAgICAgICAgICAtIGUuZyAodmFyaWFibGU6IHJlbS13aXRoLXB4LWZhbGxiYWNrLCBtaXhpbjogcmVtKVxuLy8gLSAkd2FybiAgICAgICAgICA6IDxib29sPlxuQGZ1bmN0aW9uIHN1c3ktc3VwcG9ydChcbiAgJGZlYXR1cmUsXG4gICRyZXF1aXJlbWVudHM6ICgpLFxuICAkd2FybjogdHJ1ZVxuKSB7XG4gICRfc3VwcG9ydDogc3VzeS1nZXQodXNlLWN1c3RvbSAkZmVhdHVyZSk7XG5cbiAgQGlmICRfc3VwcG9ydCB7XG4gICAgJF9mYWlsOiBmYWxzZTtcblxuICAgIEBlYWNoICRfdHlwZSwgJF9yZXEgaW4gJHJlcXVpcmVtZW50cyB7XG4gICAgICBAZWFjaCAkX2kgaW4gJF9yZXEge1xuICAgICAgICAkX3Bhc3M6IGNhbGwodW5xdW90ZShcIiN7JF90eXBlfS1leGlzdHNcIiksICRfaSk7XG5cbiAgICAgICAgQGlmIG5vdCgkX3Bhc3MpIHtcbiAgICAgICAgICAkX2ZhaWw6IHRydWU7XG4gICAgICAgICAgQGlmICR3YXJuIHtcbiAgICAgICAgICAgIEB3YXJuIFwiWW91IHJlcXVlc3RlZCBjdXN0b20gc3VwcG9ydCBvZiAjeyRmZWF0dXJlfSwgYnV0IHRoZSAjeyRfaX0gI3skX3R5cGV9IGlzIG5vdCBhdmFpbGFibGUuXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJF9zdXBwb3J0OiBpZigkX2ZhaWwsIGZhbHNlLCAkX3N1cHBvcnQpO1xuICB9XG5cbiAgQHJldHVybiAkX3N1cHBvcnQ7XG59XG4iLCIvLyBTdXN5IFByZWZpeFxuLy8gPT09PT09PT09PT1cblxuLy8gUHJlZml4XG4vLyAtLS0tLS1cbi8vIE91dHB1dCBzaW1wbGUgcHJlZml4ZWQgcHJvcGVydGllcy5cbi8vIC0gJHByb3AgICAgICA6IDxjc3MgcHJvcGVydHk+XG4vLyAtICR2YWwgICAgICAgOiA8Y3NzIHZhbHVlPlxuLy8gLSBbJHByZWZpeF0gIDogPGJyb3dzZXIgcHJlZml4IGxpc3Q+XG5AbWl4aW4gc3VzeS1wcmVmaXgoXG4gICRwcm9wLFxuICAkdmFsLFxuICAkcHJlZml4OiBvZmZpY2lhbFxuKSB7XG4gIEBlYWNoICRmaXggaW4gJHByZWZpeCB7XG4gICAgJGZpeDogaWYoJGZpeCA9PSBvZmZpY2lhbCBvciBub3QoJGZpeCksICRwcm9wLCAnLSN7JGZpeH0tI3skcHJvcH0nKTtcbiAgICBAaW5jbHVkZSBzdXN5LXJlbSgkZml4LCAkdmFsKTtcbiAgfVxufVxuIiwiLy8gQmFja2dyb3VuZCBQcm9wZXJ0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT1cblxuLy8gU3VzeSBCYWNrZ3JvdW5kIEltYWdlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuLy8gLSAkaW1hZ2U6IDxiYWNrZ3JvdW5kLWltYWdlPlxuQG1peGluIHN1c3ktYmFja2dyb3VuZC1pbWFnZShcbiAgJGltYWdlXG4pIHtcbiAgQGlmIHN1c3ktc3VwcG9ydChiYWNrZ3JvdW5kLWltYWdlLCAobWl4aW46IGJhY2tncm91bmQtaW1hZ2UpLCAkd2FybjogZmFsc2UpIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWltYWdlKCRpbWFnZS4uLik7XG4gIH0gQGVsc2Uge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6ICRpbWFnZTtcbiAgfVxufVxuXG4vLyBTdXN5IEJhY2tncm91bmQgU2l6ZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJGltYWdlOiA8YmFja2dyb3VuZC1zaXplPlxuQG1peGluIHN1c3ktYmFja2dyb3VuZC1zaXplKFxuICAkc2l6ZVxuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYmFja2dyb3VuZC1vcHRpb25zLCAobWl4aW46IGJhY2tncm91bmQtc2l6ZSkpIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXNpemUoJHNpemUpO1xuICB9IEBlbHNlIHtcbiAgICBiYWNrZ3JvdW5kLXNpemU6ICRzaXplO1xuICB9XG59XG5cbi8vIFN1c3kgQmFja2dyb3VuZCBPcmlnaW5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuLy8gLSAkaW1hZ2U6IDxiYWNrZ3JvdW5kLW9yaWdpbj5cbkBtaXhpbiBzdXN5LWJhY2tncm91bmQtb3JpZ2luKFxuICAkb3JpZ2luXG4pIHtcbiAgQGlmIHN1c3ktc3VwcG9ydChiYWNrZ3JvdW5kLW9wdGlvbnMsIChtaXhpbjogYmFja2dyb3VuZC1vcmlnaW4pKSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1vcmlnaW4oJG9yaWdpbik7XG4gIH0gQGVsc2Uge1xuICAgIGJhY2tncm91bmQtb3JpZ2luOiAkb3JpZ2luO1xuICB9XG59XG5cbi8vIFN1c3kgQmFja2dyb3VuZCBDbGlwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG4vLyAtICRpbWFnZTogPGJhY2tncm91bmQtY2xpcD5cbkBtaXhpbiBzdXN5LWJhY2tncm91bmQtY2xpcChcbiAgJGNsaXBcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJhY2tncm91bmQtb3B0aW9ucywgKG1peGluOiBiYWNrZ3JvdW5kLWNsaXApKSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1jbGlwKCRjbGlwKTtcbiAgfSBAZWxzZSB7XG4gICAgYmFja2dyb3VuZC1jbGlwOiAkY2xpcDtcbiAgfVxufVxuIiwiLy8gQm94IFNpemluZ1xuLy8gPT09PT09PT09PVxuXG4vLyBCb3ggU2l6aW5nXG4vLyAtLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJG1vZGVsOiA8Ym94LXNpemluZz5cbkBtaXhpbiBzdXN5LWJveC1zaXppbmcoXG4gICRtb2RlbDogY29udGVudC1ib3hcbikge1xuICBAaWYgJG1vZGVsIHtcbiAgICBAaWYgc3VzeS1zdXBwb3J0KGJveC1zaXppbmcsIChtaXhpbjogYm94LXNpemluZyksICR3YXJuOiBmYWxzZSkge1xuICAgICAgQGluY2x1ZGUgYm94LXNpemluZygkbW9kZWwpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHByZWZpeDogKG1veiwgd2Via2l0LCBvZmZpY2lhbCk7XG4gICAgICBAaW5jbHVkZSBzdXN5LXByZWZpeChib3gtc2l6aW5nLCAkbW9kZWwsICRwcmVmaXgpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gcmVtIFN1cHBvcnRcbi8vID09PT09PT09PT09XG5cbi8vIHJlbVxuLy8gLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3Igb3V0cHV0IGRpcmVjdGx5LlxuLy8gLSAkcHJvcCAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgOiA8Y3NzIHZhbHVlPlxuQG1peGluIHN1c3ktcmVtKFxuICAkcHJvcCxcbiAgJHZhbFxuKSB7XG4gICRfcmVxczogKFxuICAgIHZhcmlhYmxlOiByaHl0aG0tdW5pdCByZW0td2l0aC1weC1mYWxsYmFjayxcbiAgICBtaXhpbjogcmVtLFxuICApO1xuICBAaWYgc3VzeS1zdXBwb3J0KHJlbSwgJF9yZXFzLCAkd2FybjogZmFsc2UpIGFuZCAkcmh5dGhtLXVuaXQgPT0gcmVtIHtcbiAgICBAaW5jbHVkZSByZW0oJHByb3AsICR2YWwpO1xuICB9IEBlbHNlIHtcbiAgICAjeyRwcm9wfTogJHZhbDtcbiAgfVxufVxuIiwiLy8gU3VzeSBGYWxsYmFjayBDbGVhcmZpeFxuLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG5cbi8vIENsZWFyZml4XG4vLyAtLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG5AbWl4aW4gc3VzeS1jbGVhcmZpeCB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoY2xlYXJmaXgsIChtaXhpbjogY2xlYXJmaXgpKSB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4gIH0gQGVsc2Uge1xuICAgICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCIgXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gRGVidWdnaW5nXG4vLyA9PT09PT09PT1cblxuLy8gU3VzeSBJbnNwZWN0XG4vLyAtLS0tLS0tLS0tLS1cbi8vIE91dHB1dCBhcmd1bWVudHMgcGFzc2VkIHRvIGEgaW5zcGVjdC5cbi8vIC0gJG1peGluICA6IDxzdXN5IG1peGluPlxuLy8gLSAkaW5zcGVjICAgOiA8bWl4aW4gYXJndW1lbnRzPlxuXG5AbWl4aW4gc3VzeS1pbnNwZWN0KFxuICAkbWl4aW4sXG4gICRpbnNwZWN0XG4pIHtcbiAgJHNob3c6IGZhbHNlO1xuXG4gIEBlYWNoICRpdGVtIGluICRpbnNwZWN0IHtcbiAgICBAaWYgaW5kZXgoJGl0ZW0sIGluc3BlY3QpIHtcbiAgICAgICRzaG93OiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEBpZiAkc2hvdyBvciBzdXN5LWdldChkZWJ1ZyBpbnNwZWN0KSB7XG4gICAgLXN1c3ktI3skbWl4aW59OiBpbnNwZWN0KCRpbnNwZWN0KTtcbiAgfVxufVxuIiwiLy8gT3V0cHV0XG4vLyA9PT09PT1cblxuLy8gT3V0cHV0XG4vLyAtLS0tLS1cbi8vIE91dHB1dCBDU1Mgd2l0aCBwcm9wZXIgYnJvd3NlciBzdXBwb3J0LlxuLy8gLSAkc3R5bGVzICA6IDxtYXAgb2YgY3NzIHByb3BlcnR5LXZhbHVlIHBhaXJzPlxuQG1peGluIG91dHB1dChcbiAgJHN0eWxlc1xuKSB7XG4gIEBlYWNoICRwcm9wLCAkdmFsIGluICRzdHlsZXMge1xuICAgIEBpbmNsdWRlIHN1c3ktc3VwcG9ydCgkcHJvcCwgJHZhbCk7XG4gIH1cbn1cbiIsIi8vIERpcmVjdGlvbiBIZWxwZXJzXG4vLyA9PT09PT09PT09PT09PT09PVxuXG4vLyBTdXN5IEZsb3cgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBQUklWQVRFXG5AaW5jbHVkZSBzdXN5LWRlZmF1bHRzKChcbiAgZmxvdzogbHRyLFxuKSk7XG5cbi8vIEdldCBEaXJlY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgJ2Zyb20nIG9yICd0bycgZGlyZWN0aW9uIG9mIGEgbHRyIG9yIHJ0bCBmbG93LlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuLy8gLSBbJGtleV0gICA6IGZyb20gfCB0b1xuQGZ1bmN0aW9uIGdldC1kaXJlY3Rpb24oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KSxcbiAgJGtleTogZnJvbVxuKSB7XG4gICRyZXR1cm46IGlmKCRmbG93ID09IHJ0bCwgKGZyb206IHJpZ2h0LCB0bzogbGVmdCksIChmcm9tOiBsZWZ0LCB0bzogcmlnaHQpKTtcbiAgQHJldHVybiBtYXAtZ2V0KCRyZXR1cm4sICRrZXkpO1xufVxuXG4vLyBUb1xuLy8gLS1cbi8vIFJldHVybiB0aGUgJ3RvJyBkaXJlY3Rpb24gb2YgYSBmbG93XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AZnVuY3Rpb24gdG8oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gIEByZXR1cm4gZ2V0LWRpcmVjdGlvbigkZmxvdywgdG8pO1xufVxuXG4vLyBGcm9tXG4vLyAtLS0tXG4vLyBSZXR1cm4gdGhlICdmcm9tJyBkaXJlY3Rpb24gb2YgYSBmbG93XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AZnVuY3Rpb24gZnJvbShcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgQHJldHVybiBnZXQtZGlyZWN0aW9uKCRmbG93LCBmcm9tKTtcbn1cbiIsIi8vIEdyaWQgQmFja2dyb3VuZCBBUElcbi8vID09PT09PT09PT09PT09PT09PT1cbi8vIC0gU3ViLXBpeGVsIHJvdW5kaW5nIGNhbiBsZWFkIHRvIHNldmVyYWwgcGl4ZWxzIHZhcmlhdGlvbiBiZXR3ZWVuIGJyb3dzZXJzLlxuXG4vLyBHcmlkIEJhY2tncm91bmQgT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRpbWFnZTogYmFja2dyb3VuZC1pbWFnZVxuLy8gLSAkc2l6ZTogYmFja2dyb3VuZC1zaXplXG4vLyAtICRjbGlwOiBiYWNrZ3JvdW5kLWNsaXBcbi8vIC0gWyRmbG93XTogbHRyIHwgcnRsXG5AbWl4aW4gYmFja2dyb3VuZC1ncmlkLW91dHB1dCAoXG4gICRpbWFnZSxcbiAgJHNpemU6IG51bGwsXG4gICRjbGlwOiBudWxsLFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkb3V0cHV0OiAoXG4gICAgYmFja2dyb3VuZC1pbWFnZTogJGltYWdlLFxuICAgIGJhY2tncm91bmQtc2l6ZTogJHNpemUsXG4gICAgYmFja2dyb3VuZC1vcmlnaW46ICRjbGlwLFxuICAgIGJhY2tncm91bmQtY2xpcDogJGNsaXAsXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogZnJvbSgkZmxvdykgdG9wLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIFNoYXJlZCBDb250YWluZXIgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09PVxuXG4vLyBDb250YWluZXIgT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFskd2lkdGhdICAgICAgICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGp1c3RpZnldICAgICAgIDogbGVmdCB8IGNlbnRlciB8IHJpZ2h0XG4vLyAtIFskbWF0aF0gICAgICAgICAgOiBmbHVpZCB8IHN0YXRpY1xuQG1peGluIGNvbnRhaW5lci1vdXRwdXQoXG4gICR3aWR0aCxcbiAgJGp1c3RpZnk6IGF1dG8gYXV0byxcbiAgJHByb3BlcnR5OiBtYXgtd2lkdGhcbikge1xuICAkb3V0cHV0OiAoXG4gICAgI3skcHJvcGVydHl9OiAkd2lkdGggb3IgMTAwJSxcbiAgICBtYXJnaW4tbGVmdDogbnRoKCRqdXN0aWZ5LCAxKSxcbiAgICBtYXJnaW4tcmlnaHQ6IG50aCgkanVzdGlmeSwgMiksXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gTWFyZ2lucyBBUElcbi8vID09PT09PT09PT09XG5cbi8vIE1hcmdpbiBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIC0gJGJlZm9yZSAgOiA8bGVuZ3RoPlxuLy8gLSAkYWZ0ZXIgICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gbWFyZ2luLW91dHB1dChcbiAgJGJlZm9yZSxcbiAgJGFmdGVyLFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkdG86IHRvKCRmbG93KTtcbiAgJGZyb206IGZyb20oJGZsb3cpO1xuXG4gICRvdXRwdXQ6IChcbiAgICBtYXJnaW4tI3skZnJvbX06ICRiZWZvcmUsXG4gICAgbWFyZ2luLSN7JHRvfTogJGFmdGVyLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIFBhZGRpbmcgQVBJXG4vLyA9PT09PT09PT09PVxuXG4vLyBQYWRkaW5nIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGJlZm9yZSAgOiA8bGVuZ3RoPlxuLy8gLSAkYWZ0ZXIgICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gcGFkZGluZy1vdXRwdXQoXG4gICRiZWZvcmUsXG4gICRhZnRlcixcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJHRvOiB0bygkZmxvdyk7XG4gICRmcm9tOiBmcm9tKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgcGFkZGluZy0jeyRmcm9tfTogJGJlZm9yZSxcbiAgICBwYWRkaW5nLSN7JHRvfTogJGFmdGVyLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIEZsb2F0IENvbnRhaW5lciBBUElcbi8vID09PT09PT09PT09PT09PT09PT1cblxuLy8gRmxvYXQgQ29udGFpbmVyXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIC0gWyR3aWR0aF0gICAgICAgICA6IDxsZW5ndGg+XG4vLyAtIFskanVzdGlmeV0gICAgICAgOiBsZWZ0IHwgY2VudGVyIHwgcmlnaHRcbi8vIC0gWyRtYXRoXSAgIDogZmx1aWQgfCBzdGF0aWNcbkBtaXhpbiBmbG9hdC1jb250YWluZXIoXG4gICR3aWR0aCxcbiAgJGp1c3RpZnk6IGF1dG8gYXV0byxcbiAgJHByb3BlcnR5OiBtYXgtd2lkdGhcbikge1xuICBAaW5jbHVkZSBzdXN5LWNsZWFyZml4O1xuICBAaW5jbHVkZSBjb250YWluZXItb3V0cHV0KCR3aWR0aCwgJGp1c3RpZnksICRwcm9wZXJ0eSk7XG59XG4iLCIvLyBGbG9hdCBTcGFuIEFQSVxuLy8gPT09PT09PT09PT09PT1cblxuLy8gRmxvYXQgU3BhbiBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICR3aWR0aCAgICAgICAgICAgICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvYXRdICAgICAgICAgICA6IGZyb20gfCB0b1xuLy8gLSBbJG1hcmdpbi1iZWZvcmVdICAgOiA8bGVuZ3RoPlxuLy8gLSBbJG1hcmdpbi1hZnRlcl0gICAgOiA8bGVuZ3RoPlxuLy8gLSBbJHBhZGRpbmctYmVmb3JlXSAgOiA8bGVuZ3RoPlxuLy8gLSBbJHBhZGRpbmctYWZ0ZXJdICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb3ddICAgICAgICAgICAgOiBsdHIgfCBydGxcbkBtaXhpbiBmbG9hdC1zcGFuLW91dHB1dChcbiAgJHdpZHRoLFxuICAkZmxvYXQgICAgICAgICAgICA6IGZyb20sXG4gICRtYXJnaW4tYmVmb3JlICAgIDogbnVsbCxcbiAgJG1hcmdpbi1hZnRlciAgICAgOiBudWxsLFxuICAkcGFkZGluZy1iZWZvcmUgICA6IG51bGwsXG4gICRwYWRkaW5nLWFmdGVyICAgIDogbnVsbCxcbiAgJGZsb3cgICAgICAgICAgICAgOiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICR0byAgICAgOiB0bygkZmxvdyk7XG4gICRmcm9tICAgOiBmcm9tKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgd2lkdGg6ICR3aWR0aCxcbiAgICBmbG9hdDogaWYoJGZsb2F0ID09IHRvLCAkdG8sIG51bGwpIG9yIGlmKCRmbG9hdCA9PSBmcm9tLCAkZnJvbSwgbnVsbCksXG4gICAgbWFyZ2luLSN7JGZyb219OiAkbWFyZ2luLWJlZm9yZSxcbiAgICBtYXJnaW4tI3skdG99OiAkbWFyZ2luLWFmdGVyLFxuICAgIHBhZGRpbmctI3skZnJvbX06ICRwYWRkaW5nLWJlZm9yZSxcbiAgICBwYWRkaW5nLSN7JHRvfTogJHBhZGRpbmctYWZ0ZXIsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gRmxvYXQgRW5kcyBBUElcbi8vID09PT09PT09PT09PT09XG5cbi8vIFN1c3kgRW5kIERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBQUklWQVRFXG5AaW5jbHVkZSBzdXN5LWRlZmF1bHRzKChcbiAgbGFzdC1mbG93OiB0byxcbikpO1xuXG4vLyBGbG9hdCBMYXN0XG4vLyAtLS0tLS0tLS0tXG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gZmxvYXQtbGFzdChcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpLFxuICAkbGFzdC1mbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBsYXN0LWZsb3cpLFxuICAkbWFyZ2luOiAwXG4pIHtcbiAgJHRvOiB0bygkZmxvdyk7XG5cbiAgJG91dHB1dDogKFxuICAgIGZsb2F0OiBpZigkbGFzdC1mbG93ID09IHRvLCAkdG8sIG51bGwpLFxuICAgIG1hcmdpbi0jeyR0b306ICRtYXJnaW4sXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuXG4vLyBGbG9hdCBGaXJzdFxuLy8gLS0tLS0tLS0tLS1cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBtaXhpbiBmbG9hdC1maXJzdChcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJG91dHB1dDogKFxuICAgIG1hcmdpbi0je2Zyb20oJGZsb3cpfTogMCxcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBGbG9hdCBJc29sYXRpb24gQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09XG5cbi8vIElzb2xhdGUgT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gLSAkcHVzaCAgICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gaXNvbGF0ZS1vdXRwdXQoXG4gICRwdXNoLFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkdG86IHRvKCRmbG93KTtcbiAgJGZyb206IGZyb20oJGZsb3cpO1xuXG4gICRvdXRwdXQ6IChcbiAgICBmbG9hdDogJGZyb20sXG4gICAgbWFyZ2luLSN7JGZyb219OiAkcHVzaCxcbiAgICBtYXJnaW4tI3skdG99OiAtMTAwJSxcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBTdXN5IFNldHRpbmdzXG4vLyA9PT09PT09PT09PT09XG5cbi8vIFN1c3kgTGFuZ3VhZ2UgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIGNvbnRhaW5lcjogYXV0byxcbiAgbWF0aDogZmx1aWQsXG4gIG91dHB1dDogZmxvYXQsXG4gIGNvbnRhaW5lci1wb3NpdGlvbjogY2VudGVyLFxuICBndXR0ZXItcG9zaXRpb246IGFmdGVyLFxuICBnbG9iYWwtYm94LXNpemluZzogY29udGVudC1ib3gsXG4gIGRlYnVnOiAoXG4gICAgaW1hZ2U6IGhpZGUsXG4gICAgY29sb3I6IHJnYmEoIzY2ZiwgLjI1KSxcbiAgICBvdXRwdXQ6IGJhY2tncm91bmQsXG4gICAgdG9nZ2xlOiB0b3AgcmlnaHQsXG4gICksXG4pKTtcblxuXG4vLyBWYWxpZCBLZXl3b3JkIFZhbHVlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURTogRE9OVCdUIFRPVUNIXG4kc3VzeS1rZXl3b3JkczogKFxuICBjb250YWluZXI6IGF1dG8sXG4gIG1hdGg6IHN0YXRpYyBmbHVpZCxcbiAgb3V0cHV0OiBpc29sYXRlIGZsb2F0LFxuICBjb250YWluZXItcG9zaXRpb246IGxlZnQgY2VudGVyIHJpZ2h0LFxuICBmbG93OiBsdHIgcnRsLFxuICBndXR0ZXItcG9zaXRpb246IGJlZm9yZSBhZnRlciBzcGxpdCBpbnNpZGUgaW5zaWRlLXN0YXRpYyxcbiAgYm94LXNpemluZzogYm9yZGVyLWJveCBjb250ZW50LWJveCxcbiAgc3BhbjogZnVsbCxcbiAgZWRnZTogZmlyc3QgYWxwaGEgbGFzdCBvbWVnYSBmdWxsLFxuICBzcHJlYWQ6IG5hcnJvdyB3aWRlIHdpZGVyLFxuICBndXR0ZXItb3ZlcnJpZGU6IG5vLWd1dHRlcnMgbm8tZ3V0dGVyLFxuICByb2xlOiBuZXN0LFxuICBjbGVhcjogYnJlYWsgbm9icmVhayxcbiAgZGVidWcgaW1hZ2U6IHNob3cgaGlkZSBzaG93LWNvbHVtbnMgc2hvdy1iYXNlbGluZSxcbiAgZGVidWcgb3V0cHV0OiBiYWNrZ3JvdW5kIG92ZXJsYXksXG4pO1xuXG5cbi8vIFBhcnNlIFN1c3kgS2V5d29yZHMgYW5kIE1hcHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1zZXR0aW5ncyhcbiAgJHNob3J0OiAkc3VzeVxuKSB7XG4gICRfcmV0dXJuOiAoKTtcblxuICBAaWYgdHlwZS1vZigkc2hvcnQpID09IG1hcCB7XG4gICAgJF9yZXR1cm46ICRzaG9ydDtcbiAgfSBAZWxzZSB7XG4gICAgQGVhY2ggJGl0ZW0gaW4gJHNob3J0IHtcbiAgICAgIC8vIHN0cmluZ3NcbiAgICAgIEBpZiB0eXBlLW9mKCRpdGVtKSA9PSBzdHJpbmcge1xuICAgICAgICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJHN1c3kta2V5d29yZHMge1xuICAgICAgICAgIEBpZiBpbmRleCgkdmFsdWUsICRpdGVtKSB7XG4gICAgICAgICAgICAkX2tleS12YWx1ZTogYXBwZW5kKCRrZXksICRpdGVtKTtcbiAgICAgICAgICAgICRfcmV0dXJuOiBfc3VzeS1kZWVwLXNldCgkX3JldHVybiwgJF9rZXktdmFsdWUuLi4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgLy8gbWFwc1xuICAgICAgfSBAZWxzZSBpZiB0eXBlLW9mKCRpdGVtKSA9PSBtYXAge1xuICAgICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAkaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBQYXJzZSBDb2x1bW5zICYgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1sYXlvdXQoXG4gICRzaG9ydFxuKSB7XG4gICRfcmV0dXJuOiAoKTtcbiAgJF9jb2x1bW5zOiAoKTtcbiAgJF9ndXR0ZXJzOiBudWxsO1xuXG4gIEBpZiBub3QodW5pdGxlc3MobnRoKG50aCgkc2hvcnQsIDEpLCAxKSkpIHtcbiAgICAkX2d1dHRlcnM6IG50aCgkc2hvcnQsIDEpO1xuICB9IEBlbHNlIHtcbiAgICAkX2NvbHVtbnM6IChjb2x1bW5zOiBudGgoJHNob3J0LCAxKSk7XG4gICAgJF9ndXR0ZXJzOiBpZihsZW5ndGgoJHNob3J0KSA+IDEsIG50aCgkc2hvcnQsIDIpLCAkX2d1dHRlcnMpO1xuICB9XG5cbiAgQGlmIHR5cGUtb2YoJF9ndXR0ZXJzKSA9PSBsaXN0IGFuZCBsZW5ndGgoJF9ndXR0ZXJzKSA+IDAge1xuICAgICRfZ3V0dGVyczogKFxuICAgICAgZ3V0dGVyczogbnRoKCRfZ3V0dGVycywgMikgLyBudGgoJF9ndXR0ZXJzLCAxKSxcbiAgICAgIGNvbHVtbi13aWR0aDogbnRoKCRfZ3V0dGVycywgMSksXG4gICAgKTtcbiAgfSBAZWxzZSB7XG4gICAgJF9ndXR0ZXJzOiBpZigkX2d1dHRlcnMsIChndXR0ZXJzOiAkX2d1dHRlcnMpLCAoKSk7XG4gIH1cblxuICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAkX2NvbHVtbnMpO1xuICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAkX2d1dHRlcnMpO1xuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gUGFyc2UgR3JpZC9Db250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1ncmlkKFxuICAkc2hvcnQ6ICRzdXN5XG4pIHtcbiAgJF9yZXR1cm46IHBhcnNlLXNldHRpbmdzKCRzaG9ydCk7XG4gICRfbGF5b3V0OiAoKTtcblxuICBAaWYgdHlwZS1vZigkc2hvcnQpID09IG1hcCB7XG4gICAgJF9yZXR1cm46ICRzaG9ydDtcbiAgfSBAZWxzZSB7XG4gICAgQGVhY2ggJGl0ZW0gaW4gJHNob3J0IHtcbiAgICAgIC8vIG51bWJlciBvciBsaXN0XG4gICAgICBAaWYgdHlwZS1vZigkaXRlbSkgPT0gbnVtYmVyIG9yIHR5cGUtb2YoJGl0ZW0pID09IGxpc3Qge1xuICAgICAgICBAaWYgdHlwZS1vZigkaXRlbSkgPT0gbGlzdCBvciB1bml0bGVzcygkaXRlbSkge1xuICAgICAgICAgICRfbGF5b3V0OiBhcHBlbmQoJF9sYXlvdXQsICRpdGVtKTtcbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGNvbnRhaW5lcjogJGl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRfbGF5b3V0OiBpZihsZW5ndGgoJF9sYXlvdXQpID4gMCwgcGFyc2UtbGF5b3V0KCRfbGF5b3V0KSwgJF9sYXlvdXQpO1xuICB9XG5cbiAgQHJldHVybiBtYXAtbWVyZ2UoJF9yZXR1cm4sICRfbGF5b3V0KTtcbn1cblxuXG4vLyBQYXJzZSBTcGFuXG4vLyAtLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2Utc3BhbihcbiAgJHNob3J0LFxuICAka2V5OiBzcGFuXG4pIHtcbiAgJF9yZXR1cm46ICgpO1xuXG4gIEBpZiB0eXBlLW9mKCRzaG9ydCkgPT0gbWFwIHtcbiAgICAkX3JldHVybjogJHNob3J0O1xuICB9IEBlbHNlIHtcbiAgICAkX2F0OiBpbmRleCgkc2hvcnQsIGF0KTtcblxuICAgIEBpZiAkX2F0IHtcbiAgICAgICRfbG9jaTogJF9hdCArIDE7XG4gICAgICAkX2xvY2F0aW9uOiBudGgoJHNob3J0LCAkX2xvY2kpO1xuICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGxvY2F0aW9uOiAkX2xvY2F0aW9uKSk7XG4gICAgICAkc2hvcnQ6IHNldC1udGgoJHNob3J0LCAkX2F0LCBudWxsKTtcbiAgICAgICRzaG9ydDogc2V0LW50aCgkc2hvcnQsICRfbG9jaSwgbnVsbCk7XG4gICAgfVxuXG4gICAgJF9pOiAxO1xuICAgICRfc3BhbjogKCk7XG5cbiAgICBAd2hpbGUgJF9pIDw9IGxlbmd0aCgkc2hvcnQpIHtcbiAgICAgICRfdGhpczogbnRoKCRzaG9ydCwgJF9pKTtcblxuICAgICAgQGlmIHR5cGUtb2YoJF90aGlzKSA9PSBudW1iZXIge1xuICAgICAgICAkX3NwYW46IGFwcGVuZCgkX3NwYW4sICRfdGhpcyk7XG4gICAgICAgICRzaG9ydDogc2V0LW50aCgkc2hvcnQsICRfaSwgbnVsbCk7XG4gICAgICB9IEBlbHNlIGlmICRfdGhpcyA9PSBvZiB7XG4gICAgICAgICRzaG9ydDogc2V0LW50aCgkc2hvcnQsICRfaSwgbnVsbCk7XG4gICAgICAgICRfaTogbGVuZ3RoKCRzaG9ydCkgKyAxO1xuICAgICAgfVxuXG4gICAgICAkX2k6ICRfaSArIDE7XG4gICAgfVxuXG4gICAgQGlmIGxlbmd0aCgkX3NwYW4pID4gMCB7XG4gICAgICAkX3NwYW46IGlmKGxlbmd0aCgkX3NwYW4pID09IDEsIG50aCgkX3NwYW4sIDEpLCAkX3NwYW4pO1xuICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKCRrZXk6ICRfc3BhbikpO1xuICAgIH1cblxuICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIHBhcnNlLWdyaWQoJHNob3J0KSk7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIFBhcnNlIEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1ndXR0ZXJzKFxuICAkc2hvcnQ6ICRzdXN5XG4pIHtcbiAgJF9ndXR0ZXJzOiBwYXJzZS1zcGFuKCRzaG9ydCwgZ3V0dGVyLW92ZXJyaWRlKTtcbiAgJF9zcGFuOiBzdXN5LWdldChndXR0ZXItb3ZlcnJpZGUsICRfZ3V0dGVycyk7XG5cbiAgQGlmICRfc3BhbiBhbmQgbm90KG1hcC1nZXQoJF9ndXR0ZXJzLCBjb2x1bW5zKSkge1xuICAgICRfY29udGV4dDogKCk7XG4gICAgJF9uZXc6ICgpO1xuXG4gICAgQGVhY2ggJGl0ZW0gaW4gJF9zcGFuIHtcbiAgICAgIEBpZiB0eXBlLW9mKCRpdGVtKSA9PSBudW1iZXIgYW5kIHVuaXRsZXNzKCRpdGVtKSB7XG4gICAgICAgICRfY29udGV4dDogYXBwZW5kKCRfY29udGV4dCwgJGl0ZW0pO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRfbmV3OiBhcHBlbmQoJF9uZXcsICRpdGVtKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkX2NvbnRleHQ6IHBhcnNlLWdyaWQoJF9jb250ZXh0KTtcbiAgICAkX25ldzogaWYobGVuZ3RoKCRfbmV3KSA9PSAwLCBudWxsLCAkX25ldyk7XG4gICAgJF9uZXc6IGlmKGxlbmd0aCgkX25ldykgPT0gMSwgbnRoKCRfbmV3LCAxKSwgJF9uZXcpO1xuICAgICRfbmV3OiAoZ3V0dGVyLW92ZXJyaWRlOiBpZigkX25ldyAhPSAkX3NwYW4sICRfbmV3LCAkX3NwYW4pKTtcblxuICAgICRfZ3V0dGVyczogbWFwLW1lcmdlKCRfZ3V0dGVycywgJF9uZXcpO1xuICAgICRfZ3V0dGVyczogbWFwLW1lcmdlKCRfZ3V0dGVycywgJF9jb250ZXh0KTtcbiAgfVxuXG4gIEByZXR1cm4gJF9ndXR0ZXJzO1xufVxuIiwiLy8gVmFsaWRhdGlvblxuLy8gPT09PT09PT09PVxuXG5cbi8vIFZhbGlkYXRlIENvbHVtbiBNYXRoXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuQGZ1bmN0aW9uIHZhbGlkLWNvbHVtbi1tYXRoKFxuICAkbWF0aCxcbiAgJGNvbHVtbi13aWR0aFxuKSB7XG4gIEBpZiAkbWF0aCA9PSBzdGF0aWMgYW5kIG5vdCgkY29sdW1uLXdpZHRoKSB7XG4gICAgQGVycm9yICdTdGF0aWMgbWF0aCByZXF1aXJlcyBhIHZhbGlkIGNvbHVtbi13aWR0aCBzZXR0aW5nLic7XG4gIH1cblxuICBAcmV0dXJuICRjb2x1bW4td2lkdGg7XG59XG4iLCIvLyBHcmlkIFN5bnRheFxuLy8gPT09PT09PT09PT1cblxuXG4vLyBMYXlvdXRcbi8vIC0tLS0tLVxuLy8gU2V0IGEgbmV3IGxheW91dCB1c2luZyBhIHNob3J0aGFuZFxuLy8gLSAkbGF5b3V0OiA8c2V0dGluZ3M+XG4vLyAtICRjbGVhbjogYm9vbGVhblxuQG1peGluIGxheW91dChcbiAgJGxheW91dCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRpbnNwZWN0ICA6ICRsYXlvdXQ7XG4gICRzdXN5ICAgICA6IF9nZXQtbGF5b3V0KCRsYXlvdXQsICRjbGVhbikgIWdsb2JhbDtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QobGF5b3V0LCAkaW5zcGVjdCk7XG59XG5cblxuLy8gVXNlIEdyaWRcbi8vIC0tLS0tLS0tXG4vLyBVc2UgYW4gYXJiaXRyYXJ5IGxheW91dCBmb3IgYSBzZWN0aW9uIG9mIGNvZGVcbi8vIC0gJGxheW91dDogPHNldHRpbmdzPlxuLy8gLSAkY2xlYW46IGJvb2xlYW5cbkBtaXhpbiB3aXRoLWxheW91dChcbiAgJGxheW91dCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRpbnNwZWN0ICA6ICRsYXlvdXQ7XG4gICRvbGQgICAgICA6ICRzdXN5O1xuICAkc3VzeSAgICAgOiBfZ2V0LWxheW91dCgkbGF5b3V0LCAkY2xlYW4pICFnbG9iYWw7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHdpdGgtbGF5b3V0LCAkaW5zcGVjdCk7XG5cbiAgQGNvbnRlbnQ7XG5cbiAgJHN1c3k6ICRvbGQgIWdsb2JhbDtcbn1cblxuXG4vLyBMYXlvdXRcbi8vIC0tLS0tLVxuLy8gUmV0dXJuIGEgcGFyc2VkIGxheW91dCBtYXAgYmFzZWQgb24gc2hvcnRoYW5kIHN5bnRheFxuLy8gLSAkbGF5b3V0OiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gbGF5b3V0KFxuICAkbGF5b3V0OiAkc3VzeVxuKSB7XG4gIEByZXR1cm4gcGFyc2UtZ3JpZCgkbGF5b3V0KTtcbn1cblxuXG4vLyBHZXQgTGF5b3V0XG4vLyAtLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBuZXcgbGF5b3V0IGJhc2VkIG9uIGN1cnJlbnQgYW5kIGdpdmVuIHNldHRpbmdzXG4vLyAtICRsYXlvdXQ6IDxzZXR0aW5ncz5cbi8vIC0gJGNsZWFuOiBib29sZWFuXG5AZnVuY3Rpb24gX2dldC1sYXlvdXQoXG4gICRsYXlvdXQsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkbGF5b3V0OiBsYXlvdXQoJGxheW91dCk7XG4gIEByZXR1cm4gaWYoJGNsZWFuLCAkbGF5b3V0LCBfc3VzeS1kZWVwLW1lcmdlKCRzdXN5LCAkbGF5b3V0KSk7XG59XG4iLCIvLyBTdXN5IEJveCBTaXppbmdcbi8vID09PT09PT09PT09PT09PT09XG5cbi8vIEdsb2JhbCBCb3ggU2l6aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2V0IGEgYm94IG1vZGVsIGdsb2JhbGx5IG9uIGFsbCBlbGVtZW50cy5cbi8vIC0gWyRib3hdOiBib3JkZXItYm94IHwgY29udGVudC1ib3hcbi8vIC0gWyRpbmhlcml0XTogdHJ1ZSB8IGZhbHNlXG5AbWl4aW4gZ2xvYmFsLWJveC1zaXppbmcoXG4gICRib3g6IHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSxcbiAgJGluaGVyaXQ6IGZhbHNlXG4pIHtcbiAgJGluc3BlY3Q6ICRib3g7XG5cbiAgQGlmICRpbmhlcml0IHtcbiAgICBAYXQtcm9vdCB7XG4gICAgICAgaHRtbCB7IEBpbmNsdWRlIG91dHB1dCgoYm94LXNpemluZzogJGJveCkpOyB9XG4gICAgICAgKiwgKjpiZWZvcmUsICo6YWZ0ZXIgeyBib3gtc2l6aW5nOiBpbmhlcml0OyB9XG4gICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgKiwgKjpiZWZvcmUsICo6YWZ0ZXIgeyBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6ICRib3gpKTsgfVxuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGdsb2JhbC1ib3gtc2l6aW5nLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHVwZGF0ZS1ib3gtbW9kZWwoJGJveCk7XG59XG5cbi8vIEJvcmRlciBCb3ggU2l6aW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gQSBsZWdhY3kgc2hvcnRjdXQuLi5cbi8vIC0gWyRpbmhlcml0XTogdHJ1ZSB8IGZhbHNlXG5AbWl4aW4gYm9yZGVyLWJveC1zaXppbmcoXG4gICRpbmhlcml0OiBmYWxzZVxuKSB7XG4gIEBpbmNsdWRlIGdsb2JhbC1ib3gtc2l6aW5nKGJvcmRlci1ib3gsICRpbmhlcml0KTtcbn1cblxuLy8gVXBkYXRlIEJveCBNb2RlbFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gUFJJVkFURTogVXBkYXRlcyBnbG9iYWwgYm94IG1vZGVsIHNldHRpbmdcbkBtaXhpbiB1cGRhdGUtYm94LW1vZGVsKFxuICAkYm94XG4pIHtcbiAgQGlmICRib3ggIT0gc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpIHtcbiAgQGluY2x1ZGUgc3VzeS1zZXQoZ2xvYmFsLWJveC1zaXppbmcsICRib3gpO1xuICB9XG59XG4iLCIvLyBDb250ZXh0IFN5bnRheFxuLy8gPT09PT09PT09PT09PT1cblxuLy8gTmVzdGVkIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBzdWJzZXQgZ3JpZCBmb3IgbmVzdGVkIGNvbnRleHQuXG4vLyAtICRjb250ZXh0ICAgOiA8c3Bhbj5cbkBmdW5jdGlvbiBuZXN0ZWQoXG4gICRjb250ZXh0XG4pIHtcbiAgJGNvbnRleHQgICAgOiBwYXJzZS1zcGFuKCRjb250ZXh0KTtcbiAgJHNwYW4gICAgICAgOiBzdXN5LWdldChzcGFuLCAkY29udGV4dCk7XG4gICRsb2NhdGlvbiAgIDogZ2V0LWxvY2F0aW9uKCRjb250ZXh0KTtcbiAgJGNvbHVtbnMgICAgOiBzdXN5LWdldChjb2x1bW5zLCAkY29udGV4dCk7XG5cbiAgQHJldHVybiBzdXN5LXNsaWNlKCRzcGFuLCAkbG9jYXRpb24sICRjb2x1bW5zKTtcbn1cblxuLy8gTmVzdGVkIFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyBVc2UgYSBzdWJzZXQgZ3JpZCBmb3IgYSBuZXN0ZWQgY29udGV4dFxuLy8gLSAkY29udGV4dCAgIDogPHNwYW4+XG4vLyAtIEBjb250ZW50ICAgOiA8Y29udGVudD5cbkBtaXhpbiBuZXN0ZWQoXG4gICRjb250ZXh0XG4pIHtcbiAgJGluc3BlY3QgIDogJGNvbnRleHQ7XG4gICRjb250ZXh0ICA6IHBhcnNlLXNwYW4oJGNvbnRleHQpO1xuICAkb2xkICAgICAgOiBzdXN5LWdldChjb2x1bW5zKTtcbiAgJHN1c3kgICAgIDogbWFwLW1lcmdlKCRzdXN5LCAoY29sdW1uczogbmVzdGVkKCRjb250ZXh0KSkpICFnbG9iYWw7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KG5lc3RlZCwgJGluc3BlY3QpO1xuICBAY29udGVudDtcblxuICAkc3VzeSAgICAgOiBtYXAtbWVyZ2UoJHN1c3ksIChjb2x1bW5zOiAkb2xkKSkgIWdsb2JhbDtcbn1cbiIsIi8vIEJhY2tncm91bmQgR3JpZCBTeW50YXhcbi8vID09PT09PT09PT09PT09PT09PT09PT1cblxuJHN1c3ktb3ZlcmxheS1ncmlkLWhlYWQtZXhpc3RzOiBmYWxzZTtcblxuXG4vLyBTaG93IEdyaWQvc1xuLy8gLS0tLS0tLS0tLS1cbi8vIFNob3cgZ3JpZCBvbiBhbnkgZWxlbWVudCB1c2luZyBlaXRoZXIgYmFja2dyb3VuZCBvciBvdmVybGF5LlxuLy8gLSBbJGdyaWRdICA6IDxzZXR0aW5ncz5cbkBtaXhpbiBzaG93LWdyaWQoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0OiAkZ3JpZDtcbiAgJF9vdXRwdXQ6IGRlYnVnLWdldChvdXRwdXQsICRncmlkKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc2hvdy1ncmlkLCAkaW5zcGVjdCk7XG4gIEBpZiAkX291dHB1dCA9PSBvdmVybGF5IGFuZCBzdXN5LWdldChkZWJ1ZyBpbWFnZSwgJGdyaWQpICE9IGhpZGUge1xuICAgIEBpbmNsdWRlIG92ZXJsYXktZ3JpZCgkZ3JpZCk7XG4gIH0gQGVsc2Uge1xuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtZ3JpZCgkZ3JpZCk7XG4gIH1cbn1cblxuQG1peGluIHNob3ctZ3JpZHMoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIHNob3ctZ3JpZCgkZ3JpZCk7XG59XG5cbi8vIEJhY2tncm91bmQgR3JpZFxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyBTaG93IGEgZ3JpZCBiYWNrZ3JvdW5kIG9uIGFueSBlbGVtZW50LlxuLy8gLSBbJGdyaWRdICA6IDxzZXR0aW5ncz5cbkBtaXhpbiBiYWNrZ3JvdW5kLWdyaWQoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICA6ICRncmlkO1xuICAkX291dHB1dCAgOiBnZXQtYmFja2dyb3VuZCgkZ3JpZCk7XG5cbiAgQGlmIGxlbmd0aCgkX291dHB1dCkgPiAwIHtcbiAgICAkX2Zsb3c6IHN1c3ktZ2V0KGZsb3csICRncmlkKTtcblxuICAgICRfaW1hZ2U6ICgpO1xuICAgIEBlYWNoICRuYW1lLCAkbGF5ZXIgaW4gbWFwLWdldCgkX291dHB1dCwgaW1hZ2UpIHtcbiAgICAgICRfZGlyZWN0aW9uOiBpZigkbmFtZSA9PSBiYXNlbGluZSwgdG8gYm90dG9tLCB0byB0bygkX2Zsb3cpKTtcbiAgICAgICRfaW1hZ2U6IGFwcGVuZCgkX2ltYWdlLCBsaW5lYXItZ3JhZGllbnQoJF9kaXJlY3Rpb24sICRsYXllciksIGNvbW1hKTtcbiAgICB9XG4gICAgJF9vdXRwdXQ6IG1hcC1tZXJnZSgkX291dHB1dCwgKGltYWdlOiAkX2ltYWdlKSk7XG5cbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWdyaWQtb3V0cHV0KCRfb3V0cHV0Li4uKTtcbiAgICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoYmFja2dyb3VuZC1ncmlkLCAkaW5zcGVjdCk7XG4gIH1cbn1cblxuXG4vLyBPdmVybGF5IEdyaWRcbi8vIC0tLS0tLS0tLS0tLVxuLy8gR2VuZXJhdGUgYW4gaWNvbiB0byB0cmlnZ2VyIGdyaWQtb3ZlcmxheXMgb24gYW55IGdpdmVuIGVsZW1lbnRzLlxuLy8gJGdyaWRzLi4uICA6IDxzZWxlY3Rvcj4gWzxzZXR0aW5ncz5dIFssIDxzZWxlY3Rvcj5dKlxuQG1peGluIG92ZXJsYXktZ3JpZCAoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gIEBpZiBub3QoJHN1c3ktb3ZlcmxheS1ncmlkLWhlYWQtZXhpc3RzKSB7XG4gICAgQGF0LXJvb3QgaGVhZCB7IEBpbmNsdWRlIG92ZXJsYXktaGVhZCgkZ3JpZCk7IH1cbiAgICBAYXQtcm9vdCBoZWFkOmJlZm9yZSB7IEBpbmNsdWRlIG92ZXJsYXktdHJpZ2dlcjsgfVxuICAgIEBhdC1yb290IGhlYWQ6aG92ZXIgeyBAaW5jbHVkZSBvdmVybGF5LXRyaWdnZXItaG92ZXI7IH1cbiAgICAkc3VzeS1vdmVybGF5LWdyaWQtaGVhZC1leGlzdHM6IHRydWUgIWdsb2JhbDtcbiAgfVxuXG4gIGhlYWQ6aG92ZXIgfiAmLFxuICBoZWFkOmhvdmVyIH4gYm9keSAmIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgJjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgZ3JpZC1vdmVybGF5LWJhc2U7XG4gICAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWdyaWQoJGdyaWQpO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFtQcml2YXRlXSBPdmVybGF5IFRyaWdnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBtaXhpbiBvdmVybGF5LXRyaWdnZXIge1xuICBjb250ZW50OiBcInx8fFwiO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogNXB4IDEwcHg7XG4gIGZvbnQ6IHtcbiAgICBmYW1pbHk6IHNhbnMtc2VyaWY7XG4gICAgc2l6ZTogMTZweDtcbiAgICB3ZWlnaHQ6IGJvbGQ7XG4gIH1cbn1cblxuXG4vLyBbUHJpdmF0ZV0gT3ZlcmxheSBUcmlnZ2VyIEhvdmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AbWl4aW4gb3ZlcmxheS10cmlnZ2VyLWhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSh3aGl0ZSwgLjUpO1xuICBjb2xvcjogcmVkO1xufVxuXG5cbi8vIFtQcml2YXRlXSBPdmVybGF5IEhlYWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIDxoZWFkPiBzdHlsZXMgdG8gY3JlYXRlIGdyaWQgb3ZlcmxheSB0b2dnbGVcbkBtaXhpbiBvdmVybGF5LWhlYWQgKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICAkX3RvZ2dsZTogZGVidWctZ2V0KHRvZ2dsZSwgJGdyaWQpO1xuICAkX2hvcno6IG51bGw7XG4gICRfdmVydDogbnVsbDtcblxuICBAZWFjaCAkc2lkZSBpbiAkX3RvZ2dsZSB7XG4gICAgJF9ob3J6OiBpZigkc2lkZSA9PSBsZWZ0IG9yICRzaWRlID09IHJpZ2h0LCAkc2lkZSwgJF9ob3J6KTtcbiAgICAkX3ZlcnQ6IGlmKCRzaWRlID09IHRvcCBvciAkc2lkZSA9PSBib3R0b20sICRzaWRlLCAkX3ZlcnQpO1xuICB9XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgI3skX2hvcnp9OiAxMHB4O1xuICAjeyRfdmVydH06IDEwcHg7XG4gIHotaW5kZXg6IDk5OTtcbiAgY29sb3I6ICMzMzM7XG4gIGJhY2tncm91bmQ6IHJnYmEod2hpdGUsIC4yNSk7XG59XG5cblxuLy8gW1ByaXZhdGVdIEdyaWQgT3ZlcmxheSBCYXNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJhc2Ugc3R5bGVzIGZvciBnZW5lcmF0aW5nIGEgZ3JpZCBvdmVybGF5XG5AbWl4aW4gZ3JpZC1vdmVybGF5LWJhc2UoKSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIHJpZ2h0OiAwO1xuICBjb250ZW50OiBcIiBcIjtcbiAgei1pbmRleDogOTk4O1xufVxuXG5cbi8vIEdldCBTeW1tZXRyaWNhbCBCYWNrZ3JvdW5kXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPG1hcD5cbkBmdW5jdGlvbiBnZXQtYmFja2dyb3VuZC1zeW0oXG4gICRncmlkXG4pIHtcbiAgJGdyaWQgICAgICAgICAgIDogcGFyc2UtZ3JpZCgkZ3JpZCk7XG4gICRfZ3V0dGVycyAgICAgICA6IHN1c3ktZ2V0KGd1dHRlcnMsICRncmlkKTtcbiAgJF9jb2x1bW4td2lkdGggIDogc3VzeS1nZXQoY29sdW1uLXdpZHRoLCAkZ3JpZCk7XG4gICRfbWF0aCAgICAgICAgICA6IHN1c3ktZ2V0KG1hdGgsICRncmlkKTtcblxuICAkX2NvbG9yICAgICAgICAgOiBkZWJ1Zy1nZXQoY29sb3IpO1xuICAkX3RyYW5zICAgICAgICAgOiB0cmFuc3BhcmVudDtcbiAgJF9saWdodCAgICAgICAgIDogbGlnaHRlbigkX2NvbG9yLCAxNSUpO1xuXG4gICRfZW5kICAgICAgICAgICA6IDEgKyAkX2d1dHRlcnM7XG4gICRfYWZ0ZXIgICAgICAgICA6IHBlcmNlbnRhZ2UoMS8kX2VuZCk7XG4gICRfc3RvcHMgICAgICAgICA6ICgpO1xuICAkX3NpemUgICAgICAgICAgOiBzcGFuKDEgJGdyaWQgd2lkZSk7XG5cbiAgQGlmIGlzLWluc2lkZSgkZ3JpZCkge1xuICAgICRfc3RvcHM6ICRfY29sb3IsICRfbGlnaHQ7XG4gIH0gQGVsc2UgaWYgaXMtc3BsaXQoJGdyaWQpIHtcbiAgICAkX3NwbGl0OiAkX2d1dHRlcnMvMjtcbiAgICAkX2JlZm9yZTogcGVyY2VudGFnZSgkX3NwbGl0LyRfZW5kKTtcbiAgICAkX2FmdGVyOiBwZXJjZW50YWdlKCgxICsgJF9zcGxpdCkvJF9lbmQpO1xuICAgICRfc3RvcHM6ICRfdHJhbnMgJF9iZWZvcmUsICRfY29sb3IgJF9iZWZvcmUsICRfbGlnaHQgJF9hZnRlciwgJF90cmFucyAkX2FmdGVyO1xuICB9IEBlbHNlIHtcbiAgICAkX3N0b3BzOiAkX2NvbG9yLCAkX2xpZ2h0ICRfYWZ0ZXIsICRfdHJhbnMgJF9hZnRlcjtcbiAgfVxuXG4gIEBpZiAkX21hdGggPT0gc3RhdGljIHtcbiAgICAkX3NpemU6IHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpICogJF9lbmQ7XG4gIH1cblxuICAkX291dHB1dDogKFxuICAgIGltYWdlOiAoY29sdW1uczogJF9zdG9wcyksXG4gICAgc2l6ZTogJF9zaXplLFxuICApO1xuXG4gIEByZXR1cm4gJF9vdXRwdXQ7XG59XG5cblxuLy8gR2V0IEFzeW1tZXRyaWNhbCBJbnNpZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWFzeW0taW5zaWRlKFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkZ3JpZCk7XG5cbiAgJF9jb2xvciAgIDogZGVidWctZ2V0KGNvbG9yKTtcbiAgJF9saWdodCAgIDogbGlnaHRlbigkX2NvbG9yLCAxNSUpO1xuICAkX3N0b3BzICAgOiAoKTtcblxuICBAZm9yICRsb2NhdGlvbiBmcm9tIDEgdGhyb3VnaCBzdXN5LWNvdW50KCRfY29sdW1ucykge1xuICAgICR0aGlzLXN0b3A6ICgpO1xuXG4gICAgQGlmICRsb2NhdGlvbiA9PSAxIHtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2NvbG9yLCBjb21tYSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkc3RhcnQ6IHBhcnNlLXNwYW4oMSBhdCAkbG9jYXRpb24gJGdyaWQpO1xuICAgICAgJHN0YXJ0OiBnZXQtaXNvbGF0aW9uKCRzdGFydCk7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9jb2xvciAkc3RhcnQsIGNvbW1hKTtcbiAgICB9XG5cbiAgICBAaWYgJGxvY2F0aW9uID09IHN1c3ktY291bnQoJF9jb2x1bW5zKSB7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9saWdodCwgY29tbWEpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJF9lbmQ6IHBhcnNlLXNwYW4oMSBhdCAoJGxvY2F0aW9uICsgMSkgJGdyaWQpO1xuICAgICAgJF9lbmQ6IGdldC1pc29sYXRpb24oJF9lbmQpO1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfbGlnaHQgJF9lbmQsIGNvbW1hKTtcbiAgICB9XG5cbiAgICAkX3N0b3BzOiBqb2luKCRfc3RvcHMsICR0aGlzLXN0b3AsIGNvbW1hKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9zdG9wcztcbn1cblxuXG4vLyBHZXQgQXN5bW1ldHJpY2FsIFNwbGl0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWFzeW0tc3BsaXQoXG4gICRncmlkXG4pIHtcbiAgJGdyaWQgICAgIDogcGFyc2UtZ3JpZCgkZ3JpZCk7XG4gICRfY29sdW1ucyA6IHN1c3ktZ2V0KGNvbHVtbnMsICRncmlkKTtcblxuICAkX2NvbG9yICAgOiBkZWJ1Zy1nZXQoY29sb3IpO1xuICAkX2xpZ2h0ICAgOiBsaWdodGVuKCRfY29sb3IsIDE1JSk7XG4gICRfc3RvcHMgICA6ICgpO1xuXG4gIEBmb3IgJGxvY2F0aW9uIGZyb20gMSB0aHJvdWdoIHN1c3ktY291bnQoJF9jb2x1bW5zKSB7XG4gICAgJHRoaXMtc3RvcDogKCk7XG5cbiAgICAkc3RhcnQ6IHBhcnNlLXNwYW4oMSBhdCAkbG9jYXRpb24gJGdyaWQpO1xuICAgICRzdGFydDogZ2V0LWlzb2xhdGlvbigkc3RhcnQpO1xuICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCB0cmFuc3BhcmVudCAkc3RhcnQsIGNvbW1hKTtcbiAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9jb2xvciAkc3RhcnQsIGNvbW1hKTtcblxuICAgICRfZW5kOiAkc3RhcnQgKyBzcGFuKDEgYXQgJGxvY2F0aW9uICRncmlkKTtcbiAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9saWdodCAkX2VuZCwgY29tbWEpO1xuICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCB0cmFuc3BhcmVudCAkX2VuZCwgY29tbWEpO1xuXG4gICAgJF9zdG9wczogam9pbigkX3N0b3BzLCAkdGhpcy1zdG9wLCBjb21tYSk7XG4gIH1cblxuICBAcmV0dXJuICRfc3RvcHM7XG59XG5cblxuLy8gR2V0IEFzeW1tZXRyaWNhbCBPdXRzaWRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtYXN5bS1vdXRzaWRlKFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkZ3JpZCk7XG5cbiAgJF9jb2xvciAgIDogZGVidWctZ2V0KGNvbG9yKTtcbiAgJF9saWdodCAgIDogbGlnaHRlbigkX2NvbG9yLCAxNSUpO1xuICAkX3RyYW5zICAgOiB0cmFuc3BhcmVudDtcbiAgJF9zdG9wcyAgIDogKCk7XG5cbiAgQGZvciAkbG9jYXRpb24gZnJvbSAxIHRocm91Z2ggc3VzeS1jb3VudCgkX2NvbHVtbnMpIHtcbiAgICAkdGhpcy1zdG9wOiAoKTtcblxuICAgIEBpZiAkbG9jYXRpb24gPT0gMSB7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9j